UNPKG

dragonbones-runtime

Version:

the tools to build dragonbones file for diffrent framework

451 lines (426 loc) 16.2 kB
////////////////////////////////////////////////////////////////////////////////////// // // Copyright (c) 2014-present, Egret Technology. // All rights reserved. // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the Egret nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY EGRET AND CONTRIBUTORS "AS IS" AND ANY EXPRESS // OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES // OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. // IN NO EVENT SHALL EGRET AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;LOSS OF USE, DATA, // OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // ////////////////////////////////////////////////////////////////////////////////////// namespace egret { /** * The egret.WebSocket class enables code to establish a TCP socket connection, for sending and receiving character string or binary data. * To use the methods of the egret.WebSocket class, first use the constructor function new egret.WebSocket to create an egret.WebSocket object. * The socket transmits and receives data in asynchronous mode. * @event egret.Event.CONNECT Successfully connect to the server。 * @event egret.ProgressEvent.SOCKET_DATA Receiving server data。 * @event egret.Event.CLOSE Dispatched when the server closes the connection. * @event egret.ProgressEvent Dispatched when an IO error causes a send or load operation to fail. * @see http://edn.egret.com/cn/docs/page/602 WebSocket * @version Egret 2.4 * @platform Web,Native * @includeExample extension/socket/WebSocket.ts * @language en_US */ /** * egret.WebSocket 类启用代码以建立传输控制协议 (TCP) 套接字连接,用于发送和接收字符串或二进制数据。 * 要使用 egret.WebSocket 类的方法,请先使用构造函数 new egret.WebSocket 创建一个 egret.WebSocket 对象。 * 套接字以异步方式传输和接收数据。 * @event egret.Event.CONNECT 连接服务器成功。 * @event egret.ProgressEvent.SOCKET_DATA 接收服务器数据。 * @event egret.Event.CLOSE 在服务器关闭连接时调度。 * @event egret.IOErrorEvent.IO_ERROR 在出现输入/输出错误并导致发送或加载操作失败时调度。。 * @see http://edn.egret.com/cn/docs/page/602 WebSocket * @version Egret 2.4 * @platform Web,Native * @includeExample extension/socket/WebSocket.ts * @language zh_CN */ export class WebSocket extends egret.EventDispatcher { /** * Send and receive data in character string format * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 以字符串格式发送和接收数据 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public static TYPE_STRING:string = "webSocketTypeString"; /** * Send and receive data in binary format * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 以二进制格式发送和接收数据 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public static TYPE_BINARY:string = "webSocketTypeBinary"; /** * @private */ private socket:ISocket; /** * @private */ private _writeMessage:string = ""; /** * @private */ private _readMessage:string = ""; /** * @private */ private _connected:boolean = false; /** * @private */ private _connecting:boolean = false; /** * Create an egret.WebSocket object * This parameter is reserved for later versions. The connection address and port number are imported in the connect function * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 创建一个 egret.WebSocket 对象 * 参数为预留参数,现版本暂不处理,连接地址和端口号在 connect 函数中传入 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ constructor(host:string = "", port:number = 0) { super(); this._connected = false; this._writeMessage = ""; this._readMessage = ""; this.socket = new egret.ISocket(); this.socket.addCallBacks(this.onConnect, this.onClose, this.onSocketData, this.onError, this); } /** * Connect the socket to the specified host and port number * @param host Name or IP address of the host to be connected * @param port Port number to be connected * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 将套接字连接到指定的主机和端口 * @param host 要连接到的主机的名称或 IP 地址 * @param port 要连接到的端口号 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public connect(host:string, port:number):void { if(!this._connecting && !this._connected) { this._connecting = true; this.socket.connect(host, port); } } /** * 根据提供的url连接 * @param url 全地址。如ws://echo.websocket.org:80 */ public connectByUrl(url:string):void { if(!this._connecting && !this._connected) { this._connecting = true; this.socket.connectByUrl(url); } } /** * Closesocket * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 关闭套接字 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public close():void { if(this._connected) { this.socket.close(); } } /** * @private * */ private onConnect():void { this._connected = true; this._connecting = false; this.dispatchEventWith(egret.Event.CONNECT); } /** * @private * */ private onClose():void { this._connected = false; this.dispatchEventWith(egret.Event.CLOSE); } /** * @private * */ private onError():void { if(this._connecting) { this._connecting = false; } this.dispatchEventWith(egret.IOErrorEvent.IO_ERROR); } /** * @private * * @param message */ private onSocketData(message:any):void { if (typeof message == "string") { this._readMessage += message; } else { this._readByte._writeUint8Array(new Uint8Array(message)); } egret.ProgressEvent.dispatchProgressEvent(this, egret.ProgressEvent.SOCKET_DATA); } /** * Refresh all data accumulated in the output buffer area of the socket * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 对套接字输出缓冲区中积累的所有数据进行刷新 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public flush():void { if (!this._connected) { egret.$warn(3101); return; } if (this._writeMessage) { this.socket.send(this._writeMessage); this._writeMessage = ""; } if (this._bytesWrite) { this.socket.send(this._writeByte.buffer); this._bytesWrite = false; this._writeByte.clear(); } this._isReadySend = false; } /** * @private */ private _isReadySend:boolean = false; /** * Write data in character string in the socket * @param message The character string to be written in the socket * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 将字符串数据写入套接字 * @param message 要写入套接字的字符串 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public writeUTF(message:string):void { if (!this._connected) { egret.$warn(3101); return; } if (this._type == WebSocket.TYPE_BINARY) { this._bytesWrite = true; this._writeByte.writeUTF(message); } else { this._writeMessage += message; } this.flush(); // return; // if (this._isReadySend) { // return; // } // this._isReadySend = true; // egret.callLater(this.flush, this); } /** * Read a UTF-8 character string from the socket * @returns {string} * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 从套接字读取一个 UTF-8 字符串 * @returns {string} * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public readUTF():string { let message:string; if (this._type == WebSocket.TYPE_BINARY) { this._readByte.position = 0; message = this._readByte.readUTF(); this._readByte.clear(); } else { message = this._readMessage; this._readMessage = ""; } return message; } /** * @private */ private _readByte:ByteArray; /** * @private */ private _writeByte:ByteArray; /** * @private */ private _bytesWrite:boolean = false; /** * Write a series of bytes from the specified byte array. The writing operation starts from the location expressed by offset. * If the length parameter is ignored, the default length 0 indicates that data is written from offset in the entire buffer area. * If the offset parameter is ignored, data is written in the entire buffer area. * @param bytes The ByteArray object where data is read from * @param offset Zero-based offset in the ByteArray object. From here start performing data writing * @param length Number of bytes to be written Default value 0 indicates data is written in the entire buffer area from the value specified by the offset parameter * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 从指定的字节数组写入一系列字节。写入操作从 offset 指定的位置开始。 * 如果省略了 length 参数,则默认长度 0 将导致该方法从 offset 开始写入整个缓冲区。 * 如果还省略了 offset 参数,则写入整个缓冲区。 * @param bytes 要从中读取数据的 ByteArray 对象 * @param offset ByteArray 对象中从零开始的偏移量,应由此开始执行数据写入 * @param length 要写入的字节数。默认值 0 导致从 offset 参数指定的值开始写入整个缓冲区 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public writeBytes(bytes:ByteArray, offset:number = 0, length:number = 0):void { if (!this._connected) { egret.$warn(3101); return; } if (!this._writeByte) { egret.$warn(3102); return; } this._bytesWrite = true; this._writeByte.writeBytes(bytes, offset, length); this.flush(); } /** * Read data byte number specified by the length parameter from the socket. Read these bytes into the specified byte array starting from the location expressed by offset. * @param bytes The ByteArray object that data is read into * @param offset The offset for data reading starts from this byte array * @param length Byte number to be read Default value 0 indicates reading all available data * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 从套接字读取 length 参数指定的数据字节数。从 offset 所表示的位置开始,将这些字节读入指定的字节数组 * @param bytes 要将数据读入的 ByteArray 对象 * @param offset 数据读取的偏移量应从该字节数组中开始 * @param length 要读取的字节数。默认值 0 导致读取所有可用的数据 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public readBytes(bytes:ByteArray, offset:number = 0, length:number = 0):void { if (!this._readByte) { egret.$warn(3102); return; } this._readByte.position = 0; this._readByte.readBytes(bytes, offset, length); this._readByte.clear(); } /** * Indicates whether the Socket object is connected currently * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 表示此 Socket 对象目前是否已连接 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public get connected():boolean { return this._connected; } /** * @private */ private _type:string = WebSocket.TYPE_STRING; /** * Format for sending and receiving data. The default setting is the character string format * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 发送和接收数据的格式,默认是字符串格式 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public get type():string { return this._type; } public set type(value:string) { this._type = value; if (value == WebSocket.TYPE_BINARY && !this._writeByte) { this._readByte = new ByteArray(); this._writeByte = new ByteArray(); } } } }