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);
            }
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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;
            }
        }
예제 #4
0
 private void TakeAction(RegularUpdateMessage message)
 {
     _eventAggregator.GetEvent <RegularUpdateEvent>().Publish(message);
 }