Esempio n. 1
0
        public override void OnServerConnect(NetworkConnection conn)
        {
            CallbackLog($"OnServerConnect({conn})");

            base.OnServerConnect(conn);

            ServerConnectEvent?.Invoke(this, EventArgs.Empty);
        }
Esempio n. 2
0
        public TCPRawServer(
            IPAddress _listenIp, ushort _listenPort,
            int _backLg,
            int headerSize,
            PacketCalculateEvent _calculatePacketSize,
            ServerConnectEvent _connectHandler            = null,
            ServerDisconnectEvent _disconnectHandler      = null,
            ServerOnReceivePacketEvent _recvPacketHandler = null,
            int _maxConnections    = 4096,
            int _maxPacketSize     = 64 * 1024,
            int _maxPacketsPerStep = 32,
            double _sendRecvRatio  = 3 / 1,
            bool _noCheckDDos      = false,
            int _serverTickMicro   = 5000,
            int _connRetry         = 5000)
        {
            this.listenIp   = _listenIp;
            this.listenPort = _listenPort;
            this.backLog    = _backLg;

            this.packetHeaderSize  = headerSize;
            this.maxClients        = _maxConnections;
            this.maxPacketSize     = _maxPacketSize;
            this.maxPacketsPerStep = _maxPacketsPerStep;
            this.noCheckDDos       = _noCheckDDos;
            this.serverTickMicro   = _serverTickMicro;
            this.sendRecvRatio     = _sendRecvRatio;
            this.connRetryTimeout  = _connRetry;

            this.calculatePacketSize  = _calculatePacketSize;
            this.onNewClientEv        = _connectHandler;
            this.onNewPacketEv        = _recvPacketHandler;
            this.onDisconnectClientEv = _disconnectHandler;

            if (this.calculatePacketSize == null)
            {
                throw new ArgumentNullException("PacketCalculateEvent is null");
            }

            toReadSockets       = new List <Socket>(maxClients);
            toWriteSockets      = new List <Socket>(maxClients);
            clientAssocList     = new Dictionary <Socket, int>(maxClients);
            commandsQueue       = new ConcurrentQueue <serverCommand>();
            secondCommandsQueue = new Queue <serverCommand>();

            sendStreamSize = (int)Math.Ceiling((maxPacketSize * maxPacketsPerStep) * sendRecvRatio);

            if (sendStreamSize <= maxPacketSize)
            {
                sendStreamSize = maxPacketSize + 1;
            }

            clients         = new client[maxClients];
            freeClientSlots = new Stack <int>();
            Online          = 0;

            for (int i = 0; i < maxClients; ++i)
            {
                clients[i] = null;
                freeClientSlots.Push(i);
            }

            serverStarted = false;
            workerThread  = null;
        }