簡體   English   中英

如何在QuickFIX中創建登錄部分

[英]How to make the login part in QuickFIX

如何在c ++中使用QuickFIX創建登錄部分? 我在c#或java上找到了大量有關如何執行此操作的教程和文章,但c ++上沒有。

我有一個服務器(接受者)和一個客戶端(發起者)。 客戶端的用戶名和密碼存儲在設置文件中,並在服務器程序中進行硬編碼。

從我在客戶端讀過我設定的用戶名和密碼fromAdmin()和讀取,並在檢查服務器toAdmin()但我怎么做呢?

這是我到目前為止所嘗試的:

  • 使用以下方法將message FIX44::Logon&轉換為FIX44::Logon&對象:

     FIX44::Logon& logon_message = dynamic_cast<FIX44::Logon&>(message); 
  • 將用戶名和密碼設置為登錄對象,如下所示:

     if(session_settings.has("Username")) { FIX::Username username = session_settings.getString("Username"); logon_message.set(username); } 
  • 並發送這樣的消息:

     FIX::Message messageToSend = logon_message; FIX::Session::sendToTarget(messageToSend); 

但是我在演員表上得到了這個錯誤:

cannot dynamic_cast 'message' (of type 'class FIX::Message') to type 'struct FIX44::Logon&' (target is not pointer or reference to complete type)

我試過的是http://niki.code-karma.com/2011/01/quickfix-logon-support-for-username-password/comment-page-1/

我還不清楚如何制作客戶端和服務器。

誰能幫我?

可能的錯誤:

1)我認為你有fromAdmin() / toAdmin() toAdmin()被調用傳出管理消息, fromAdmin()被調用對傳入。 對於Initiator,您必須在toAdmin()回調中設置字段。 你的fromAdmin()將檢查用戶/傳入fromAdmin()

2)您是否嘗試使用dynamic_cast而不先檢查它是否是登錄消息? toAdmin()回調處理所有管理消息; 消息可以是Heartbeat,Logon,Logout等。這可能解釋您的強制轉換錯誤。

至於代碼應該是什么樣子,我的C ++很生疏,但基本模式是這樣的:

void YourMessageCracker::toAdmin( FIX::Message& message, const FIX::SessionID& sessionID)
{
    if (FIX::MsgType_Logon == message.getHeader().getField(FIX::FIELD::MsgType))
    {
        FIX44::Logon& logon_message = dynamic_cast<FIX44::Logon&>(message);
        logon_message.setField(FIX::Username("my_username"));
        logon_message.setField(FIX::Password("my_password"));
    }
}

從那里,我認為你可以看到你如何寫一個類似的fromAdmin() ,你得到的字段而不是設置它們。

以上使用硬編碼的用戶/傳遞,但您可能希望從配置文件中提取它。 我認為你對session_settings.getString(str)調用是正確的。

(請原諒任何編碼錯誤。雖然基本原理相同,但我對QF引擎的Java / C#版本更加流利。)

我看到您的第一個Web引用使用FIELD_GET_REF宏。 它可能比message.getHeader().getField()更好,但我不熟悉它。

編輯:我希望你在我完成45次編輯之前沒有開始閱讀。 我覺得現在好了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM