Exemplo n.º 1
0
        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}");
        }
Exemplo n.º 2
0
        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;
        }