protected void HandleRequestHelper <TRequest, TResponse> (TRequest request, RequestSocket socket, Action <TResponse> responseReceived) where TRequest : NetworkMessageBase where TResponse : NetworkMessageBase { var sendingSuccessful = socket.SendNetworkMsg(request); if (!sendingSuccessful) { ErrorCallback("failed sending"); return; } #if DEBUG var response = socket.ReceiveNetworkMsg(TimeSpan.FromSeconds(50)); #else var response = socket.ReceiveNetworkMsg(TimeSpan.FromSeconds(5)); #endif if (response == null) { ErrorCallback("no response received"); return; } var responseMsg = response as TResponse; if (responseMsg != null) { responseReceived(responseMsg); return; } if (response.Type == NetworkMessageType.ErrorResponse) { var errorResponse = (ErrorResponse)response; ErrorCallback(errorResponse.ErrorMessage); return; } throw new ArgumentException($"unexpected Message-Type: {response.Type}"); }
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; }