public IEnumerator Connect(Action onSucessAction = null, Action onErrorAction = null) { if (socket != null && (socket.IsAlive || isConnecting)) { yield break; } isConnecting = true; socket = new WebSocketSharp.WebSocket(url.ToString()); socket.AddRequestHeader(XAuthTokenHeaderKey, loginToken); socket.OnMessage += (sender, e) => messages.Enqueue(e.RawData); socket.OnOpen += (sender, e) => { isConnecting = false; Debug.Log("Opened WebSocket connection"); isConnected = true; if (onSucessAction != null) { TaskManager.Instance.RunOnMainThread(onSucessAction); } }; socket.OnError += (sender, e) => { isConnecting = false; Debug.LogError("WebSocket: " + e.Message); error = e.Message; if (onErrorAction != null) { TaskManager.Instance.RunOnMainThread(onErrorAction); } }; socket.ConnectAsync(); while (!isConnected && error == null) { yield return(0); } }