【QuickFIX】07 セッション開始 <h> TradingSessionStatus

プログラムを起動して、ログイン認証が通るとセッション開始の連絡が届きます

セッション開始の連絡は <h> TradingSessionStatus で届くので、ちゃんと受け取れるようにしときます。
ちなみにこの <h> メッセージを受信するまでは、向こうのサーバが準備できていないってことなのでメッセージ送っちゃだめだそうです。


セッションは取引用とレート用の２セッション張るので、２つとも開始の連絡が来たら活動開始ってことにしときます。

とりあえず、活動開始時には利用可能な通貨ペア情報と口座情報を取得するメッセージを投げることにしてみます。
（中身の実装はまた今度）



## Application.h のヘッダーファイル修正
```c++:examples/tradeclient/Application.h

@@ -60,8 +60,7 @@ class Application :
      m_sql = MySQLConnect();
      m_accountID = getSetting("AccountID");
      m_partyID = getSetting("PartyID");
 -    m_tradeSessionStatus = false;
 -    m_ratefeedSessionStatus = false;
 +    m_tradingSessionStatus = 0;
    }
  
    ~Application()
 @@ -79,8 +78,7 @@ class Application :
    std::string m_pass;
    std::string m_host;
    short m_port;
 -  bool m_tradeSessionStatus;
 -  bool m_ratefeedSessionStatus;
 +  int m_tradingSessionStatus;
    std::map<std::string, std::string> m_senderID;
    std::map<std::string, std::string> m_targetID;
    std::string m_accountID;

```

見切りで追加しといたやつを修正です
単なるカウンタにしちゃいます


## メッセージ受信時処理 < h > TradingSessionStatus

```c++:resp_h__TradingSessionStatus.cpp
#include "config.h"

#include "Application.h"
#include "quickfix/Session.h"
#include <iostream>

/* h  */
void Application::onMessage(const FIX44::TradingSessionStatus& message, const FIX::SessionID& sessionID )
{
  std::cout << "<h> TradingSessionStatus: " << std::endl << message.toXML() << std::endl;

  switch( std::stoi(message.getField(FIX::FIELD::TradSesStatus)) )
  {
    case FIX::TradSesStatus_OPEN :
      std::cout << "<h> TradingSessionStatus: OPEN " << std::endl;
      if ( ++m_tradingSessionStatus == 2 )
      {
        /* <x>  */ SecurityListRequest();
        /* <AN> */ RequestForPositions();
      }
      break;

    case FIX::TradSesStatus_CLOSED :
    case FIX::TradSesStatus_PRE_CLOSE :
      std::cout << "<h> TradingSessionStatus: CLOSE " << std::endl;
      m_tradingSessionStatus--;
      break;

    default:
      std::cout << "<h> TradingSessionStatus: OTHER " << std::endl;
      break;
  }
}

```

受信したメッセージのステータスを確認して処理振り分け
OPEN なら、カウンタを増やす
　　　２セッションともOPENなら、活動開始
　　　　－ 通貨ペア情報取得のために < x > SecurityListRequest を呼び出し
　　　　－ 口座情報取得のために < AN > RequestForPositions も呼び出し

CLOSE なら、カウンタを減らします



---

＜前 [【QuickFIX】06 独自メッセージ仕様](https://qiita.com/nobu-maple/items/580815f3c304d96bde31)
次＞ [【QuickFIX】08 通貨ペア要求 <x> SecurityListRequest](https://qiita.com/nobu-maple/items/ba0fb7175c378bc4c608)

---
# 一覧
[01 サンプルのコンパイル](https://qiita.com/nobu-maple/items/051188f21efc59429808)
[02 ログイン時にPassword(554)を送信](https://qiita.com/nobu-maple/items/649f1fd2525523f12064)
[03 送受信ログをMySQLに保存](https://qiita.com/nobu-maple/items/cc943f0c1028f21161c0)
[04 情報保存用にMySQLコネクションを保持..他](https://qiita.com/nobu-maple/items/cfe505ad984e16d46af9)
[05 各種メッセージの枠を作成](https://qiita.com/nobu-maple/items/770d8da8c50c4f5a5a54)
[06 独自メッセージ仕様](https://qiita.com/nobu-maple/items/580815f3c304d96bde31)
[07 セッション開始 <h> TradingSessionStatus](https://qiita.com/nobu-maple/items/98369bad8351cb662740)
[08 通貨ペア要求 <x> SecurityListRequest](https://qiita.com/nobu-maple/items/ba0fb7175c378bc4c608)
[09 通貨ペア取得 <y> SecurityList](https://qiita.com/nobu-maple/items/66feda02d9a717bd31b9)
[10 デモ環境サーバへ接続](https://qiita.com/nobu-maple/items/52de92892a03f59c7368)
[11 ログ出力設定](https://qiita.com/nobu-maple/items/828d3859ebf2ab2237f8)
[12 マーケット情報要求 < V > MarketDataRequest](https://qiita.com/nobu-maple/items/1c4f2d27cabde8eff713)
[13 マーケット情報受信 < X > MarketDataIncrementalRefresh](https://qiita.com/nobu-maple/items/eb7855841000eb2b0f04)
[14 口座情報要求 < AN > RequestForPositions](https://qiita.com/nobu-maple/items/30c286f8dbf1e9b0e173)
[15 口座情報取得 < AZ > CollateralResponse](https://qiita.com/nobu-maple/items/a16e3c787ef5e83f3971)

---