public void OnRegularUpdate(RegularUpdateMessage payload) { if (payload.NewChats.Count > 0) { foreach (var chat in payload.NewChats) { _dispatcher.Invoke(() => { Messages.Add($"{chat.Username} : {chat.Message}"); }); SelectedIndex = Messages.Count - 1; } } if (payload.ActiveUsers.Count != ActiveUsers.Count) { ActiveUsers = new ObservableCollection <string>(payload.ActiveUsers); } }
private async Task SendUpdates() { bool running = !_exitListening; while (running) { lock (_lock) { if (_exitListening) { running = false; } } var message = new RegularUpdateMessage(); lock (_chatQueue.QueueLock) { while (_chatQueue.ItemAvailable) { message.NewChats.Add(_chatQueue.Dequeue()); } } List <Stream> streams; lock (_userTracker.TrackerLock) { message.ActiveUsers = _userTracker.Users.Select(r => r.Value.Username).ToList(); streams = _userTracker.Users.Select(r => r.Value.Stream).ToList(); } var buffer = message.Pack(); foreach (var stream in streams) { stream.Write(buffer, 0, buffer.Length); } Thread.Sleep(100); } }
public void HandleMessage(byte[] message, Socket socket) { IMessage decodedMessage; switch ((MessageIds)message[0]) { case MessageIds.ChatroomAcceptance: decodedMessage = new ChatroomAcceptanceMessage(); decodedMessage.Unpack(message); TakeAction((ChatroomAcceptanceMessage)decodedMessage); break; case MessageIds.RegularUpdate: decodedMessage = new RegularUpdateMessage(); decodedMessage.Unpack(message); TakeAction((RegularUpdateMessage)decodedMessage); break; default: break; } }
private void TakeAction(RegularUpdateMessage message) { _eventAggregator.GetEvent <RegularUpdateEvent>().Publish(message); }