Beispiel #1
0
 private void ProcessTopicCommand(string[] tokens)
 {
     tokens[3] = RemoveLeadingColon(tokens[3]);
     OnTopicChanged?.Invoke(this, new UserChannelMessageEventArgs(
                                Rfc2812Util.UserFromString(tokens[0]), tokens[2], CondenseStrings(tokens, 3)));
     //Trace.WriteLine("Topic changed", "IRC");
 }
Beispiel #2
0
        private void WebSocket_OnMessage(string message)
        {
            ApiMessage data = JsonConvert.DeserializeObject <ApiMessage>(message);

            switch (data.Type)
            {
            case "status":
            {
                localStorage = data;

                OnTopicChanged?.Invoke(data.Data.Topic);
                OnStreamViewersChanged?.Invoke(data.Data.Stream.Viewers);

                foreach (Service stream in data.Data.Stream.Services)
                {
                    if (stream.Status == true)
                    {
                        OnStreamWentOnline?.Invoke(stream);
                    }
                }
            }
            break;

            case "update":
            {
                // wait for status
                if (localStorage is null)
                {
                    break;
                }

                if (data.Data.Topic != null)
                {
                    if (localStorage.Data.Topic.Id != data.Data.Topic.Id)
                    {
                        OnTopicChanged?.Invoke(data.Data.Topic);
                    }

                    localStorage.Data.Topic = data.Data.Topic;
                }

                if (data.Data.Stream != null)
                {
                    // invoke viewers change event only when stream is online
                    if (localStorage.Data.Stream.Status == true && localStorage.Data.Stream.Viewers != data.Data.Stream.Viewers)
                    {
                        OnStreamViewersChanged?.Invoke(data.Data.Stream.Viewers);

                        localStorage.Data.Stream.Viewers = data.Data.Stream.Viewers;
                    }
                    else if (localStorage.Data.Stream.Status == false)
                    {
                        localStorage.Data.Stream.Viewers = 0;
                    }

                    if (data.Data.Stream.Services != null)
                    {
                        for (int i = 0; i < data.Data.Stream.Services.Length; i++)
                        {
                            Service localService  = localStorage.Data.Stream.Services[i];
                            Service remoteService = data.Data.Stream.Services[i];

                            if (localService.Status != remoteService.Status)
                            {
                                if (remoteService.Status == true)
                                {
                                    OnStreamWentOnline?.Invoke(remoteService);
                                }
                                else
                                {
                                    OnStreamWentOffline?.Invoke(remoteService);
                                }
                            }
                        }

                        localStorage.Data.Stream.Status   = data.Data.Stream.Status;
                        localStorage.Data.Stream.Services = data.Data.Stream.Services;

                        if (localStorage.Data.Stream.Status == true)
                        {
                            localStorage.Data.Stream.OnlineAt = data.Data.Stream.OnlineAt;
                        }
                        else
                        {
                            localStorage.Data.Stream.OfflineAt = data.Data.Stream.OfflineAt;
                        }
                    }
                }

                if (data.Data.Streamers != null)
                {
                    localStorage.Data.Streamers = data.Data.Streamers;
                }
            }
            break;

            case "ping":
            {
                webSocket.Send(JsonConvert.SerializeObject("{type:'pong'}"));
            }
            break;
            }
        }