コード例 #1
0
        protected void ClientHeartbeatThread(object param)
        {
            IWebSocketConnection socket = (IWebSocketConnection)param;

            while (socket.IsAvailable)
            {
                try
                {
                    if (UserLogged)
                    {
                        ClientHeartbeat heartbeatReq = new ClientHeartbeat()
                        {
                            Msg    = "ClientHeartbeatRequest",
                            UserId = "user1",
                            Sender = 0,
                            SeqNum = HeartbeatSeqNum,
                            Time   = 0,
                            UUID   = "user1"
                        };

                        DoSend <ClientHeartbeat>(socket, heartbeatReq);
                        HeartbeatSeqNum++;
                    }

                    Thread.Sleep(2000);
                }
                catch (Exception ex)
                {
                    socket.Close();
                }
            }
        }
コード例 #2
0
 private void CheckAndAddIfNewClient(ClientHeartbeat clientHeartbeat)
 {
     if (clients.ContainsKey(clientHeartbeat.Callsign))
     {
         clients[clientHeartbeat.Callsign].MobileClientOnline();
     }
     else
     {
         clients[clientHeartbeat.Callsign] = Client.NewMobileClientOnline(ClientConfigurationManager.Instance.DefaultRadioMobileConfig, clientHeartbeat.Callsign);
     }
 }
コード例 #3
0
ファイル: Program.cs プロジェクト: TradeHelmInc/TrueX
        private static void ProcessHeartbeat(ClientHeartbeat heartBeat)
        {
            if (Token == null)
            {
                DoLog("Missing authentication token in memory!. User not logged");
                return;
            }

            TimeSpan        elapsed       = DateTime.Now - new DateTime(1970, 1, 1);
            ClientHeartbeat heartbeatResp = new ClientHeartbeat()
            {
                Msg          = "ClientHeartbeat",
                JsonWebToken = heartBeat.JsonWebToken,
                Uuid         = heartBeat.Uuid,
                Time         = Convert.ToInt64(elapsed.TotalMilliseconds)
            };

            DoSend <ClientHeartbeat>(heartBeat);
        }
コード例 #4
0
        private void TaskClientDataSub(CancellationToken cancelToken, BlockingCollection <object> queue, string bind)
        {
            using (var subSocket = new SubscriberSocket())
            {
                subSocket.Options.ReceiveHighWatermark = 50;
                subSocket.Bind(bind);
                subSocket.Subscribe("");

                while (!cancelToken.IsCancellationRequested)
                {
                    var messageTopicReceived = subSocket.ReceiveFrameString();
                    int bytesReceived        = 0;
                    switch (messageTopicReceived)
                    {
                    case "ClientHeartbeat":
                        ClientHeartbeat clientHeartbeat = subSocket.Deserialise <ClientHeartbeat>(out bytesReceived);
                        serverStatistics.DataBytesReceived += bytesReceived;
                        CheckAndAddIfNewClient(clientHeartbeat);
                        break;

                    case "ClientPositionUpdate":
                        ClientPositionUpdate clientPositionUpdate = subSocket.Deserialise <ClientPositionUpdate>(out bytesReceived);
                        serverStatistics.DataBytesReceived += bytesReceived;
                        CheckAndAddIfNewClient(clientPositionUpdate);
                        UpdateMobileClientPosition(clientPositionUpdate);
                        break;

                    case "ClientFrequencyUpdate":
                        ClientFrequencyUpdate clientFrequencyUpdate = subSocket.Deserialise <ClientFrequencyUpdate>(out bytesReceived);
                        serverStatistics.DataBytesReceived += bytesReceived;
                        CheckAndAddIfNewClient(clientFrequencyUpdate);
                        UpdateMobileClientFrequency(clientFrequencyUpdate);
                        break;
                    }
                }
                taskClientDataSub = null;
            }
        }
