예제 #1
0
        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);
        }
        public unsafe override bool VerifyLogin()
        {
            bool    verified = false;
            Message message;

            if (!Socket.TryGetMessage(out message))
            {
                return(verified);
            }
            LimeQuoteMessage limeMessage = (LimeQuoteMessage)message;

            if (limeMessage.MessageType == LimeQuotesInterop.limeq_message_type.LOGIN_RESPONSE)
            {
                LimeQuotesInterop.login_response_msg *response = (LimeQuotesInterop.login_response_msg *)limeMessage.Ptr;
                if (response->response_code == LimeQuotesInterop.reject_reason_code.LOGIN_SUCCEEDED)
                {
                    log.Info("Lime Login verified");
                    verified = true;
                }
                else
                {
                    log.ErrorFormat("Lime Quotes Login Failed: {0}", response->response_code.ToString());
                }
            }
            else if (limeMessage.MessageType == LimeQuotesInterop.limeq_message_type.LIMEQ_CONTROL)
            {
                var response = (LimeQuotesInterop.limeq_control_msg *)limeMessage.Ptr;
                log.InfoFormat("Lime Control {0}", response->code);
            }
            else
            {
                log.ErrorFormat("Lime unexpected message {0}", limeMessage.MessageType);
            }

            return(verified);
        }