private void SocketSetup(string socketToken) { _socket = IO.Socket($"wss://sockets.streamlabs.com", new IO.Options { AutoConnect = false, // Upgrade = true, Transports = ImmutableList.Create(WebSocket.NAME), QueryString = $"token={socketToken}" }); _socket.On(Socket.EVENT_CONNECT, () => { _logger?.LogDebug("Connected"); _pingTimer.Start(); OnConnected?.Invoke(this, true); }); _socket.On(Socket.EVENT_DISCONNECT, (data) => { _logger?.LogDebug($"Disonnected: {data}"); _pingTimer.Stop(); OnDisconnected?.Invoke(this, true); }); _socket.On(Socket.EVENT_ERROR, (data) => { _logger?.LogDebug($"ErrorData: {data}"); OnError?.Invoke(this, (string)data); }); _socket.On("event", (eventData) => { _logger?.LogTrace($"EventData: {eventData}"); var streamlabsEvent = JsonConvert.DeserializeObject <StreamlabsEvent>(eventData.ToString()); _logger?.LogTrace($"Type: {streamlabsEvent.Type}"); if (string.IsNullOrEmpty(streamlabsEvent.For)) { _logger?.LogTrace($"For: Empty or null"); if (streamlabsEvent.Type == "streamlabels") { var streamlabels = JsonConvert.DeserializeObject <StreamlabelsEvent>(eventData.ToString()); _logger?.LogDebug($"Streamlabels deserialized successfully"); OnStreamlabels?.Invoke(this, streamlabels); } if (streamlabsEvent.Type == "streamlabels" && streamlabsEvent.Type == "donation") { //Undocumented OnUndocumented?.Invoke(this, eventData.ToString()); } } else { _logger?.LogTrace($"For: {streamlabsEvent.For}"); ForMessage(streamlabsEvent, eventData); } }); _socket.On("pong", (data) => { _logger?.LogTrace($"Pong"); }); }
public Client() : base() { _threadDispatcher = new GameObject($"StreamLabsClientUnityDispatcher-{Guid.NewGuid()}"); _threadDispatcher.AddComponent <ThreadDispatcher>(); UnityEngine.Object.DontDestroyOnLoad(_threadDispatcher); base.OnConnected += ((object sender, bool e) => { ThreadDispatcher.Instance().Enqueue(() => OnConnected?.Invoke(sender, e)); }); base.OnDisconnected += ((object sender, bool e) => { ThreadDispatcher.Instance().Enqueue(() => OnDisconnected?.Invoke(sender, e)); }); base.OnError += ((object sender, string e) => { ThreadDispatcher.Instance().Enqueue(() => OnError?.Invoke(sender, e)); }); base.OnUndocumented += ((object sender, string e) => { ThreadDispatcher.Instance().Enqueue(() => OnUndocumented?.Invoke(sender, e)); }); base.OnDonation += ((object sender, StreamlabsEvent <DonationMessage> e) => { ThreadDispatcher.Instance().Enqueue(() => OnDonation?.Invoke(sender, e)); }); base.OnStreamlabels += ((object sender, StreamlabelsEvent e) => { ThreadDispatcher.Instance().Enqueue(() => OnStreamlabels?.Invoke(sender, e)); }); base.OnTwitchFollow += ((object sender, StreamlabsEvent <TwitchFollowMessage> e) => { ThreadDispatcher.Instance().Enqueue(() => OnTwitchFollow?.Invoke(sender, e)); }); base.OnTwitchSubscription += ((object sender, StreamlabsEvent <TwitchSubscriptionMessage> e) => { ThreadDispatcher.Instance().Enqueue(() => OnTwitchSubscription?.Invoke(sender, e)); }); base.OnTwitchHost += ((object sender, StreamlabsEvent <TwitchHostMessage> e) => { ThreadDispatcher.Instance().Enqueue(() => OnTwitchHost?.Invoke(sender, e)); }); base.OnTwitchCheer += ((object sender, StreamlabsEvent <TwitchCheerMessage> e) => { ThreadDispatcher.Instance().Enqueue(() => OnTwitchCheer?.Invoke(sender, e)); }); base.OnYouTubeSubscription += ((object sender, StreamlabsEvent <YouTubeSubscriptionMessage> e) => { ThreadDispatcher.Instance().Enqueue(() => OnYouTubeSubscription?.Invoke(sender, e)); }); base.OnYouTubeSponsor += ((object sender, StreamlabsEvent <YouTubeSponsorMessage> e) => { ThreadDispatcher.Instance().Enqueue(() => OnYouTubeSponsor?.Invoke(sender, e)); }); base.OnYouTubeSuperchat += ((object sender, StreamlabsEvent <YouTubeSuperchatMessage> e) => { ThreadDispatcher.Instance().Enqueue(() => OnYouTubeSuperchat?.Invoke(sender, e)); }); base.OnMixerFollow += ((object sender, StreamlabsEvent <MixerFollowMessage> e) => { ThreadDispatcher.Instance().Enqueue(() => OnMixerFollow?.Invoke(sender, e)); }); base.OnMixerSubscription += ((object sender, StreamlabsEvent <MixerSubscriptionMessage> e) => { ThreadDispatcher.Instance().Enqueue(() => OnMixerSubscription?.Invoke(sender, e)); }); base.OnMixerHost += ((object sender, StreamlabsEvent <MixerHostMessage> e) => { ThreadDispatcher.Instance().Enqueue(() => OnMixerHost?.Invoke(sender, e)); }); }
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(); }