IWSDiscoveryProviderNotify
COM公式ドキュメント
IWSDiscoveryProvider からのコールバック通知を受け取るために、クライアントプログラムが実装するインターフェイスです。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
新たにアナウンスされた探索(ディスカバリー)ホスト(Hello メッセージによるもの)、またはユーザーが開始したクエリに一致した結果に関する情報を提供します。
| pService | IWSDiscoveredService* | in | リモートの探索ホストを表す IWSDiscoveredService インターフェイスへのポインターです。 |
戻り値
戻り値に意味はありません。実装側は S_OK を返してください。
解説(Remarks)
Add は、未処理のクエリに一致するたびに 1 回、および新しい探索ホストのアナウンスごとに 1 回呼び出されます。
直前に離脱した探索(ディスカバリー)ホスト(Bye メッセージによるもの)に関する情報を提供します。
| pService | IWSDiscoveredService* | in | リモートの探索ホストを表す IWSDiscoveredService インターフェイスへのポインターです。 |
戻り値
戻り値に意味はありません。実装側は S_OK を返してください。
解説(Remarks)
Remove は、離脱する探索ホストのアナウンスごとに 1 回呼び出されます。
ユーザーが開始した検索が失敗したことを示すために呼び出されます。
| hr | HRESULT | in | このコールバックの原因となった検索失敗の理由です。値が S_FALSE の場合は、Add コールバックが 1 回も発行されないまま検索が完了したことを示します。 |
| pszTag | LPWSTR | inoptional | この検索を識別する任意指定のタグです。NULL の場合があります。 |
戻り値
戻り値に意味はありません。実装側は S_OK を返してください。
解説(Remarks)
応答が 1 つでも正常に受信された場合は、SearchComplete が呼び出されます。
ユーザーが開始したクエリに対して応答が得られなかった場合は SearchFailed が呼び出されます。この場合、hr パラメーターの値は S_FALSE になります。クエリの送信は必ずしも同期的ではないため、クエリの送信を試みた際にエラーが発生した場合にも、SearchFailed が呼び出されることがあります。pszTag はクエリでユーザーが指定したタグと一致するため、どのクエリが失敗したかを識別するために使用してください。
SearchByType または SearchById で検索を開始してから SearchFailed 通知を受け取るまでの間隔は最大 10 秒です。これは WS-Discovery の MATCH_TIMEOUT に基づき、DPWS Appendix I で修正された値です。SearchByAddress で検索を開始してから SearchFailed 通知を受け取るまでの間隔は通常 21 秒ですが、最大で 150 秒になることがあります。
ユーザーが開始した検索が正常に完了し、その検索に対する一致がこれ以上受け付けられないことを示すために呼び出されます。
| pszTag | LPWSTR | inoptional | IWSDiscoveryProvider の検索メソッドに渡された検索タグです。 |
戻り値
戻り値に意味はありません。実装側は S_OK を返してください。
解説(Remarks)
特定の検索に対して応答が 1 つも受信されなかった場合は、それを示すために IWSDiscoveryProviderNotify::SearchFailed が呼び出されます。
SearchByType または SearchById で検索を開始してから SearchComplete 通知を受け取るまでの間隔は最大 10 秒です。これは WS-Discovery の MATCH_TIMEOUT に基づき、DPWS Appendix I で修正された値です。SearchByAddress で検索を開始してから SearchComplete 通知を受け取るまでの間隔は最大 150 秒です。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWSDiscoveryProviderNotify "{73EE3CED-B6E6-4329-A546-3E8AD46563D2}"
#usecom global IWSDiscoveryProviderNotify IID_IWSDiscoveryProviderNotify "{}"
#comfunc global IWSDiscoveryProviderNotify_Add 3 sptr
#comfunc global IWSDiscoveryProviderNotify_Remove 4 sptr
#comfunc global IWSDiscoveryProviderNotify_SearchFailed 5 int,wstr
#comfunc global IWSDiscoveryProviderNotify_SearchComplete 6 wstr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。