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]; }
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; }