public void OpenSocket(Uri InUri) { Debug.Log("[Socket Utility] EnterGame = " + (webSocket == null || webSocket.IsOpen)); if (webSocket == null || !webSocket.IsOpen) { Debug.Log("[Socket Utility] Open socket."); WebSocket socket = new WebSocket(InUri); socket.OnOpen += openSocket => { Debug.Log("[Socket Utility] Open socket succeed."); webSocket = openSocket; webSocket.OnBinary += OnBinaryMsgReceived; webSocket.OnError += OnWebSocketError; webSocket.OnClosed += OnWebSocketClosed; UpdateSocketState(SocketState.Idle); NetDispatcher.Instance.RegisterNetEvent(NetProtocolEnum.Q3RDWSEnter, StartHeartbeat); EnterGame(); }; //socket.StartPingThread = true; socket.Open(); } }
private void OnWebSocketError(WebSocket InWebSocket, Exception InException) { string errorMsg = string.Empty; #if !UNITY_WEBGL if (InWebSocket.InternalRequest.Response != null) { errorMsg = "Status Code from Server: " + InWebSocket.InternalRequest.Response.StatusCode + "\nMessage: " + InWebSocket.InternalRequest.Response.Message + "\n"; } #else errorMsg += "-An error occured: " + (null == InException ? "Unknown Error!" : InException.Message) + "\n" + errorMsg; #endif Debug.Log("[Socket Utility] " + errorMsg); UpdateSocketState(SocketState.Error); }
private void OnBinaryMsgReceived(WebSocket InWebSocket, byte[] InBinaryData) { string oriMsg = Encoding.Default.GetString(InBinaryData); JsonData oriJson = JsonMapper.ToObject(oriMsg); int msgKey = Convert.ToInt32(oriJson["echo"].ToJson()); if (msgKey > 0) { Debug.Log("[Socket Utility] Resp = " + oriMsg); if (netMsgQueue.Count > 0) { if (netMsgQueue.Peek().Key == msgKey) { string code = oriJson["code"].ToString(); NetMsg msg = Dequeue(); UpdateSocketState(SocketState.Idle); switch (code) { case NetConfig.NET_BACK_SUCCEED_CODE_S: msg.InvokeCallback(NetResultEnum.Done, oriJson); break; default: Debug.Log("[Socket Utility] ->resp<- error code = " + code + "\nerror = " + oriJson["error"]); msg.InvokeCallback(NetResultEnum.Error, null); break; } } } } else if (msgKey == NetConfig.HEART_BEAT_MSG_CODE_I) { ReceiveHeartBeatMsg(oriJson); } else { Debug.Log("[Socket Utility] Unknow message code."); } }
private void OnWebSocketClosed(WebSocket InWebSocket, ushort InCode, string InMsg) { string errorMsg = "Unknow code."; switch (InCode) { case 1000: errorMsg = "Socket 超时断开。"; break; case 1011: errorMsg = "协议名称错误,请校验API文档。"; break; } Debug.Log("[Socket Utility] Closed.\nCode = " + InCode + "\nErrorMsg = " + errorMsg + "\nOriMsg = " + InMsg); UpdateSocketState(SocketState.Closed); }
void OnApplicationQuit() { switch (socketState) { case SocketState.Opened: case SocketState.Idle: case SocketState.Busy: case SocketState.TimeOut: socketState = SocketState.Closed; StopHeartbeat(); if (IsInvoking("Connect")) { CancelInvoke("Connect"); } if (null != webSocket && webSocket.IsOpen) { webSocket.Close(); } webSocket = null; break; } }