private async Task <bool> ConnectSocket()
        {
            await this.socket.Connect("https://nodeapi.treatstream.com/", "token=" + this.socketToken);

            this.socket.Listen("connect", (data) =>
            {
                this.WebSocketConnected = true;
            });

            this.socket.Listen("realTimeTreat", (data) =>
            {
                if (data != null)
                {
                    TreatStreamEvent tsEvent = JSONSerializerHelper.DeserializeFromString <TreatStreamEvent>(data.ToString());
                    if (tsEvent != null)
                    {
                        this.DonationOccurred(tsEvent);
                        Task.Run(async() =>
                        {
                            await EventService.ProcessDonationEvent(EventTypeEnum.TreatStreamDonation, tsEvent.ToGenericDonation());
                        });
                    }
                }
            });

            this.socket.Listen("error", async(errorData) =>
            {
                if (errorData != null)
                {
                    Logger.Log(errorData.ToString());
                }

                this.WebSocketDisconnectedOccurred();
                await this.ConnectSocket();
            });

            this.socket.Listen("disconnect", async(errorData) =>
            {
                if (errorData != null)
                {
                    Logger.Log(errorData.ToString());
                }

                this.WebSocketDisconnectedOccurred();
                await this.ConnectSocket();
            });

            for (int i = 0; i < 10 && !this.WebSocketConnected; i++)
            {
                await Task.Delay(1000);
            }

            if (this.WebSocketConnected)
            {
                this.WebSocketConnectedOccurred();
                return(true);
            }
            return(false);
        }
 public void DonationOccurred(TreatStreamEvent eventData)
 {
     this.OnDonationOccurred(this, eventData);
 }