Palm Programmer's Laboratory
Palm OS Programmer's Companion Volume II/1-7
1-7 データのリクエスト
Palm OS 4.0以降では、ExgGet のコールを通してリモートデバイスにデータをリクエストすることが、いくつかの Exchange ライブラリで許可されます。2つのPalmデバイス間での two-way 通信を実装するために、ExgGet を使用することができます。
このセクションでは、データをリクエストするためにどのように Exchange マネージャを使用するかを説明します。以下の内容がカバーされます。
単一オブジェクトの取得リクエストの送信
リモートデバイスからデータをリクエストするためには、以下のようにします。
- 「Exchange Socket 構造体の初期化」セクションで説明するように、Exchange Socket 構造体(ExgSocketType)を生成し、初期化します。データ構造体は、Exchange ライブラリおよび受信したいデータの形式を特定します。
- 接続を確立してデータをリクエストするために、ExgGet をコールします。応答として、Exchange ライブラリはリモートデバイスとの接続を確立し、戻りは受信すべきデータを含みます。もしリモートデバイスがPalmハンドヘルドであれば、Exchange ライブラリは「取得リクエスト受信時の応答」セクションで説明する手順に従って、リモート側アプリケーションからこのデータを入手します。
- データを受信するために、1回以上 ExgReceive をコールします。
- 接続を終了するために、ExgDisconnect をコールします。
取得リクエスト受信時の応答
リモートデバイスの Exchange マネージャが取得リクエスト受信すると、適切なアプリケーションを sysAppLaunchCmdExgGetData 起動コードで起動します。
sysAppLaunchCmdExgGetData 起動コードへの応答は、リクエストされたデータを送信することです。
- 1回以上 ExgSend をコールします。
- 完了時に ExgDisconnect をコールします。
詳細は、単独オブジェクトの送信セクションを参照して下さい。
双方向通信
アプリケーションで双方向通信を行なうために、ExgGet と ExgPutを組み合わせて ExgConnect コールとともに使うことができます。例えば、マルチユーザゲームで双方向通信を実装したいかもしれません。そのような場合は、一つのデバイスはクライアントとして、他のデバイスはサーバとして振舞います。クライアントは ExgConnect をコールします。ExgConnect は、複数の操作(複数オブジェクトの送信など)を行なうために接続が確立されたことを Exchange ライブラリに通知します。そして、クライアントは ExgGet または ExgPut を繰り返しコールし、完了時に ExgDisconnect をコールします。サーバ側デバイスでは、各リクエストに対して適切なアプリケーションが起動されます。各オブジェクトの送受信完了時にサーバも ExgDisconnect をコールします。クライアントとサーバの役割が入れ替わることはサポートされていません。
すべての Exchange ライブラリが ExgConnect と ExgGet をサポートするわけではないことを覚えておいて下さい。もしどちらか一方がエラーを返したなら、アプリケーションはこのフィーチャーが利用できないとみなすべきです。
URLのリクエスト
ExgGet コールによるデータのリクエストに加えて、Palm OS 4.0 以降では ExgRequest コールによりURLをリクエストすることができます。ExgRequest コールの裏にある考えは、プルテクノロジーモデルに従うことです。例えば、HTT?P プロトコルをサポートする Exchange ライブラリがあるなら、Webブラウザを実装することができます。http://www.palmos.com のようなURLを含む Exchange ソケットとともに ExgRequest コールを送ることで、応答により Web ページを受信することができます。
ExgRequest と ExgGet の根本的な違いは以下のとおりです。
- ExgRequest は、データをリクエストしたアプリケーションに対する戻りとして自動的にデータを送信しません。ExgRequest では、Exchange ライブラリがリクエストされたデータを受信するとき、 Exchange マネージャはデータ形式のデフォルトアプリケーションに対してデータを送信します。
- アプリケーションは、ExgRequest を使用して送信された URL を登録することができます。ExgRequest は最初にURLスキームを扱うExchange ライブラリを探します。見つからなかったら、代わりにアプリケーションを探します。アプリケーションを見つけたなら、それを sysAppLaunchCmdGoToURL 起動コードで起動します。
例えば、Palm OS SDK に含まれる iMessenger アプリケーションはmailto URL スキームを登録します。もし他のアプリケーションが e-mail コマンドを実装しようとするなら、ExgRequest をコールし、mailto で始まるURLを含む Exchange ソケットを渡します。このコマンドの応答として、Exchange マネージャは iMessenger アプリケーションを起動し、ユーザはメールを作成することができるようになります。