[[← 6 節に戻る|Palm OS Programmer's Companion Volume II/1-6]] [[↑1 章トップへ|Palm OS Programmer's Companion Volume II/1]] [[8 節に進む →|Palm OS Programmer's Companion Volume II/1-8]] ---- !!!1-7 データのリクエスト   Palm OS 4.0以降では、ExgGet のコールを通してリモートデバイスにデータをリクエストすることが、いくつかの Exchange ライブラリで許可されます。2つのPalmデバイス間での two-way 通信を実装するために、ExgGet を使用することができます。 このセクションでは、データをリクエストするためにどのように Exchange マネージャを使用するかを説明します。以下の内容がカバーされます。 *{{a 単一オブジェクトの取得リクエストの送信|#p1}} *{{a 取得リクエスト受信時の応答|#p2}} *{{a 双方向通信|#p3}} *{{a URLのリクエスト|#p4}} !!単一オブジェクトの取得リクエストの送信 リモートデバイスからデータをリクエストするためには、以下のようにします。 +「Exchange Socket 構造体の初期化」セクションで説明するように、Exchange Socket 構造体(ExgSocketType)を生成し、初期化します。データ構造体は、Exchange ライブラリおよび受信したいデータの形式を特定します。 +接続を確立してデータをリクエストするために、ExgGet をコールします。応答として、Exchange ライブラリはリモートデバイスとの接続を確立し、戻りは受信すべきデータを含みます。もしリモートデバイスがPalmハンドヘルドであれば、Exchange ライブラリは「{{a 取得リクエスト受信時の応答|#p2}}」セクションで説明する手順に従って、リモート側アプリケーションからこのデータを入手します。 +データを受信するために、1回以上 ExgReceive をコールします。 +接続を終了するために、ExgDisconnect をコールします。 !!取得リクエスト受信時の応答 リモートデバイスの Exchange マネージャが取得リクエスト受信すると、適切なアプリケーションを sysAppLaunchCmdExgGetData 起動コードで起動します。 sysAppLaunchCmdExgGetData 起動コードへの応答は、リクエストされたデータを送信することです。 +1回以上 ExgSend をコールします。 +完了時に ExgDisconnect をコールします。 詳細は、[[単独オブジェクトの送信|Palm OS Programmer's Companion Volume II/1-4]]セクションを参照して下さい。 !!双方向通信 アプリケーションで双方向通信を行なうために、ExgGet と ExgPutを組み合わせて ExgConnect コールとともに使うことができます。例えば、マルチユーザゲームで双方向通信を実装したいかもしれません。そのような場合は、一つのデバイスはクライアントとして、他のデバイスはサーバとして振舞います。クライアントは ExgConnect をコールします。ExgConnect は、複数の操作(複数オブジェクトの送信など)を行なうために接続が確立されたことを Exchange ライブラリに通知します。そして、クライアントは ExgGet または ExgPut を繰り返しコールし、完了時に ExgDisconnect をコールします。サーバ側デバイスでは、各リクエストに対して適切なアプリケーションが起動されます。各オブジェクトの送受信完了時にサーバも ExgDisconnect をコールします。クライアントとサーバの役割が入れ替わることはサポートされていません。 すべての Exchange ライブラリが ExgConnect と ExgGet をサポートするわけではないことを覚えておいて下さい。もしどちらか一方がエラーを返したなら、アプリケーションはこのフィーチャーが利用できないとみなすべきです。 !!URLのリクエスト ExgGet コールによるデータのリクエストに加えて、Palm OS 4.0 以降では ExgRequest コールによりURLをリクエストすることができます。ExgRequest コールの裏にある考えは、プルテクノロジーモデルに従うことです。例えば、HTTP プロトコルをサポートする 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 アプリケーションを起動し、ユーザはメールを作成することができるようになります。 ---- [[← 6 節に戻る|Palm OS Programmer's Companion Volume II/1-6]] [[↑1 章トップへ|Palm OS Programmer's Companion Volume II/1]] [[8 節に進む →|Palm OS Programmer's Companion Volume II/1-8]]