private void ActiveFactory_ConnectionAccept(object sender, ConnectionEventArgs client) { Connection server; try { server = PassiveFactory.Take(); } catch { ActiveFactory.Free(client.Connection); return; } ProcessConnections(client.Connection, server); }
protected virtual void ProcessConnections(Connection client, Connection server) { try { var pair = MakePair(); ConfigurePair(pair); pair.Client.SetupConnection(client, false); pair.Server.SetupConnection(server, false); Accepting?.Invoke(this, pair); pair.Initialize(); pair.Client.Start(); pair.Server.Start(); Accepted?.Invoke(this, pair); } catch { ActiveFactory.Free(client); PassiveFactory.Free(server); } }