using System; using BestHTTP.WebSocket; using UnityEngine; //[System.Serializable] public class WebSocketT /*: MonoBehaviour*/ { //string address = "ws://127.0.0.1:8081/websocket"; WebSocket webSocket; public void Init(string address) { if (webSocket == null) { webSocket = new WebSocket(new Uri(address)); #if !UNITY_WEBGL webSocket.StartPingThread = true; #endif //订阅WS事件 webSocket.OnOpen += OnOpen; webSocket.OnMessage += OnMessageRecv; webSocket.OnBinary += OnBinaryRecv; webSocket.OnClosed += OnClosed; webSocket.OnError += OnError; //开始连接到服务器 webSocket.Open(); } } private void OnError(WebSocket ws, string reason) { string errorMsg = string.Empty; #if !UNITY_WEBGL || UNITY_EDITOR if (ws.InternalRequest.Response != null) { errorMsg = string.Format("服务器的状态码: {0} 消息: {1}", ws.InternalRequest.Response.StatusCode, ws.InternalRequest.Response.Message); } #endif Debug.LogFormat("OnError:错误发生: {0}", errorMsg); webSocket = null; } public void Destroy() { if (webSocket != null) { webSocket.Close(); webSocket = null; } } /// /// 与WebSocket服务器的连接建立 /// /// void OnOpen(WebSocket ws) { Debug.Log("后端连接成功"); webSocket.Send("后端连接成功"); } /// /// 从服务器接收到新的文本消息时 /// /// /// void OnMessageRecv(WebSocket ws, string message) { Debug.LogFormat("接收到:{0}", message); LocalVideo.Inst.Dispose(message); } /// /// 从服务器接收到新的二进制消息时 /// /// /// void OnBinaryRecv(WebSocket ws, byte[] data) { Debug.LogFormat("接收到(二进制):{0}", data.Length); } /// /// WebSocket连接关闭时 /// /// /// /// void OnClosed(WebSocket ws, UInt16 code, string message) { Debug.LogFormat("连接关闭:{0}", message); webSocket = null; } /// /// 遇到错误时 /// /// /// void OnError(WebSocket ws, Exception ex) { string errorMsg = string.Empty; #if !UNITY_WEBGL || UNITY_EDITOR if (ws.InternalRequest.Response != null) { errorMsg = string.Format("服务器的状态码: {0} 消息: {1}", ws.InternalRequest.Response.StatusCode, ws.InternalRequest.Response.Message); } #endif Debug.LogFormat("OnError:错误发生: {0}\n", (ex != null ? ex.Message : "Unknown Error " + errorMsg)); webSocket = null; } }