Palm Programmer's Laboratory
Palm OS Programmer's Companion Volume II/1-8
1-8 ローカルでの送受信
この章の大半は、データをリモートデバイスに送信したりリモートデバイスから受信したりするために、Exchange マネージャをどのように使用するかについて説明しています。
ローカルデバイスの別アプリケーションとデータをやりとりするために Exchange マネージャを使用することもできます。そのためには、ローカル Exchange ライブラリを使用します。以下の状況で、そのようなことを行ないたいかもしれません。
- 予定表アプリケーションのイベントを登録するアプリケーション。ビルトインの予定表の代わりにそのアプリケーションを使うかもしれません。予定がユーザの選択したアプリケーションに送信されることを保証するために、ローカル Exchange マネージャを使用してvCalendarオブジェクトとしてデータを送信することができます。この方法は、Exchange マネージャレジストリにおいてどのアプリケーションがvCalendar受信のデフォルトとなっていても使えます。
- 他のアプリケーションがデータを表示できるように、Exchange マネージャのプレビューフィーチャーを使用することができます。「プレビューの表示」セクションで説明したように、受信するよう登録されたデータのプレビューを表示するために sysAppLaunchCmdExgPreview 起動コードでアプリケーションを起動することができます。あなたのアプリケーションが認識しないデータを表示するために、このフィーチャーを使うことができます。あなたのアプリケーションが GIF を持っており、それをダイアログに表示したい、と仮定します。その GIF をローカルデバイスのグラフィックアプリケーション(=応答としてあなたが提供する矩形領域にプレビューを描画するアプリケーション)に送るために、ローカル Exchange ライブラリを使用することができます。
- 他のアプリケーションで扱われることを予定された添付ファイルを含む e-mail メッセージのような、複合データオブジェクトをあなたのアプリケーションで受信します。「ラップされていないデータを受信するための登録」セクションで説明したように、Exchange ライブラリは複合オブジェクトの「ラップをほどき(unwrap)」、そのオブジェクトを直接引き渡すことができます。しかし、そのようにするのはルールの例外です。
e-mail メッセージを e-mail アプリケーションに送信し、ユーザがリクエストしたときに限り添付ファイルを適切なアプリケーションに引き渡す、というのがより一般的です。ユーザのリクエストへの応答として、e-mail アプリケーションは添付されたオブジェクトを展開し、それを受信すべきアプリケーションにローカル Exchange ライブラリを使用して送信します。 - あなたのアプリケーションはリモートデバイスとデータをやり取りし、Exchange マネージャとやりとりするコードをデバッグしたいかもしれません。この場合、ローカル Exchange ライブラリを使用することはあなたのアプリケーションにループバックモード、つまりデータの受け取り側でもあるモード、でデータを送信することを引き起こします。
ローカル Exchange ライブラリを使用するためには、以下のようにします。
- ローカル Exchange ライブラリを識別するために、ExgSocketType 構造体の name フィールドにある URL を使います。URLを定数文字列 exgLocalPrefix で始めます。
Exchange マネージャは、Palm OS 4.0 以降でのみ URL をサポートします。Palm OS 3.X デバイスでは、赤外線ライブラリの代わりとしてローカル Exchange ライブラリとやりとりするために、localMode フラグに 1 をセットします。 - もし Exchange ダイアログの表示を抑制したりプレビュー操作を行いたいなら、ExgLocalSocketInfoType 構造体を生成・初期化し、それをソケットの socketRef フィールドにアサインします。
typedef struct { Boolean freeOnDisconnect; Boolean noAsk; ExgPreviewInfoType *previewInfoP; ExgLocalOpType op; FileHand tempFileH; } ExgLocalSocketInfoType;
パラメータは以下の通りです。
パラメータ | 説明 |
---|---|
freeOnDisconnect | ExgDisconnect コールが行われたときに構造体が開放されたかどうか。デフォルトは true です。通常は、構造体をアロケートするコードは構造体を開放する責任があります。そのため、もしあなたが ExgLocalSocketInfoType をアロケートしたなら、あなたはこのフィールドに false をセットし、終了時に確実に構造体を開放するべきです。 |
noAsk | Exchange ダイアログの表示を無効にするなら、true をセットします。例えば、もしユーザコマンドの応答に vCalender オブジェクトを生成しそれを予定表アプリケーションに送信したいなら、ユーザはあなたが送信をリクエストしたデータの受信を確認する必要が無いようにするために、あなたはおそらく noAsk に true をセットしたいでしょう。 |
previewInfoP | データのプレビューを表示するために使用する、ExgPreviewInfoType 構造体へのポインタです。もしデータの表示を助けるために単に他のアプリケーションを使用したいなら、この構造体を生成・初期化するでしょう。 |
3. ExgSocketType 構造体の noStatus フィールドに true をセットすることで、Exchange ライブラリが典型的に表示する進行ダイアログの表示を抑制することができます。
4. 通常の作法でデータを送受信します。詳しくは「データの送信」や「データの受信」を参照してください。