Laya Byte
4078 ワード
参考Big EndianとLittle Endian Layaの公式例Byteバイナリ読み書きjsノート1 ArrayBuffer TypeArrayについて
開発プロジェクトでは、バイナリの操作は不可欠です.html 5時代には、バイナリへのサポートが大きな突破を遂げた.しかしapiの煩雑さは,開発者開発プロジェクトには不便である.ページゲーム時代にはActionscript 3.0のバイナリ配列ByteArrayは、機能が充実しており、apiの操作が簡単で分かりやすいため、LayaのByteはByteArrayを参照するとともにhtml 5のTypedArrayタイプ化配列の特徴を受けている.
次のコードは、ネットワークとフォーマットを参照します.Socket
以下、Layaの公式例WebSocketの送信と受信を参照
注意:Byteとsocketをインスタンス化するときにendianが設定されているのを見て、これは無視しやすいところです.一部の開発者はこれに注意していません.フロントエンドとサービス側のendianが一致していないため、受信したデータが文字化されていません.だから、データを読み書きするときは必ずendianの一致を保証しなければなりません.
バイト配列で必要なデータをByte配列に読み込み、最後にサーバに送信したのはbyteです.buffer、これはArrayBufferのデータ型です.ここではsendのパラメータがArrayBufferであることに注意しなければならない.多くの開発者は注意せず、直接Byteに渡され、送信データが正しくない可能性がある.これを書くとsocket.send(this.byte);これは間違いです.この点に注意してください.
判断タイプはsocketの例を参照できます.
開発プロジェクトでは、バイナリの操作は不可欠です.html 5時代には、バイナリへのサポートが大きな突破を遂げた.しかしapiの煩雑さは,開発者開発プロジェクトには不便である.ページゲーム時代にはActionscript 3.0のバイナリ配列ByteArrayは、機能が充実しており、apiの操作が簡単で分かりやすいため、LayaのByteはByteArrayを参照するとともにhtml 5のTypedArrayタイプ化配列の特徴を受けている.
次のコードは、ネットワークとフォーマットを参照します.Socket
module laya {
import Event = Laya.Event;
import Socket = Laya.Socket;
import Byte = Laya.Byte;
export class NetWork_Socket {
private socket: Socket;
private output: Byte;
constructor() {
Laya.init(550, 400);
this.connect();
}
private connect(): void {
this.socket = new Socket();
//this.socket.connect("echo.websocket.org", 80);
this.socket.connectByUrl("ws://echo.websocket.org:80");
this.output = this.socket.output;
this.socket.on(Event.OPEN, this, this.onSocketOpen);
this.socket.on(Event.CLOSE, this, this.onSocketClose);
this.socket.on(Event.MESSAGE, this, this.onMessageReveived);
this.socket.on(Event.ERROR, this, this.onConnectError);
}
private onSocketOpen(): void {
console.log("Connected");
//
this.socket.send("demonstrate ");
// output.writeByte
var message: string = "demonstrate ";
for (var i: number = 0; i < message.length; ++i) {
this.output.writeByte(message.charCodeAt(i));
}
this.socket.flush();
}
private onSocketClose(): void {
console.log("Socket closed");
}
private onMessageReveived(message: any): void {
console.log("Message from server:");
if (typeof message == "string") {
console.log(message);
}
else if (message instanceof ArrayBuffer) {
console.log(new Byte(message).readUTFBytes());
}
this.socket.input.clear();
}
private onConnectError(e: Event): void {
console.log("error");
}
}
}
new laya.NetWork_Socket();
以下、Layaの公式例WebSocketの送信と受信を参照
注意:Byteとsocketをインスタンス化するときにendianが設定されているのを見て、これは無視しやすいところです.一部の開発者はこれに注意していません.フロントエンドとサービス側のendianが一致していないため、受信したデータが文字化されていません.だから、データを読み書きするときは必ずendianの一致を保証しなければなりません.
var by:Byte = new Byte();// Byte
by.endian = Byte.LITTLE_ENDIAN;// endian;
by.writeInt32(5000);// int32
by.writeUint16(16);// uint16
byte.writeArrayBuffer(by.buffer);// byte , by.buffer;
byte.clear();// ; ;
this.socket.send(this.byte.buffer);// socket 。
バイト配列で必要なデータをByte配列に読み込み、最後にサーバに送信したのはbyteです.buffer、これはArrayBufferのデータ型です.ここではsendのパラメータがArrayBufferであることに注意しなければならない.多くの開発者は注意せず、直接Byteに渡され、送信データが正しくない可能性がある.これを書くとsocket.send(this.byte);これは間違いです.この点に注意してください.
private function receiveHandler(msg:Object = null):void
{
//............. ArrayBuffer
this.byte.clear();
this.byte.writeArrayBuffer(msg);// byte 。
this.byte.pos = 0;// ;
//// , ,
var a:int = this.byte.getByte();
var b:int = this.byte.getInt16();
var c:Number = this.byte.getFloat32();
var d:String = this.byte.getString();
var e:String = this.byte.getUTFString();
}
判断タイプはsocketの例を参照できます.
private onMessageReveived(message: any): void {
console.log("Message from server:");
if (typeof message == "string") {
console.log(message);
}
else if (message instanceof ArrayBuffer) {
console.log(new Byte(message).readUTFBytes());
}
this.socket.input.clear();
}