private void ClientSocket_ReceivedData(object sender, System.EventArgs e) { if (e is MessagingEventArgs.ReceivedDataEventArgs args) { IPacket packet = packetFactory.HandlePacket(args.Buffer); if (packet.Type == PacketType.User) { serviceUsers.AddRange(((IUsersPacket)packet).Users.Where(user => user.Name != userName).ToList()); } } }
private static void AcceptMessageWorker_DoWork(TcpClient client) { // Buffer for reading data Byte[] bytes = new Byte[256]; String data = null; // Get a stream object for reading and writing NetworkStream stream = client.GetStream(); int i; // Loop to receive all the data sent by the client. while ((i = stream.Read(bytes, 0, bytes.Length)) != 0) { IPacket packet = packetFactory.HandlePacket(bytes.SubArray(0, i)); if (packet.Type == PacketType.User) { new Task(() => NotifyUserAdded(packet)).Start(); // we know that only one user will be registered per client users.Add(((IUsersPacket)packet).Users[0], client); Console.WriteLine("\nReceived: Registration for {0}", users.Last().Key.Name); Console.Write("Waiting for a connection... "); var allRegisteredUsers = packetFactory.CreateUserPacket(users.Keys.ToList()); byte[] msg = allRegisteredUsers.ToByte(); // Send back a response. stream.Write(msg, 0, msg.Length); Console.WriteLine("Sent: All registered user list."); } } // Shutdown and end connection client.Close(); }