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));
                    }
                }
            }
        }