コード例 #5
0
ファイル: Program.cs プロジェクト: TradeHelmInc/TrueX
        private static void ProcessEvent(WebSocketMessageV2 msg)
        {
            if (msg is ClientLoginResponse)
            {
                ClientLoginResponse loginResp = (ClientLoginResponse)msg;

                if (loginResp.JsonWebToken != null)
                {
                    UUID   = loginResp.Uuid;
                    UserId = loginResp.UserId;
                    Token  = loginResp.JsonWebToken;
                    FirmId = null;
                }

                ProcessJsonMessage <ClientLoginResponse>(loginResp);
            }
            else if (msg is TokenResponse)
            {
                ProcessTokenResponse(msg);
            }
            else if (msg is ClientLogout)
            {
                ClientLogout logoutResp = (ClientLogout)msg;

                Token  = null;
                UserId = UserId;
                FirmId = null;
                UUID   = null;

                ProcessJsonMessage <ClientLogout>((ClientLogout)msg);
            }
            else if (msg is ClientHeartbeat)
            {
                ClientHeartbeat heartBeat = (ClientHeartbeat)msg;
                ProcessJsonMessage <ClientHeartbeat>((ClientHeartbeat)msg);
                ProcessHeartbeat(heartBeat);
            }
            else if (msg is SubscriptionResponse)
            {
                ProcessJsonMessage <SubscriptionResponse>((SubscriptionResponse)msg);
            }
            else if (msg is ClientAccountRecord)
            {
                ProcessJsonMessage <ClientAccountRecord>((ClientAccountRecord)msg);
            }
            else if (msg is ClientLastSale)
            {
                ProcessJsonMessage <ClientLastSale>((ClientLastSale)msg);
            }
            else if (msg is FirmsTradingStatusUpdateResponse)
            {
                ProcessJsonMessage <FirmsTradingStatusUpdateResponse>((FirmsTradingStatusUpdateResponse)msg);
            }
            else if (msg is ClientBestBidOffer)
            {
                ProcessJsonMessage <ClientBestBidOffer>((ClientBestBidOffer)msg);
            }
            else if (msg is ClientMarketState)
            {
                ProcessJsonMessage <ClientMarketState>((ClientMarketState)msg);
            }
            else if (msg is ClientInstrument)
            {
                ProcessJsonMessage <ClientInstrument>((ClientInstrument)msg);
            }
            else if (msg is ClientOrderAck)
            {
                ProcessJsonMessage <ClientOrderAck>((ClientOrderAck)msg);
            }
            else if (msg is ClientOrderRej)
            {
                ProcessJsonMessage <ClientOrderRej>((ClientOrderRej)msg);
            }
            else if (msg is ClientMassCancelResponse)
            {
                ProcessJsonMessage <ClientMassCancelResponse>((ClientMassCancelResponse)msg);
            }
            else if (msg is ClientOrderReq)
            {
                ProcessJsonMessage <ClientOrderReq>((ClientOrderReq)msg);
            }
            else if (msg is ClientDSP)
            {
                ProcessJsonMessage <ClientDSP>((ClientDSP)msg);
            }
            else if (msg is FirmsListResponse)
            {
                FirmsListResponse resp = (FirmsListResponse)msg;
                resp.Firms.ToList().ForEach(x => SettlementAgentDict.Add(x.FirmId.ToString(), resp.SettlementAgentId));
                ProcessJsonMessage <FirmsListResponse>(resp);
            }
            else if (msg is FirmsCreditLimitUpdateResponse)
            {
                ProcessJsonMessage <FirmsCreditLimitUpdateResponse>((FirmsCreditLimitUpdateResponse)msg);
            }
            else if (msg is FirmsTradingStatusUpdateResponse)
            {
                ProcessJsonMessage <FirmsTradingStatusUpdateResponse>((FirmsTradingStatusUpdateResponse)msg);
            }
            else if (msg is EmailNotificationsListResponse)
            {
                ProcessJsonMessage <EmailNotificationsListResponse>((EmailNotificationsListResponse)msg);
            }
            else if (msg is EmailNotificationsCreateResponse)
            {
                ProcessJsonMessage <EmailNotificationsCreateResponse>((EmailNotificationsCreateResponse)msg);
            }
            else if (msg is EmailNotificationsUpdateResponse)
            {
                ProcessJsonMessage <EmailNotificationsUpdateResponse>((EmailNotificationsUpdateResponse)msg);
            }
            else if (msg is EmailNotificationsDeleteResponse)
            {
                ProcessJsonMessage <EmailNotificationsDeleteResponse>((EmailNotificationsDeleteResponse)msg);
            }
            else if (msg is UnknownMessageV2)
            {
                UnknownMessageV2 unknownMsg = (UnknownMessageV2)msg;

                DoLog(string.Format("<<unknown {0}", unknownMsg.Resp));
            }
            else if (msg is ErrorMessageV2)
            {
                ErrorMessageV2 errorMsg = (ErrorMessageV2)msg;

                DoLog(string.Format("<<unknown {0}", errorMsg.Error));
            }
            else
            {
                DoLog(string.Format("<<Unknown message type {0}", msg.ToString()));
            }

            Console.WriteLine();
        }
