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"); }
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; } }