import {Event} from '../lang/Event'; import {ObjectBase} from '../lang/ObjectBase'; import {ObjectUtil} from '../lang/ObjectUtil'; //========================================================== // 网络端口。 // // @class // @author maocy // @history 15029 //========================================================== export class Socket extends ObjectBase { // @attribute //_url = MO.Class.register(o, new MO.AGetSet('_url')); protected _url = null; //_stoped = MO.Class.register(o, new MO.AGetter('_stoped'), true); protected _stoped = true; protected //_connected = MO.Class.register(o, new MO.AGetter('_connected'), false); protected _connected = false; //_handle = MO.Class.register(o, new MO.AGetter('_handle')); protected _handle = null; protected _linker = null; // @attribute protected _eventOpen = null; protected _eventSend = null; protected _eventReceive = null; protected _eventClose = null; protected _eventError = null; // @attribute //protected _listenersOpen = MO.Class.register(o, new MO.AListener('_listenersOpen')); //protected _listenersSend = MO.Class.register(o, new MO.AListener('_listenersSend')); //protected _listenersReceive = MO.Class.register(o, new MO.AListener('_listenersReceive')); //protected _listenersClose = MO.Class.register(o, new MO.AListener('_listenersClose')); //protected _listenersError = MO.Class.register(o, new MO.AListener('_listenersError')); //========================================================== // 打开处理。 // // @method // @param event:Event 事件信息 //========================================================== public onOpen(event) { var o = this; o._connected = true; //o.processOpenListener(event); } //========================================================== // 打开处理。 // // @method // @param hEvent:HtmlEvent 页面事件 //========================================================== public ohOpen(hEvent) { var o = this._linker; var event = o._eventOpen; o.onOpen(event); } //========================================================== // 接收数据处理。 // // @method // @param event:Event 事件信息 //========================================================== public onReveive(event) { var o = this; //o.processReceiveListener(event); } //========================================================== // 接收数据处理。 // // @method // @param hEvent:HtmlEvent 页面事件 //========================================================== public ohReceive(hEvent) { var o = this._linker; var event = o._eventReceive; event.message = hEvent.data; o.onReveive(event); } //========================================================== // 关闭处理。 // // @method // @param event:Event 事件信息 //========================================================== public onClose(event) { var o = this; // 分发消息 o._connected = false; //o.processCloseListener(o._eventClose); // 释放链接 o._handle = null; } //========================================================== // 关闭处理。 // // @method // @param hEvent:HtmlEvent 页面事件 //========================================================== public ohClose(hEvent) { var o = this._linker; var event = o._eventClose; o.onClose(event); } //========================================================== // 错误处理。 // // @method // @param event:Event 事件信息 //========================================================== public onError(event) { var o = this; // 分发消息 var event = o._eventError; //o.processErrorListener(event); // 释放链接 o._handle = null; } //========================================================== // 错误处理。 // // @method // @param hEvent:HtmlEvent 页面事件 //========================================================== public ohError(hEvent) { this._linker.onError(event); } //========================================================== // 构造处理。 // // @author maocy // @history 141230 //========================================================== public constructor() { super(); // 设置属性 this._eventOpen = new Event(this); this._eventSend = new Event(this); this._eventReceive = new Event(this); this._eventClose = new Event(this); this._eventError = new Event(this); } //========================================================== // 链接处理。 // // @method // @param url:String 网络地址 //========================================================== public connect(uri) { var o = this; // 获得地址 //var url = o._url = MO.Console.find(MO.FEnvironmentConsole).parse(uri); var url = o._url = uri; // 链接服务器 var handle = o._handle = new WebSocket(url); //handle._linker = o; handle.onopen = o.ohOpen; handle.onmessage = o.ohReceive; handle.onclose = o.ohClose; handle.onerror = o.ohError // 设置属性 o._stoped = false; } //========================================================== // 发送数据处理。 // // @method // @param message:String 消息 //========================================================== public send(message) { var o = this; // 纷发消息 var event = o._eventSend; event.message = message; //o.processSendListener(event); // 发送内容 o._handle.send(message); } //========================================================== // 逻辑处理。 // // @method //========================================================== public process() { var o = this; if (!o._stoped) { if (!o._handle) { o.connect(o._url); } } } //========================================================== // 断开处理。 // // @method //========================================================== public disconnect() { var o = this; var handle = o._handle; if (handle) { handle.close(); o._handle = null; } // 设置属性 o._stoped = true; } //========================================================== // 释放处理。 // // @method //========================================================== public dispose() { // 释放属性 this._eventOpen = ObjectUtil.dispose(this._eventOpen); this._eventSend = ObjectUtil.dispose(this._eventSend); this._eventReceive = ObjectUtil.dispose(this._eventReceive); this._eventClose = ObjectUtil.dispose(this._eventClose); this._eventError = ObjectUtil.dispose(this._eventError); this._handle = null; // 父处理 super.dispose(); } }