public void Run() { IsRunning = true; using (var socket = new RequestSocket()) { socket.Options.Linger = TimeSpan.Zero; socket.Connect(clientAddress.ZmqAddress + ":" + GlobalConstants.TcpIpPort.Heartbeat); while (!stopRunning) { Thread.Sleep((int)GlobalConstants.HeartbeatIntverval); if (stopRunning) { break; } socket.SendNetworkMsg(new HeartbeatRequest(sessionId)); var response = socket.ReceiveNetworkMsg(TimeSpan.FromMilliseconds(GlobalConstants.ServerWaitTimeForHeartbeatResponse)); if (response != null) { if (((HeartbeatResponse)response).SessionId == sessionId) { continue; } } if (stopRunning) { break; } ClientVanished?.Invoke(sessionId); break; } } IsRunning = false; }
private void HeartbeatOnClientVanished(ConnectionSessionId connectionSessionId) { ClientVanished?.Invoke(connectionSessionId); }