protected void ProcessAccept(TcpClient client) { if (ListenSocket == null || !ServerRunning) { return; } if (!client.Connected) { return; } if (!AcceptingConnections) { client.Client.Shutdown(SocketShutdown.Send); client.Close(); return; } StarLog.DefaultLogger.Info("Connection from {0}", client.Client.RemoteEndPoint); if (_numConnected >= ServerConfig.MaxConnections) { StarLog.DefaultLogger.Warn("Exceeded maximum amount of users! Disconnecting {0}", client.Client.RemoteEndPoint); //TODO: Simulate connnection, return error message to player client.Client.Shutdown(SocketShutdown.Send); client.Close(); return; } Interlocked.Increment(ref _numConnected); Interlocked.Increment(ref _totalJoined); try { Thread proxyThread = new Thread(() => { StarClientConnection cl = new StarClientConnection(client.Client, _packetTypes); cl.RegisterPacketHandlers(_packetHandlers.Select(p => p.Value())); StarServerConnection server = new StarServerConnection(_packetTypes); server.RegisterPacketHandlers(_packetHandlers.Select(p => p.Value())); var starProxy = new StarProxy(this, cl, server); starProxy.ConnectionClosed += (s, args) => Interlocked.Decrement(ref _numConnected); Proxies.AddProxy(starProxy.ConnectionId, starProxy); starProxy.Start(); }); proxyThread.IsBackground = true; proxyThread.Start(); } catch (Exception ex) { ex.LogError(); } }
public ProxyConnectionEventArgs(StarProxy proxy) { Proxy = proxy; }
public PacketEventArgs(StarProxy proxy, Packet packet) { Proxy = proxy; Packet = packet; }