• 検索結果がありません。

アプリケーション部の実装

ドキュメント内 プレゼンス情報を利用した (ページ 38-43)

ᤨ㑆

4.3 アプリケーション部の実装

アプリケーション部は、アプリケーションへ提供するC言語用ライブラリを実装した。アプ リケーションは、本ライブラリを利用することで、コンディション情報の登録、リーダ設定情 報の登録、リクエストの送信、結果の取得を行うことが可能になる。

本ライブラリで提供する主な機能について述べる。

4.3.1 ミドルウェアとの接続・切断

ミドルウェアとアプリケーションは、異なるホスト上で動作する別々のソフトウェアモジュー ルである。それぞれのホストは、ネットワークへ接続されていることを前提としており、この 2つのソフトウェアモジュールはネットワークを利用して通信を行う。そのため、アプリケー ションがミドルウェアから情報を取得する場合には、まず、ミドルウェアとの接続を確立しな ければならない。そこで、ミドルウェアとの接続を開始・終了する関数を実装した。

これらの関数を以下の表4.5表と4.6に示す。

関数 int RS connect(const char *hostname, const char *port);

引数 接続するホスト名とポート番号

返り値 成功した場合はソケットディスクリプタ、失敗した場合は-1 説明 ミドルウェアとの接続を開始する

表4.5: RS connect関数

関数 void RS close(int con);

引数 接続済みのソケットディスクリプタ 返り値 なし

説明 ミドルウェアとの接続を終了する 表4.6: RS close関数

4.3.2 コンディション情報の登録

ミドルウェアの提供する機能に、アプリケーションの必要としている情報を選別する機能が 存在する。この機能は、コンディション情報と呼ばれる条件を記述することによって、アプリ ケーションに必要な情報のみを提供することが可能になる。そこで、コンディション情報を登 録するための関数を実装した。

プレゼンス情報の種類

コンディション情報の1つ目の要素は、プレゼンス情報の種類である。プレゼンス情報の種 類は、今のところ検出・消失・スイッチ押下の3種類が存在する。このプレゼンス情報の種類 を登録することによって、その種類のプレゼンス情報のみを取得することが可能になる。また、

これらの種類はそれぞれ数字に対応しており、その数字を用いることによって必要なプレゼン ス情報の種類を登録することが可能になっている。

プレゼンス情報の種類を登録する関数を、以下の表4.7に示す。

関数 int set cond type(int con, int type);

引数 接続済みのソケットディスクリプタとプレゼンス情報の種類 返り値 成功した場合は0、失敗した場合は-1

説明 コンディション情報にプレゼンス情報の種類を登録する 表4.7: set cond type関数

タグID

コンディション情報の2つ目の要素は、タグIDである。必要としているタグのIDを登録す ることによって、そのタグの情報のみを取得することが可能になる。

タグIDを登録する関数を、以下の表4.8に示す。

関数 int set cond tagid(int con, char *tagid);

引数 接続済みのソケットディスクリプタとタグID 返り値 成功した場合は0、失敗した場合は-1

説明 コンディション情報にタグIDを登録する 表4.8: set cond tagid関数

位置情報ラベル

コンディション情報の3つ目の要素は、位置情報ラベルである。必要としているリーダの位 置情報ラベルを登録することによって、そのリーダから検出された情報のみを取得することが 可能になる。

位置情報ラベルを登録する関数を、以下の表4.9に示す。

関数 int set cond location(int con, char *location);

引数 接続済みのソケットディスクリプタと位置情報ラベル 返り値 成功した場合は0、失敗した場合は-1

説明 コンディション情報に位置情報ラベルを登録する 表4.9: set cond location関数

4.3.3 リーダ設定情報の登録

ミドルウェアの提供する機能に、検出・消失を判断する際のパラメータを変更するという機 能が存在する。このパラメータをリーダ設定情報と呼び、消失と判断するまでの時間などを変 更することが可能になる。そこで、リーダ設定情報を登録するための関数を実装した。

現在設定可能な情報は、検出と判断するまでの検出回数と消失と判断するまでのタイムアウ ト時間の2種類である。これらの設定を変更するための関数を、以下の表4.10と表4.11に示す。

関数 int set config count(int con, int count);

