private void ForMessage(StreamlabsEvent streamlabsEvent, object eventData) { switch (streamlabsEvent.For) { case "streamlabs": if (streamlabsEvent.Type == "donation") { var donation = JsonConvert.DeserializeObject <StreamlabsEvent <DonationMessage> >(eventData.ToString()); _logger?.LogDebug($"Donation deserialized successfully"); OnDonation?.Invoke(this, donation); } break; case "twitch_account": { switch (streamlabsEvent.Type) { case "follow": { var follow = JsonConvert.DeserializeObject <StreamlabsEvent <TwitchFollowMessage> >(eventData.ToString()); _logger?.LogDebug($"Twitch Follow deserialized successfully"); OnTwitchFollow?.Invoke(this, follow); } break; case "subscription": { var sub = JsonConvert.DeserializeObject <StreamlabsEvent <TwitchSubscriptionMessage> >(eventData.ToString()); _logger?.LogDebug($"Twitch Sub deserialized successfully"); OnTwitchSubscription?.Invoke(this, sub); } break; case "host": { var host = JsonConvert.DeserializeObject <StreamlabsEvent <TwitchHostMessage> >(eventData.ToString()); _logger?.LogDebug($"Twitch Host deserialized successfully"); OnTwitchHost?.Invoke(this, host); } break; case "bits": { var cheer = JsonConvert.DeserializeObject <StreamlabsEvent <TwitchCheerMessage> >(eventData.ToString()); _logger?.LogDebug($"Twitch Cheer deserialized successfully"); OnTwitchCheer?.Invoke(this, cheer); } break; } } break; case "youtube_account": { switch (streamlabsEvent.Type) { case "follow": { var follow = JsonConvert.DeserializeObject <StreamlabsEvent <YouTubeSubscriptionMessage> >(eventData.ToString()); _logger?.LogDebug($"YouTube Sub deserialized successfully"); OnYouTubeSubscription?.Invoke(this, follow); } break; case "subscription": { var sub = JsonConvert.DeserializeObject <StreamlabsEvent <YouTubeSponsorMessage> >(eventData.ToString()); _logger?.LogDebug($"YouTube Sponsor deserialized successfully"); OnYouTubeSponsor?.Invoke(this, sub); } break; case "superchat": { var super = JsonConvert.DeserializeObject <StreamlabsEvent <YouTubeSuperchatMessage> >(eventData.ToString()); _logger?.LogDebug($"YouTube Superchat deserialized successfully"); OnYouTubeSuperchat?.Invoke(this, super); } break; } } break; case "mixer_account": { switch (streamlabsEvent.Type) { case "follow": { var follow = JsonConvert.DeserializeObject <StreamlabsEvent <MixerFollowMessage> >(eventData.ToString()); _logger?.LogDebug($"Mixer Follow deserialized successfully"); OnMixerFollow?.Invoke(this, follow); } break; case "subscription": { var sub = JsonConvert.DeserializeObject <StreamlabsEvent <MixerSubscriptionMessage> >(eventData.ToString()); _logger?.LogDebug($"Mixer Sub deserialized successfully"); OnMixerSubscription?.Invoke(this, sub); } break; case "host": { var host = JsonConvert.DeserializeObject <StreamlabsEvent <MixerHostMessage> >(eventData.ToString()); _logger?.LogDebug($"Mixer Host deserialized successfully"); OnMixerHost?.Invoke(this, host); } break; } } break; } }
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(); }