如何 start/stop 特定会话连接

How to start/stop a particular session connection

我的 QuickFIX 启动器可以管理 5 个会话(目标)。我可以使用 ReconnectInterval 来控制重连尝试频率。

假设一个会话连接给我一个问题,但我不想停止其他 4 个连接。我也不希望有问题的会话继续尝试连接。

是否有任何方法可以停止并稍后重新启动此特定会话连接?

Quickfix 不提供禁用会话的直观方法。

void Initiator::connect()
{
  Locker l(m_mutex);

  SessionIDs disconnected = m_disconnected;
  SessionIDs::iterator i = disconnected.begin();
  for ( ; i != disconnected.end(); ++i )
  {
    Session* pSession = Session::lookupSession( *i );
    if ( pSession->isEnabled() && pSession->isSessionTime(UtcTimeStamp()) )
      doConnect( *i, m_settings.get( *i ));
  }
}

上面的代码是不断尝试保持所有会话连接的循环。查了下代码,有两种方法可以避免session的连接: 1.禁用session; 2. 限制session时间范围(session初始化后没法做,所以不是有效选项)

方法pSession->isEnabled基本上returnsSession.m_state.m_enabled,但是没有办法访问SessionState对象的属性,一旦m_state是私有的。将 m_enabled 设置为 false 并避免连接尝试的唯一方法是调用 Session.logout():

    FIX::SessionID session_id("FIX.4.2", "CLIENT1", "EXECUTOR");
    FIX::Session* mysession = initiator->getSession(session_id);
    mysession->logout();