コード例 #1
0
ファイル: StarServer.cs プロジェクト: SharpStar/Star
        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();
            }
        }
コード例 #2
0
 public ProxyConnectionEventArgs(StarProxy proxy)
 {
     Proxy = proxy;
 }
コード例 #3
0
ファイル: PacketEventArgs.cs プロジェクト: SharpStar/Star
 public PacketEventArgs(StarProxy proxy, Packet packet)
 {
     Proxy  = proxy;
     Packet = packet;
 }