このアーカイブは同期化されません。 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 の外で動作しているクライアント側のプログラムに
貼り付けることができるようになる。