gpt4 book ai didi

c++ - 如何在 QuickFIX 中制作登录部分

转载 作者:太空狗 更新时间:2023-10-29 20:15:21 24 4
gpt4 key购买 nike

如何使用 C++ 在 QuickFIX 中创建登录部分?我找到了大量关于如何在 C# 或 Java 上执行此操作的教程和文章,但在 C++ 上一无所获。

我有一个服务器(接受者)和一个客户端(发起者)。客户端的用户名和密码存储在设置文件中,并硬编码在服务器程序中。

根据我在客户端中阅读的内容,我在 fromAdmin() 中设置了用户名和密码,并在 toAdmin() 中读取并检查了服务器中的内容,但我该怎么做呢?

这是我到目前为止尝试过的:

  • 使用以下方法将消息转换为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() 中检查用户/密码。

  2. 您是否尝试 dynamic_cast 而不首先检查它是否是登录消息? toAdmin() 回调处理所有 管理消息;该消息可能是心跳、登录、注销等。这可能会解释您的转换错误。

至于代码应该是什么样子,我的 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# 版本更加流利。)

我看到了 your first web reference使用 FIELD_GET_REF 宏。它可能比 message.getHeader().getField() 更好,但我不熟悉它。

关于c++ - 如何在 QuickFIX 中制作登录部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13348939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com