private void Server_OnPersonalPacketReceived(object sender, PersonalPacketEvent e) { if (e.Packet.Package is UserConnectionPacket ucp) { var notification = new ChatPacket { Username = "******", Message = "A new user has joined the chat", UserColor = Colors.Purple.ToString() }; if (_usernames.Keys.Contains(ucp.UserGuid)) { _usernames.Remove(ucp.UserGuid); } else { _usernames.Add(ucp.UserGuid, ucp.Username); } ucp.Users = _usernames.Values.ToArray(); Task.Run(() => _server.SendObjectToClients(ucp)).Wait(); Thread.Sleep(500); Task.Run(() => _server.SendObjectToClients(notification)).Wait(); } WriteOutput("Personal Packet Received"); }
private void MonitorStreams() { while (IsRunning) { foreach (var client in Connections.ToList()) { if (!client.IsSocketConnected()) { var removeClientEvent = new PingPacketEvent(client, null, string.Empty); Connections.Remove(client); OnConnectionRemoved?.Invoke(this, removeClientEvent); continue; } if (client.Socket.Available != 0) { var readObject = ReadObject(client.Socket); var testConnection = new PingPacketEvent(client, null, readObject); OnPacketReceived?.Invoke(this, testConnection); if (readObject is PingPacket ping) { client.SendObject(ping).Wait(); continue; } if (readObject is PersonalPacket pp) { var destination = Connections.FirstOrDefault(c => c.ClientId.ToString() == pp.GuidId); var e4 = new PersonalPacketEvent(client, destination, pp); OnPersonalPacketReceived?.Invoke(this, e4); if (destination != null) { destination.SendObject(pp).Wait(); var personPaketEventSuccess = new PersonalPacketEvent(client, destination, pp); OnPersonalPacketSent?.Invoke(this, personPaketEventSuccess); } } else { foreach (var c in Connections.ToList()) { c.SendObject(readObject).Wait(); var waitPacketEvent = new PingPacketEvent(client, c, readObject); OnPacketSent?.Invoke(this, waitPacketEvent); } } } } } }
private void Server_OnPersonalPacketSent(object sender, PersonalPacketEvent e) { WriteOutput("Personal Packet Sent"); }