public void Connect(string address, int port) { //switch Sockets implementation.BEGIN //_socket = new HazelSock(_logger); _socket = new LiteNetSock(_logger); //switch sockets implementation.END _socket.OnPacketReceived += (endPoint, dataPacket, release) => { _onPackageReceived(dataPacket, release); //todo if using hazel then this part should be considered in releaseAction param // _socket.ReturnBufferToPool(dataPacket.Buffer); }; _socket.OnDisconnected += OnDisconnected; _socket.OnConnected += ep => { OnConnectedToServer?.Invoke(); }; _ep = GetIPEndPointFromHostName(address, port, false); // new IPEndPoint(IPAddress.Parse(address), port); _socket.Connect(_ep); _connected = true; _isTicking = false; //Send(new ConnectedEvent()); _socketTickTask = _taskScheduler.ScheduleOnInterval(() => { lock (_stateSync) { if (!_connected) { return; } lock (_isTickingMutex) { if (_isTicking) { return; } _isTicking = true; } try { _socket.Tick(); } catch (Exception ex) { _logger.Error($"Socket tick error: {ex}"); } finally { lock (_isTickingMutex) _isTicking = false; } } }, 0, 10); _logger?.Debug($"Receive loop started"); }
public void Listen() { //create reliable socket switch (Config.SocketType) { case SocketType.BareSocket: _reliableSocket = _socketFactory.GetReliableSockWithBareSocket(_logger); break; case SocketType.ThreadSocket: _reliableSocket = _socketFactory.GetReliableSockWithThreadSocket(_logger); break; default: throw new ArgumentOutOfRangeException(); } _reliableSocket.Listen(_port); _reliableSocket.AddEventCallbacks(OnReceivePacket, OnNewClientConnect, OnClientDisconnect); _lastTick = DateTime.UtcNow; _isTicking = false; _socketTickTask = TaskScheduler.ScheduleOnInterval(() => { if (_isStopping) { return; } lock (_isTickingMutex) { if (_isTicking) { return; } _isTicking = true; } var duration = (DateTime.UtcNow - _lastTick).Milliseconds; _lastTick = DateTime.UtcNow; if (duration > _maxSendDuration) // overlapping not matters { _maxSendDuration = duration; } try { _reliableSocket.Tick(); } catch { //empty } finally { lock (_isTickingMutex) _isTicking = false; } }, 0, Config.SocketTickTimeMs); //start protection _protectionManager.Start(); }