#if !BESTHTTP_DISABLE_WEBSOCKET using System; using UnityEngine; using BestHTTP; using BestHTTP.WebSocket; using BestHTTP.Examples; using System.Text; public class WebSocketSample : MonoBehaviour { #region Private Fields /// /// The WebSocket address to connect /// string address = "wss://rtc.shadowcreator.com:3300"; /// /// Default text to send /// string msgToSend = "Hello World!"; /// /// Debug text to draw on the gui /// string Text = string.Empty; /// /// Saved WebSocket instance /// WebSocket webSocket; /// /// GUI scroll position /// Vector2 scrollPos; #endregion #region Unity Events void OnDestroy() { if (webSocket != null) webSocket.Close(); } void OnGUI() { GUIHelper.DrawArea(GUIHelper.ClientArea, true, () => { scrollPos = GUILayout.BeginScrollView(scrollPos); GUILayout.Label(Text); GUILayout.EndScrollView(); GUILayout.Space(5); GUILayout.FlexibleSpace(); address = GUILayout.TextField(address); if (webSocket == null && GUILayout.Button("Open Web Socket")) { // Create the WebSocket instance webSocket = new WebSocket(new Uri(address)); #if !UNITY_WEBGL webSocket.StartPingThread = true; #if !BESTHTTP_DISABLE_PROXY if (HTTPManager.Proxy != null) webSocket.InternalRequest.Proxy = new HTTPProxy(HTTPManager.Proxy.Address, HTTPManager.Proxy.Credentials, false); #endif #endif // Subscribe to the WS events webSocket.OnOpen += OnOpen; webSocket.OnMessage += OnMessageReceived; webSocket.OnBinary += OnBinaryReceived; webSocket.OnClosed += OnClosed; webSocket.OnError += OnError; // Start connecting to the server webSocket.Open(); Text += "Opening Web Socket...\n"; } if (webSocket != null && webSocket.IsOpen) { GUILayout.Space(10); GUILayout.BeginHorizontal(); msgToSend = GUILayout.TextField(msgToSend); if (GUILayout.Button("Send", GUILayout.MaxWidth(70))) { Text += "Sending message...\n"; // Send message to the server webSocket.Send(msgToSend); } GUILayout.EndHorizontal(); GUILayout.Space(10); if (GUILayout.Button("Close")) { // Close the connection webSocket.Close(1000, "Bye!"); } } }); } #endregion #region WebSocket Event Handlers /// /// Called when the web socket is open, and we are ready to send and receive data /// void OnOpen(WebSocket ws) { Text += string.Format("-WebSocket Open!\n"); } /// /// Called when we received a text message from the server /// void OnMessageReceived(WebSocket ws, string message) { Text += string.Format("-Message received: {0}\n", message); } /// /// Called when we received a text message from the server /// void OnBinaryReceived(WebSocket webSocket, byte[] data) { // string str = Encoding.UTF8.GetString (data); Debug.Log (string.Format("-Binary received: {0}\n", data.Length)); // Text += string.Format("-Binary received: {0}\n", str); } /// /// Called when the web socket closed /// void OnClosed(WebSocket ws, UInt16 code, string message) { Text += string.Format("-WebSocket closed! Code: {0} Message: {1}\n", code, message); webSocket = null; } /// /// Called when an error occured on client side /// void OnError(WebSocket ws, Exception ex) { string errorMsg = string.Empty; #if !UNITY_WEBGL || UNITY_EDITOR if (ws.InternalRequest.Response != null) errorMsg = string.Format("Status Code from Server: {0} and Message: {1}", ws.InternalRequest.Response.StatusCode, ws.InternalRequest.Response.Message); #endif Text += string.Format("-An error occured: {0}\n", (ex != null ? ex.Message : "Unknown Error " + errorMsg)); webSocket = null; } #endregion } #endif