構造体 baseRTC::Header

Serialization 共通情報。boostによるシリアライズ情報を隠蔽。 [詳細]

#include <baseRTC.h>

すべてのメンバ一覧

Public メソッド

 Header ()
 コンストラクタ。timeのみ自動初期化
 Header (const std::string &category, const std::string &type, const std::string &sender_name, const std::string &id=std::string(), const std::string &tag=std::string())
 コンストラクタ。
int readFromXml (std::istream &is)
 入力streamからXml Serialization に関するHeader情報を読み, 自身を更新する。
int readFromXml (const std::string &xml)
 入力文字列からXml Serialization に関するHeader情報を読み, 自身を更新する。
int writeToXml (std::ostream &os) const
 出力streamへXml Serialization に関するHeader情報を書く

Public 変数

std::string category
 データ or モジュールのカテゴリ
std::string type
 データタイプ
std::string sender_name
 送信コンポーネント名
std::string id
 モジュールID(同一モジュールが複数の時)
std::string tag
 タグ文字列(データに関するその他任意の情報)
double time
 送信時刻 [s] from unix epoch
unsigned int hdr_version
 ヘッダのバージョン

Static Public 変数

static const int HEADER_MAJOR_VERSION = 0
 ヘッダのメイジャーバージョン
static const int HEADER_MINOR_VERSION = 0
 ヘッダのマイナーバージョン
static const int HEADER_VERSION = HEADER_MAJOR_VERSION*1000 + HEADER_MINOR_VERSION
 ヘッダのバージョン。
static const char HEADER_TAG []
 ヘッダを格納する際のタグ文字列


説明

Serialization 共通情報。boostによるシリアライズ情報を隠蔽。

XMLへオブジェクトをシリアライズする場合,必ず下記のヘッダー構造体を 最初にシリアライズしなければならない。

林原先生の最初のXML仕様案を参考に,category, sender_name, 時刻,及びヘッダ 自身のバージョンを格納している。これらの情報の詳細な意味付け,モジュー ル毎の使用規則は議論の必要あり。

データの規則

シリアライズされたデータの先頭には,必ず下記のヘッダ情報が含まれる。 書込み側でこれを保証すること。(writeHeaderを使用)。

ヘッダ情報の後には任意のオブジェクトが含まれて良いが,ヘッダ情報と格 納されるオブジェクト情報については,読み書き側で厳密に合意がとれてい る必要がある。すなわち,読み側と書き側で共通のデータ構造を定義し,ヘッ ダ情報を元にしてデータ型の判断,処理の分岐方法について取り決める必要 がある。

(2009/12/04追記) 現在考えられている使用方法は以下の通り

category: 大分類
まだ曖昧だがモジュールベンダネーム?C++ namespace?
type
ヘッダの後に続く型に対応する文字列を格納
sender_name
送信元コンポーネントの名称
id
送信元コンポーネントのID (同一のセンサが複数の場合などを想定)
tag
その他データの情報についての文字列

モジュール同士の通信方法

データの表現

通信データを表現するクラスを作成し,シリアライズ/デシリアライズ を行うメソッドを用意する。この場合,

  1. このヘッダに定義するreadXXXFromXml/writeXXXXmlを利用して データメンバー毎に処理を行う
  2. このクラスが背後で利用するboostのserializationの枠組みを利用
の二つの方法がある。

送受信の例

送信の例

      ostringstream ost; //何らかのストリームを用意

      Header hdr("???", "??", "?????"); //定められた書式
      hdr.writeToXml(ost);

      実際のデータをここで送信
  

受信の例

      istringstream ist; 読み出しストリームを用意。適宜初期化

      Header hdr;

      if (hdr.readFromXml(ist) < 0) {
              エラー処理
      }

      if (hdr.category=="X" && hdr.sender_name=="YYY" && hdr.type=="Hoge") {
              HogeData hd; 
              if (hd.readFromXml(ist) < 0) {
                      エラー: 送受信規約に違反
              }
              hdを使った処理を行う
      } else if (hdr.category=="X" && hdr.sender_name=="Y2" && hdr.type=="Fuga") {
              FugaData fd; 
              if (fd.readFromXml(ist) < 0) {
                      エラー: 送受信規約に違反
              }
              fdを使った処理を行う
      }
 

コンストラクタとデストラクタ

baseRTC::Header::Header (  ) 

コンストラクタ。timeのみ自動初期化

baseRTC::Header::Header ( const std::string &  category,
const std::string &  type,
const std::string &  sender_name,
const std::string &  id = std::string(),
const std::string &  tag = std::string() 
)

コンストラクタ。

category, type, sender_name, id, tagを初期化。timeは生成時刻となる


関数

int baseRTC::Header::readFromXml ( std::istream &  is  ) 

入力streamからXml Serialization に関するHeader情報を読み, 自身を更新する。

引数:
[in,out] is シリアライズされた結果のXMLを含むストリーム
戻り値:
0 以上であれば成功。失敗すると負の値を返す

int baseRTC::Header::readFromXml ( const std::string &  xml  ) 

入力文字列からXml Serialization に関するHeader情報を読み, 自身を更新する。

引数:
[in] xml シリアライズされた結果のXML文字列
戻り値:
0以上 成功。
negative 失敗。失敗の場合中身は空になる

int baseRTC::Header::writeToXml ( std::ostream &  os  )  const

出力streamへXml Serialization に関するHeader情報を書く

引数:
[in,out] os 書き込み先stream
戻り値:
0以上 成功。
negative 失敗


変数

データ or モジュールのカテゴリ

std::string baseRTC::Header::type

データタイプ

送信コンポーネント名

std::string baseRTC::Header::id

モジュールID(同一モジュールが複数の時)

std::string baseRTC::Header::tag

タグ文字列(データに関するその他任意の情報)

送信時刻 [s] from unix epoch

ヘッダのバージョン

const int baseRTC::Header::HEADER_MAJOR_VERSION = 0 [static]

ヘッダのメイジャーバージョン

const int baseRTC::Header::HEADER_MINOR_VERSION = 0 [static]

ヘッダのマイナーバージョン

ヘッダのバージョン。

const char baseRTC::Header::HEADER_TAG[] [static]

ヘッダを格納する際のタグ文字列


この構造体の説明は次のファイルから生成されました:

マップビューワコンポーネントに対してThu Jun 17 20:24:08 2010に生成されました。  doxygen 1.5.5