Exemplo n.º 1
0
        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");
            });
        }
Exemplo n.º 2
0
        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)); });
        }
Exemplo n.º 3
0
        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();
        }