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();
            }
        }
Esempio n. 2
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);
        }