private void p_OnConnection(P2PClient server, ulong userId) { try { crypter.AddUser(userId); OnUserConnect?.Invoke(this, userId); } catch (System.OperationCanceledException) { server.Disconnect(userId); } }
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)); } } } }