1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| module WebSocketManager { export var sock: egret.WebSocket; export var data: any; export var eventType: string;
export function connectServer(host: string = "", port?: number) { if (sock) { sock.close(); sock.removeEventListener(egret.ProgressEvent.SOCKET_DATA, onReceiveMessage, this); sock.addEventListener(egret.Event.CONNECT, onSocketOpen, this); } sock = new egret.WebSocket(); sock.type = egret.WebSocket.TYPE_STRING; if (port) { sock.connect(host, port); } else { sock.connectByUrl(host); }
sock.addEventListener(egret.ProgressEvent.SOCKET_DATA, onReceiveMessage, this); sock.addEventListener(egret.Event.CONNECT, onSocketOpen, this); sock.addEventListener(egret.Event.CLOSE, onSocketClose, this); sock.addEventListener(egret.IOErrorEvent.IO_ERROR, onError, this);
}
export function onReceiveMessage(e: egret.Event) { console.log('onSocket_Data', e.data); let res = JSON.parse(sock.readUTF()); console.log('res', res); this.eventType = res.eventType; this.data = res.data; console.log("Websocket收到数据", this.eventType, this.data, res.code); this.data['code'] = res.code; if (this.eventType == RoomProtocal.ON_RECONNECT) { this.fromReconn = true; } sock.dispatchEventWith(this.eventType, true, this.data); } let fromReconn: boolean = false; export function onSocketOpen() { console.log("Websocket连接成功"); Global.hideWaritPanel(); egret.log('onSocketOpen'); sendPong(); if (this.fromReconn) { this.fromReconn = false; game.AppFacade.getInstance().sendNotification(SceneNotify.BEGIN); } else { game.AppFacade.getInstance().sendNotification(PanelNotify.OPEN_GAMECONTENT); game.AppFacade.getInstance().sendNotification(SysNotify.CONNECT_SERVER_SUCCESS); } }
export function onSocketClose() { console.log("Websocket连接关闭"); egret.clearInterval(intervalId); game.AppFacade.getInstance().sendNotification(SysNotify.CONNECT_SERVER_DISCONNECT); }
export function onError(event: egret.IOErrorEvent) { console.log("Websocket传输错误:%s", JSON.stringify(event)); } var intervalId; function sendPong() { let data = { eventType: RoomProtocal.ON_PONG, data: {} }; intervalId = egret.setInterval(() => { sock.writeUTF(JSON.stringify(data)); }, this, 1500); }
export function clearSock(): void { if (sock) { sock.close(); sock.removeEventListener(egret.ProgressEvent.SOCKET_DATA, onReceiveMessage, this); sock.removeEventListener(egret.Event.CONNECT, onSocketOpen, this); sock.removeEventListener(egret.Event.CLOSE, onSocketClose, this); sock.removeEventListener(egret.IOErrorEvent.IO_ERROR, onError, this); } }
}
|