private async Task <bool> ConnectSocket()
        {
            try
            {
                this.socket.OnDisconnected -= Socket_OnDisconnected;
                await this.socket.Disconnect();

                JObject jobj = await this.GetJObjectAsync("socket/token?access_token=" + this.token.accessToken);

                if (jobj != null && jobj.ContainsKey("socket_token"))
                {
                    string socketToken = jobj["socket_token"].ToString();

                    this.socket.Listen("event", async(data) =>
                    {
                        try
                        {
                            if (data != null)
                            {
                                JObject eventJObj = JObject.Parse(data.ToString());
                                if (eventJObj.ContainsKey("type"))
                                {
                                    if (eventJObj["type"].Value <string>().Equals("donation", StringComparison.InvariantCultureIgnoreCase))
                                    {
                                        var messages = eventJObj["message"] as JArray;
                                        if (messages != null)
                                        {
                                            foreach (var message in messages)
                                            {
                                                StreamlabsDonation slDonation = message.ToObject <StreamlabsDonation>();
                                                await EventService.ProcessDonationEvent(EventTypeEnum.StreamlabsDonation, slDonation.ToGenericDonation());
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            Logger.Log(ex);
                        }
                    });

                    this.socket.OnDisconnected += Socket_OnDisconnected;
                    await this.socket.Connect($"https://sockets.streamlabs.com?token={socketToken}");

                    return(true);
                }
            }
            catch (Exception ex)
            {
                Logger.Log(ex);
            }
            return(false);
        }
        protected override async Task <Result> InitializeInternal()
        {
            JObject jobj = await this.GetJObjectAsync("socket/token?access_token=" + this.token.accessToken);

            if (jobj != null && jobj.ContainsKey("socket_token"))
            {
                string socketToken = jobj["socket_token"].ToString();

                await this.socket.Connect($"https://sockets.streamlabs.com", $"token={socketToken}");

                this.socket.Listen("event", async(data) =>
                {
                    if (data != null)
                    {
                        JObject eventJObj = JObject.Parse(data.ToString());
                        if (eventJObj.ContainsKey("type"))
                        {
                            if (eventJObj["type"].Value <string>().Equals("donation", StringComparison.InvariantCultureIgnoreCase))
                            {
                                var messages = eventJObj["message"] as JArray;
                                if (messages != null)
                                {
                                    foreach (var message in messages)
                                    {
                                        StreamlabsDonation slDonation = message.ToObject <StreamlabsDonation>();
                                        await EventService.ProcessDonationEvent(EventTypeEnum.StreamlabsDonation, slDonation.ToGenericDonation());
                                    }
                                }
                            }
                        }
                    }
                });
                this.TrackServiceTelemetry("Streamlabs");
                return(new Result());
            }
            return(new Result(Resources.StreamlabsWebSocketTokenFailed));
        }