2007 年 2 月 9 日 23 時 59 分

ServerCutText メッセージ


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


今日は ServerCutText メッセージだ。
これは種類 3 番のサーバメッセージで、
クリップボードに含まれるテキストが、
サーバ側の操作により内容が変化した際に送られる。

これは、ClientCutText クライアントメッセージと逆で、
サーバ側の操作でコピー等が発生した際に、
それをクライアントに通知するために使用される。

ServerCutText メッセージの構造は、
ClientCutText クライアントメッセージと同じである。

    U8 messageType; // 常に 3
    U8 reserved[3]; // 3 バイトの詰め物
    String text; // クリップボードの文字列

=========== ServerCutText.java ===========

package jp.loafer.rfb.message.server;

import java.io.IOException;

import jp.loafer.rfb.RFBContext;
import jp.loafer.rfb.io.RFBInputStream;
import jp.loafer.rfb.io.RFBOutputStream;

/**
* ServerCutText クライアントメッセージ。
* @author kes
*/
public class ServerCutTextMessage extends BaseServerMessage {

    /**
     * 永続化用既定コンストラクタ。
     */
    public ServerCutTextMessage() {
        //
    }

    /**
     * ServerCutText メッセージを作成。
     * @param text サーバのクリップボードに送る文字列。
     */
    public ServerCutTextMessage(String text) {
        this.text = text;
    }

    /**
     * 文字列を取得。
     * @return text。
     */
    public String getText() {
        return text;
    }

    /**
     * @see ServerMessage#getType()
     */
    public int getType() {
        return ServerMessage.SERVER_CUT_TEXT;
    }

    /**
     * @see ServerMessage#read(RFBContext, RFBInputStream)
     */
    @Override
    public void read(RFBContext context, RFBInputStream in) throws IOException {
        super.read(context, in);
        in.readU8();
        in.readU8();
        in.readU8();
        text = in.readString();
    }

    /**
     * @see ServerMessage#write(RFBContext, RFBOutputStream)
     */
    @Override
    public void write(RFBContext context, RFBOutputStream out) throws IOException {
        super.write(context, out);
        out.writeU8(0);
        out.writeU8(0);
        out.writeU8(0);
        out.writeString(text);
    }
   
    /**
     * @see Object#toString()
     */
    @Override
    public String toString() {
        return getClass().getName() + "[text=" + text + "]";
    }

    private String text;

}

=========== end of ServerCutText.java ===========

RFB クライアントは、サーバから通知を受け取ると、
ユーザのクリップボードを置き換えることで、
サーバ上でコピーしたテキストを、
RFB の外で動作しているクライアント側のプログラムに
貼り付けることができるようになる。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.