引数 接続済みのソケットディスクリプタと回数 返り値 成功した場合は0、失敗した場合は-1

説明 リーダ設定情報の検出回数を変更する 表4.10: set config count関数

関数 int set config timeout(int con, int timeout);

引数 接続済みのソケットディスクリプタとタイムアウト時間 返り値 成功した場合は0、失敗した場合は-1

説明 リーダ設定情報のタイムアウト時間を変更する 表 4.11: set config timeout関数

4.3.4 リクエストの送信

ミドルウェアから情報を取得する際に送信するリクエストには2つのタイプが存在する。1 つは応答型リクエストで、リクエストを送信すると、すぐに結果が返ってくるタイプのリクエ ストである。もう一つは通知型リクエストで、あらかじめリクエストを送信しておくと、タグ が移動してプレゼンス情報が生成された場合に、その情報を通知してくれるタイプのリクエス トである。以下に、これら2つのタイプの詳細について述べる。

応答型リクエスト

応答型リクエストは、すぐに結果が返ってくるタイプのリクエストである。このタイプのリ クエストは、既に検出されているタグの現在の状態を知りたい場合や、特定のリーダで検出さ れているタグを知りたい場合などに利用される。

このタイプのリクエストでは、複数の結果が返ってくることが考えられる。そのため、複数 の結果を保持することができるデータ型が必要がある。しかし、プレゼンス情報(図4.11)に は、あらかじめ複数の結果をリスト化するためのnextフィールドが用意されているため、新 しいデータ型を用意する必要はない。複数の結果が返ってくる場合には、結果を連結し、先頭 のポインタを返すことで対応できる。また、プレゼンス情報にはRS RESULTという別名をつ けた。

応答型のリクエストとして、稼動しているリーダの位置情報ラベルを取得する関数、タグID から検出されている位置情報ラベルを取得する関数、位置情報ラベルから検出されているタグ IDを取得する関数を実装した。

これらの関数を、以下の表4.12、表4.13、表4.14に示す。

関数 RS RESULT *get reader(int con);

引数 接続済みのソケットディスクリプタ

返り値 成功した場合は結果リストの先頭を指すRS RESULT型のポインタ、失敗した場合はNULL 説明 稼動しているリーダの位置情報ラベルを取得する

表4.12: get reader関数

関数 RS RESULT *get location(int con, char *tagid);

引数 接続済みのソケットディスクリプタとタグID

返り値 成功した場合は結果リストの先頭を指すRS RESULT型のポインタ、失敗した場合はNULL 説明 タグIDから検出されている位置情報ラベルを取得する

表4.13: get location関数

関数 RS RESULT *get tagid(int con, char *location);

引数 接続済みのソケットディスクリプタと位置情報ラベル

返り値 成功した場合は結果リストの先頭を指すRS RESULT型のポインタ、失敗した場合はNULL 説明 位置情報ラベルから検出されているタグIDを取得する

表4.14: get tagid関数

通知型リクエスト

通知型リクエストは、プレゼンス情報が生成された場合に、その情報を通知してくれるタイ プのリクエストである。このタイプのリクエストは、タグが移動したらすぐにアクションを起 こす必要があるアプリケーションやタグの状態を常に監視しているアプリケーションなどで利 用される。

このタイプのリクエストでは、取得されるプレゼンス情報は必ず一つであるため、結果をリ スト化する必要はない。プレゼンス情報が生成された場合には、接続されたソケットにプレゼ ンス情報が通知され、その情報を読み取ることによってどのようなイベントが発生したかを知 ることができる。

通知型のリクエストとして、プレゼンス情報の通知を開始する関数、通知を停止する関数を 実装した。

これらの関数を、以下の表4.15と表4.16に示す。

関数 int start event(int con);

引数 接続済みのソケットディスクリプタ 返り値 成功した場合は0、失敗した場合は-1

説明 プレゼンス情報の通知を開始する 表4.15: start event関数

関数 int stop event(int con);

引数 接続済みのソケットディスクリプタ 返り値 成功した場合は0、失敗した場合は-1

説明 プレゼンス情報の通知を停止する 表4.16: stop event関数

ドキュメント内 プレゼンス情報を利用した (ページ 38-43)

関連したドキュメント