[[← 2 節に戻る|Palm OS Programmer's Companion Volume II/2-2]] [[↑2 章トップへ|Palm OS Programmer's Companion Volume II/2]] [[4 節に進む →|Palm OS Programmer's Companion Volume II/2-4]] ---- !!!2-3 Exchange ライブラリの実装   !!要求される関数 Exchange ライブラリは、特定の転送の実装を扱う関数と[[Exchange ライブラリ]] API に要求される関数を含んでいます。転送固有のタスクもしくは Exchange ライブラリ API 固有でないタスクを扱うために要求される関数は、この文書の対象外です。しかし一般的に Exchange ライブラリに要求される他の関数は、デバイスのポーリング、割り込みの処理、ユーザ入力のチェック、といったタスクを含みます。 アプリケーションによっては、Exchange ライブラリの要求が送信のみだったり受信のみだったり両方だったりするかもしれません。少なくとも、オブジェクトの送信時は、各 Exchange ライブラリ関数の説明は「Palm OS Programmer's API Reference」の[[「第 63 章 Exchange Library」|Palm OS Programmer's API Reference]]を参照して下さい。 !ExgLibAccept の実装 2つのシチュエーションで、アプリケーションが Exchange マネージャの {{span style='color:blue;font-family:monospace;',ExgAccept}} 関数をコールします。 *{{span style='color:blue;font-family:monospace;',sysAppLaunchCmdExgReceiveData}} への応答として、アプリケーションがデータ受信のために接続を初期化する場合。 *{{span style='color:blue;font-family:monospace;',sysAppLaunchCmdExgAskUser}} への応答として、アプリケーションがデータプレビュー受信のために接続を初期化する場合。 Exchange マネージャは順番に {{span style='color:blue;font-family:monospace;',ExgLibAccept}}をコールします。 データプレビュー時は、受けるデータをバッファしなければいけません。あなたの {{span style='color:blue;font-family:monospace;',ExgLibAccept}} 関数は、非破壊的な読み取りの準備として、プレビューフラグを観察してバッファを巻き戻すべきです。プレビューフラグ無しでそれが再びコールされるとき、再び巻き戻り、このとき破壊的な読み取りが準備されます。 アプリケーションがデータが受け入れたり受信したりすることを示すために、{{span style='color:blue;font-family:monospace;',ExgLibAccept}}はあらゆる進行ダイアログを更新しなければいけません。 !接続エラーの処理 {{span style='color:blue;font-family:monospace;',ExgLibPut}}コール。{{span style='color:blue;font-family:monospace;',ExgLibPut}}の初期化コールで通信が確立する代わりに、多くの Exchange ライブラリが {{span style='color:blue;font-family:monospace;',ExgLibConnect}}をサポートしていません。もしあなたの Exchange ライブラリが {{span style='color:blue;font-family:monospace;',ExgLibConnect}} をサポートする必要がないなら、この関数の実装は単に {{span style='color:blue;font-family:monospace;',errNone}} を返すだけです。 もしあなたの Exchange ライブラリが {{span style='color:blue;font-family:monospace;',ExgLibConnect}} とをサポートせず、{{span style='color:blue;font-family:monospace;',ExgLibPut}}の初期化コールの間にエラーが起きるなら、{{span style='color:blue;font-family:monospace;',ExgLibPut}} の実装は直後にクリーンアップをするべきです。{{span style='color:blue;font-family:monospace;',ExgLibDisconnect}} のコール時にはカウントしません。もし {{span style='color:blue;font-family:monospace;',ExgLibPut}} の初期化コールが成功しても、後続エラーのクリーンアップは{{span style='color:blue;font-family:monospace;',ExgLibDisconnect}}で実行されます。 もしあなたの Exchange ライブラリが {{span style='color:blue;font-family:monospace;',ExgLibConnect}} をサポートし、そのコール中にエラーが発生するなら、{{span style='color:blue;font-family:monospace;',ExgLibConnect}} はその直後にクリーンアップを行なうべきです。しかし、{{span style='color:blue;font-family:monospace;',ExgLibConnect}}のコールが成功したあとのエラーのクリーンアップは、{{span style='color:blue;font-family:monospace;',ExgLibDisconnect}} にデリゲートされることができます。 最後に、もしあなたの Exchange ライブラリが {{span style='color:blue;font-family:monospace;',ExgLibConnect}} をサポートするがアプリケーションが {{span style='color:blue;font-family:monospace;',ExgLibPut}} よりも優先してそれをコールしないなら、あなたのライブラリがあたかも {{span style='color:blue;font-family:monospace;',ExgLibConnect}} を実装していないかのような状態になります。つまり、 直後にクリーンアップを行なうようにあなたが実装した{{span style='color:blue;font-family:monospace;',ExgLibPut}}の初期化コール中にエラーが発生したなら、もし{{span style='color:blue;font-family:monospace;',ExgLibPut}}の初期化コールが成功しても{{span style='color:blue;font-family:monospace;',ExgLibDisconnect}}における後続エラーの後にクリーンアップを行なうことができます。 もしあなたの Exchange ライブラリが[[双方向通信|Palm OS Programmer's Companion Volume II/1-7]]をサポートするなら、あなたは {{span style='color:blue;font-family:monospace;',ExgLibConnect}} をサポートすべきであることに注意して下さい。 !データのバッファリング データは Exchange ライブラリによって送信され、{{span style='color:blue;font-family:monospace;',ExgLibDisconnect}} コールの使用により Exchange ライブラリがデータを受信します。バッファリングにはいくつかの利点があります。例えば、通信スタックが送信または受信アプリケーションとサイクルを共有する必要がありません。また、通信ハードウェアをオンにしておく時間をできる限り短くすることでバッテリを長くもたせることができます。一つの障害は、バッファリングが余計なストレージを要求することで、これはやりとりするデータ量が大きいと問題になるかもしれません。 !!Exchange マネージャによる登録 Exchange ライブラリは、アプリケーションと同様に、受信するオブジェクトの形式をExchange マネージャにより登録する必要があります。Exchange ライブラリは典型的に2つのURLスキームを登録します。一つは Exchange ライブラリを一意に指定するために使用され、もう一つはそれをどのように使用されるかのために使用されます。 例えば赤外線ライブラリは、特定のプロトコルを指定するために「_irobex」を登録し、Beam コマンドからのアクセスを可能にするために「_beam」を登録します。ホスト転送サンプル Exchange ライブラリは「_host」と「_send」を登録します。後者は Send コマンドからのアクセスを可能にします。ほとんどの Exchange ライブラリはおそらく「_send」スキームを登録しようとするでしょう。これらの URL スキームは、「http」と「mailto」などの標準URLスキームとの競合を避けるため、下線( _ )で始まります。サポートされるURLスキームについては、[[第 1 章「オブジェクト交換」|Palm OS Programmer's Companion Volume II/1]]を参照して下さい。 ---- [[← 2 節に戻る|Palm OS Programmer's Companion Volume II/2-2]] [[↑2 章トップへ|Palm OS Programmer's Companion Volume II/2]] [[4 節に進む →|Palm OS Programmer's Companion Volume II/2-4]]