コード例 #6
0
 public ClientHeartbeatReception(ClientHeartbeat clientHeartbeat)
 {
     Callsign    = clientHeartbeat.Callsign;
     ReceivedUTC = DateTime.UtcNow;
 }
コード例 #7
0
        private void HandleClientStatusUpdate(ClientHeartbeat message)
        {
            if (_connectedClients.ContainsKey(message.ClientGuid))
            {
                _connectedClients[message.ClientGuid].LastActivity = DateTime.UtcNow;
                _connectedClients[message.ClientGuid].Status = message.Status;

                Sender.Tell(new ClientHeartbeatResponse(_connectedClients.Values.ToList()));
            }
            else
            {
                Unhandled(message);
            }
        }
コード例 #8
0
ファイル: Program.cs プロジェクト: TradeHelmInc/TrueX
        private static void ProcessEvent(WebSocketMessage msg)
        {
            if (msg is ClientLoginResponse)
            {
                ClientLoginResponse loginResp = (ClientLoginResponse)msg;

                if (loginResp.JsonWebToken != null)
                {
                    JWTToken = loginResp.JsonWebToken;
                    UUID     = loginResp.UUID;
                    UserId   = loginResp.UserId;
                }

                ProcessJsonMessage <ClientLoginResponse>(loginResp);
            }
            else if (msg is ClientReject)
            {
                ProcessJsonMessage <ClientReject>((ClientReject)msg);
            }
            else if (msg is SubscriptionResponse)
            {
                ProcessJsonMessage <SubscriptionResponse>((SubscriptionResponse)msg);
            }
            else if (msg is AccountRecord)
            {
                ProcessJsonMessage <AccountRecord>((AccountRecord)msg);
            }
            else if (msg is DailySettlementPrice)
            {
                ProcessJsonMessage <DailySettlementPrice>((DailySettlementPrice)msg);
            }
            else if (msg is FirmRecord)
            {
                ProcessJsonMessage <FirmRecord>((FirmRecord)msg);
            }
            else if (msg is OfficialFixingPrice)
            {
                ProcessJsonMessage <OfficialFixingPrice>((OfficialFixingPrice)msg);
            }
            else if (msg is RefereceRateMsg)
            {
                ProcessJsonMessage <RefereceRateMsg>((RefereceRateMsg)msg);
            }
            else if (msg is SecurityMasterRecord)
            {
                ProcessJsonMessage <SecurityMasterRecord>((SecurityMasterRecord)msg);
            }
            else if (msg is UserRecord)
            {
                ProcessJsonMessage <UserRecord>((UserRecord)msg);
            }
            else if (msg is LastSale)
            {
                ProcessJsonMessage <LastSale>((LastSale)msg);
            }
            else if (msg is Quote)
            {
                ProcessJsonMessage <Quote>((Quote)msg);
            }
            else if (msg is CreditRecordUpdate)
            {
                ProcessJsonMessage <CreditRecordUpdate>((CreditRecordUpdate)msg);
            }
            else if (msg is DepthOfBook)
            {
                ProcessJsonMessage <DepthOfBook>((DepthOfBook)msg);
            }
            else if (msg is LegacyOrderAck)
            {
                ProcessJsonMessage <LegacyOrderAck>((LegacyOrderAck)msg);
            }
            else if (msg is LegacyOrderCancelRejAck)
            {
                ProcessJsonMessage <LegacyOrderCancelRejAck>((LegacyOrderCancelRejAck)msg);
            }
            else if (msg is ClientLogoutResponse)
            {
                ClientLogoutResponse logoutResp = (ClientLogoutResponse)msg;

                JWTToken = null;
                UserId   = null;
                UUID     = null;

                ProcessJsonMessage <ClientLogoutResponse>((ClientLogoutResponse)msg);
            }
            else if (msg is ClientHeartbeat)
            {
                ClientHeartbeat heartBeatReq = (ClientHeartbeat)msg;
                ProcessJsonMessage <ClientHeartbeat>((ClientHeartbeat)msg);
                ProcessHeartbeat(heartBeatReq.SeqNum);
            }
            else if (msg is UnknownMessage)
            {
                UnknownMessage unknownMsg = (UnknownMessage)msg;

                DoLog(string.Format("<<unknown {0}", unknownMsg.Resp));
            }
            else if (msg is ErrorMessage)
            {
                ErrorMessage errorMsg = (ErrorMessage)msg;

                DoLog(string.Format("<<unknown {0}", errorMsg.Error));
            }
            else
            {
                DoLog(string.Format("<<Unknown message type {0}", msg.ToString()));
            }

            Console.WriteLine();
        }