Exemplo n.º 1
0
        public TCPRawClient(IPAddress remote_ip, ushort remote_port, PacketCalculateEvent calc_event, int header_size, int maxPacketSize = 64 * 1024, int outputStreamMultiply = 64, LatencyMode mode = LatencyMode.Normal)
        {
            remoteIp       = remote_ip;
            remotePort     = remote_port;
            _maxPacketSize = maxPacketSize;
            this.mode      = mode;

            if (calc_event == null)
            {
                throw new ArgumentNullException(nameof(calc_event));
            }

            packetHeaderSize    = header_size;
            CalculatePacketSize = calc_event;
            workerStarted       = 0;
            _outputStream       = new ConcurrentMemoryStream(_maxPacketSize * outputStreamMultiply);
            rcvBuff             = new byte[maxPacketSize];
        }
Exemplo 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;
        }