public void connectSocket() { if (this.TOKEN != null) { try { Dictionary<string, string> _author = new Dictionary<string, string>(); _author.Add("token", this.TOKEN); IO.Options _option = new IO.Options(); //_option.Timeout = 5000; _option.Query = _author; _option.ForceNew = true; _option.Reconnection = true; _option.ReconnectionDelay = 500; mSocket = IO.Socket(HOSTNAME, _option); mSocket.On(Socket.EVENT_CONNECT, () => { Dispatcher dispatcher = Deployment.Current.Dispatcher; dispatcher.BeginInvoke(() => { // MessageBox.Show("OK"); }); Debug.WriteLine("OK"); }); mSocket.On(Socket.EVENT_CONNECT_ERROR, onConnectError); mSocket.On(Socket.EVENT_CONNECT_TIMEOUT, onConnectTimeout); mSocket.On(Socket.EVENT_ERROR, () => { Dispatcher dispatcher = Deployment.Current.Dispatcher; dispatcher.BeginInvoke(() => { // MessageBox.Show("ERROR"); mSocket.Connect(); mSocket.Open(); }); }); mSocket.On(Constant.SOCKET_EVENT_JOIN, onJoinRoom); mSocket.On(Constant.SOCKET_EVENT_ADD, onAddUser); mSocket.On(Constant.SOCKET_EVENT_LEAVE, onLeaveRoom); mSocket.On(Constant.SOCKET_EVENT_CHANGE_ROOM_TITLE, onChangeRoomTitle); mSocket.On(Constant.SOCKET_EVENT_CHAT, (data) => { Debug.WriteLine(data.ToString()); Dispatcher dispatcher = Deployment.Current.Dispatcher; dispatcher.BeginInvoke(() => { String result = data.ToString(); ChatResponse resultObject = JsonConvert.DeserializeObject<ChatResponse>(result); if(resultObject.data.message.type == 2) { App.ViewModel.Items.Add(new ViewModels.ItemViewModel() { SenderID = resultObject.data.sender._id, CreateAt = resultObject.data.sequence, MessageText = resultObject.data.message.message, Avatar = new Uri(resultObject.data.sender.avatar), Type = resultObject.data.message.type, thumbnail = new Uri(resultObject.data.message.file.thumbnail, UriKind.RelativeOrAbsolute) }); } else { App.ViewModel.Items.Add(new ViewModels.ItemViewModel() { SenderID = resultObject.data.sender._id, CreateAt = resultObject.data.sequence, MessageText = resultObject.data.message.message, Avatar = new Uri(resultObject.data.sender.avatar), Type = resultObject.data.message.type }); } if(resultObject.data.sender._id != App._userid) { var stream = Application.GetResourceStream(new Uri(@"Assets/Audio/recieve.wav", UriKind.RelativeOrAbsolute)); var effect = SoundEffect.FromStream(stream.Stream); var soundInstance = effect.CreateInstance(); FrameworkDispatcher.Update(); soundInstance.Play(); App._reuserid = resultObject.data.sender._id; ToastPrompt tost = new ToastPrompt() { Title = resultObject.data.sender.username, Message = resultObject.data.message.message, }; tost.Tap += tosk_Tap; tost.Show(); } }); }); mSocket.Connect(); } catch(Exception e) { Debug.WriteLine("IO exception " + e.Message); //mSocket.Close(); // mSocket.Open(); } } else { Debug.WriteLine("No token found!"); } }
public void Connect(string socketToken) { string url = $"https://sockets.streamlabs.com"; IO.Options opt = new IO.Options { QueryString = $"token={socketToken}", Reconnection = true, ReconnectionDelay = 500, Port = 433, Secure = true, AutoConnect = false, Upgrade = true }; Quobject.SocketIoClientDotNet.Client.Socket socket = IO.Socket(url, opt); socket.On(Quobject.SocketIoClientDotNet.Client.Socket.EVENT_CONNECT, () => { log?.LogDebug("Connected"); OnConnected?.Invoke(this, new EventArgs()); }); socket.On(Quobject.SocketIoClientDotNet.Client.Socket.EVENT_DISCONNECT, data => { log?.LogDebug($"Disonnected: {data}"); OnDisconnected?.Invoke(this, (string)data); }); socket.On(Quobject.SocketIoClientDotNet.Client.Socket.EVENT_ERROR, data => { log?.LogDebug($"Error: {data}"); OnError?.Invoke(this, data); }); socket.On("event", data => { log?.LogTrace($"EventData: {data}"); Console.WriteLine(data); StreamlabsEvent streamlabsEvent = JsonConvert.DeserializeObject <StreamlabsEvent>(data.ToString()); Console.WriteLine(data); JToken token = streamlabsEvent.Message; if (token.Type == JTokenType.Array) { token = token.First; } switch (streamlabsEvent.Type) { case "streamlabels.underlying": OnStreamlabels?.Invoke(this, token.ToObject <StreamlabsLabels>()); return; case "donation": OnDonation?.Invoke(this, token.ToObject <StreamlabsDonation>()); break; case "redemption": break; case "subscription": switch (token["platform"].Value <string>()) { case "twitch_account": OnTwitchSubscription?.Invoke(this, token.ToObject <StreamlabsTwitchSubscription>()); break; } break; case "follow": switch (token["platform"].Value <string>()) { case "twitch_account": OnTwitchFollow?.Invoke(this, token.ToObject <StreamlabsTwitchFollow>()); break; } break; case "host": switch (token["platform"].Value <string>()) { case "twitch_account": OnTwitchHost?.Invoke(this, token.ToObject <StreamlabsTwitchHost>()); break; } break; case "bits": switch (token["platform"].Value <string>()) { case "twitch_account": OnTwitchCheer?.Invoke(this, token.ToObject <StreamlabsTwitchCheer>()); break; } break; case "raid": switch (token["platform"].Value <string>()) { case "twitch_account": OnTwitchRaid?.Invoke(this, token.ToObject <StreamlabsTwitchRaid>()); break; } break; default: OnUndocumented?.Invoke(this, token); break; } // else if (streamlabsEvent.Message.GetType() is "redemption") // { // } // else if (streamlabsEvent.Message.GetType() is "pausequeue") // { // } // else if (streamlabsEvent.Message.GetType() is "unpausequeue") // { // } // else if (streamlabsEvent.Message.GetType() is "mutevolume") // { // } // else if (streamlabsEvent.Message.GetType() is "unmutevolume") // { // } // else if (streamlabsEvent.Message.GetType() is "skipalert") // { // } }); socket.Open(); }