これが事実です。私はゲームを作りたいです。クライアントはフラッシュで作成され、サーバーはJavaで作成されます。サーバー側から、ストリームに書き込む最初のバイトは、次のようなプロトコル ID です。
try
{
Output.writeByte(LOGIN);
Output.writeByte((byte)ID);
Output.writeByte(new_position.x);
Output.writeByte(new_position.y);
Output.flush();
}
「onResponse」イベントがトリガーされた後、ソケットは次のように読み取られます。
type:int = socket_client.readByte();
if (type == 0x1)
FP.console.log("You are logged as " + socket_client.readByte() + " in x:" + socket_client.readByte() + " y:" + socket_client.readByte() );
else if (type == 0x2)
FP.console.log("You are now in x:" + socket_client.readByte() + " y:" + socket_client.readByte());
もうお気づきかもしれませんが、これは私にいくつかの問題をもたらします。サーバーが情報を 2 つに分割して送信する場合があるため、上記のコードは EOF 例外をスローします。次のコードをトレースすると、次の結果が得られることがあります。
trace("SIZE: " + socket_client.bytesAvailable);
//var type:int = socket_client.readByte();
var values:String = "";
while (socket_client.bytesAvailable > 0)
values += socket_client.readByte() + " ";
trace(values);`
値:
SIZE: 1
2
SIZE: 2
2 6
最初の「2」はプロトコル ID、2 番目と 3 番目は x と y の値を表します。さて、問題は、どうすればこれを防ぐことができるかということです。必要な情報がすべて揃うまで、どうすれば「待つ」ことができますか? ところで、Javaではこれは決して起こりませんが、as3よりも制御できません。