public unsafe override void SendLogin() { Socket.MessageFactory = new MessageFactoryLimeQuotes(); LimeQuoteMessage message = (LimeQuoteMessage)Socket.MessageFactory.Create(); LimeQuotesInterop.login_request_msg *loginRequest = (LimeQuotesInterop.login_request_msg *)message.Ptr; ushort msgLength = (ushort)sizeof(LimeQuotesInterop.login_request_msg); loginRequest->msg_len = Swap(msgLength); loginRequest->msg_type = LimeQuotesInterop.limeq_message_type.LOGIN_REQUEST; loginRequest->auth_type = LimeQuotesInterop.auth_types.CLEAR_TEXT; message.Length = msgLength; for (int i = 0; i < UserName.Length; i++) { loginRequest->uname[i] = (byte)UserName[i]; } for (int i = 0; i < Password.Length; i++) { loginRequest->passwd[i] = (byte)Password[i]; } for (int i = 0; i < LimeQuotesInterop.HOST_ID_LEN; i++) { loginRequest->host_id[i] = 0; } loginRequest->session_type = LimeQuotesInterop.app_type.CPP_API; loginRequest->heartbeat_interval = LimeQuotesInterop.heartbeat; loginRequest->timeout_interval = LimeQuotesInterop.heartbeatTimeout; loginRequest->ver_major = LimeQuotesInterop.majorVersion; loginRequest->ver_minor = LimeQuotesInterop.minorVersion; if (trace) { log.Trace("Sending: " + UserName); } if (debug) { log.Debug("Sending: " + UserName); } while (!Socket.TrySendMessage(message)) { if (IsInterrupted) { return; } Factory.Parallel.Yield(); } }
private unsafe void QuotesLogin(LimeQuoteMessage packetQuotes) { LimeQuotesInterop.login_request_msg *message = (LimeQuotesInterop.login_request_msg *)packetQuotes.Ptr; if (Reverse(message->msg_len) != 80 || message->msg_type != LimeQuotesInterop.limeq_message_type.LOGIN_REQUEST || message->ver_major != LimeQuotesInterop.LIMEQ_MAJOR_VER || message->ver_minor != LimeQuotesInterop.LIMEQ_MINOR_VER || message->session_type != LimeQuotesInterop.app_type.CPP_API || message->auth_type != LimeQuotesInterop.auth_types.CLEAR_TEXT || message->heartbeat_interval != LimeQuotesInterop.heartbeat) { log.Error("Login message not matched"); } string userName = "";; for (int i = 0; i < LimeQuotesInterop.UNAME_LEN && message->uname[i] > 0; i++) { userName += (char)message->uname[i]; } string password = "";; for (int i = 0; i < LimeQuotesInterop.PASSWD_LEN && message->passwd[i] > 0; i++) { password += (char)message->passwd[i]; } var writePacket = (LimeQuoteMessage)QuoteSocket.MessageFactory.Create(); LimeQuotesInterop.login_response_msg *reseponse = (LimeQuotesInterop.login_response_msg *)writePacket.Ptr; reseponse->msg_type = LimeQuotesInterop.limeq_message_type.LOGIN_RESPONSE; reseponse->msg_len = Reverse(8); writePacket.Length = 8; reseponse->ver_minor = message->ver_minor; reseponse->ver_major = message->ver_major; reseponse->heartbeat_interval = message->heartbeat_interval; reseponse->timeout_interval = message->timeout_interval; reseponse->response_code = LimeQuotesInterop.reject_reason_code.LOGIN_SUCCEEDED; QuotePacketQueue.Enqueue(writePacket, packetQuotes.SendUtcTime); }