トップ 一覧 検索 ヘルプ RSS ログイン

Palm OS Programmer's Companion Volume II/1-7の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
[[← 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]]