public void InitServer(P2PClient thisServer) { Server?.Dispose(); Server = thisServer; crypter = new RSA(Server, 768); Server.OnDebugMessage += str => OnDebugMessage?.Invoke(this, str); Server.OnMessageSend += p_OnMessageSend; Server.OnConnect += p_OnConnection; Server.OnDisconnect += (_, u) => OnUserDisconnect?.Invoke(this, u); }
private async Task Listen() { List <string> removeList = new List <string>(); for (int i = clients.Count - 1; i >= 0; i--) { Client client = clients[i]; if (client.IsAlive()) { Packet p = await client.Listen(); if (p != null) { PacketType type = p.GetPacketType(); if (type == PacketType.Identify) { OnUserConnect.Invoke(this, new UserConnectEventArgs(client)); } else { OnPacketReceived.Invoke(this, new PacketReceivedEventArgs(client, p)); } } } else { await client.Stop(); Logger.Info($"Client dropped [{client.GetSessionId()}]"); clients.RemoveAt(i); string sess = client.GetSessionId(); bool onlyone = true; for (int j = clients.Count - 1; j >= 0; j--) { if (clients[j].GetSessionId() == sess) { onlyone = false; break; } } if (onlyone) { OnUserDisconnect.Invoke(this, new UserDosconnectEventArgs(client)); } } } }