iscEngineListenerPF は、iscEngineSetListener() で登録されたユーザー定義のリスナー関数が準拠しなければならないプロトタイプを定義します。
構文
typedef isy_INT32 (*iscEngineListenerPF)( isy_UINT32 listenerData, ISCEVT* event, isy_VOID* pExtraInfo);
関数の引き数
表 139 は、iscEngineSetListenerPF 関数タイプで使用される有効な引き数をリストしたものです。
表 139. iscEngineListenerPF の引き数
データ・タイプ | 引き数 | 用途 | 説明 |
---|---|---|---|
isy_UINT32 | listenerData | 入力 | iscEngineSetListener() による syncListenerData 引き数のデータ・セットは、 リスナー関数に転送されて戻されます |
ISCEVT* | event | 入力 | イベント・オブジェクト |
isy_VOID* | pExtraInfo | 入力 | 予約済み |
使用法
同期化の進行状況をモニターするためにユーザー定義のリスナー関数を使用するには、 まず、関数が iscEngineSetListenerPF 関数タイプに準拠するようにしなければなりません。 次に、iscEngineSetListener() 関数を使用してリスナー関数を登録します。 これで、同期イベントが発生するとユーザー定義のリスナー関数に通知されます。 event 引き数は、イベントに関するさまざまな情報を含む構造体です。
表 140 は、イベント構造体の全フィールドと、各フィールドの目的をリストしたものです。
表 140. iscEngineListenerPF イベントのフィールド
フィールド | 説明 | |
---|---|---|
type | イベント・タイプは、以下のいずれかの値にすることができます (括弧内は実際の値)。
| |
state | 以下のサブフィールドを含む、イベントの状態です。
| |
retry | 0 以外の場合は、同じイベントに対する再試行の回数。 | |
info | イベント固有のオプショナル情報 (NULL 以外の場合)。これは、非競合イベントの場合、ストリング引き数の配列です。 競合イベントの場合、データ・タイプは ISCLISTENCONFLICT です。 |
event.info フィールドには、イベント固有のオプショナル情報がいくつか含まれています。 この情報を識別して解釈するには、イベント・コードを使用します。
表 141 は、イベント・タイプのカテゴリー別にすべてのイベント・コードをリストしたものです。
表 141. iscEngineListenerPF のイベント・コード
イベント・タイプ: ISCEVTTYPE_Info | |||
イベント・コード | イベント情報 (argc) | 説明 | |
---|---|---|---|
ISCEVT_InfGeneral (1000) | NULL | 一般情報 (デバッグ目的) です。 | |
ISCEVT_InfSyncStarted (1001) | NULL | 同期化が開始されました。 | |
ISCEVT_InfPrepMsg (1002) | NULL | メッセージの準備中。 | |
ISCEVT_InfSendMsg (1003) | NULL | メッセージの送信中。 | |
ISCEVT_InfWaitMsg (1004) | NULL | サーバー応答の待機中。 | |
ISCEVT_InfApplyMsg (1005) | NULL | サーバー・メッセージを適用中です。 | |
ISCEVT_InfCancelingSync (1006) | NULL | 同期の取り消し中。 | |
ISCEVT_InfSubsSetStarted (1007) | NULL | サブスクリプション・セットの同期化が開始されました。 | |
ISCEVT_InfSyncingSubs (1008) | NULL | サブスクリプションの同期化が開始されました。 | |
ISCEVT_InfSubsSetFailed (1009) | NULL | サブスクリプション・セットの同期化が失敗しました。 | |
ISCEVT_InfSubsSetCanceled (1010) | NULL | サブスクリプション・セットの同期化がキャンセルされました。 | |
ISCEVT_InfSubsSetSucceeded (1011) | NULL | サブスクリプション・セットの同期化が正常に終了しました。 | |
ISCEVT_InfSyncSucceeded (1012) | NULL | 同期化が正常に終了しました。 | |
SCEVT_InfSyncFailed (1013) | NULL | (一部のサブスクリプション・セットで) 同期化が失敗しました。 | |
ISCEVT_InfSyncCanceled (1014) | NULL | 同期化が (ユーザーによって) キャンセルされました。 | |
ISCEVT_InfSyncProg (1015) | NULL | % で表される同期化の進行状況です。 | |
ISCEVT_InfNoNewChange (1016) | NULL | 新規のサーバー変更はありません。プルおよび確認フェーズをスキップします。 | |
ISCEVT_InfLoginFailed (1017) | NULL | 指定したログイン情報が認証プロセスをパスしました。 |
表 142. iscEngineListenerPF のイベント・コード
イベント・タイプ: ISCEVTTYPE_Conflict | |||
イベント・コード | イベント情報 (argc) | 説明 | |
---|---|---|---|
ISCEVT_CftReject (2000) | ISCLISTENCONFLICT | データ競合が同期内で発見されました。実際の 競合データは ISCLISTENCONFLICT 構造体で表され、その参照ポインターが event.info を介してアプリケーションに戻されます。 |
表 143. iscEngineListenerPF のイベント・コード
イベント・タイプ: ISCEVTTYPE_Retry | |||
イベント・コード | イベント情報 (argc) | 説明 | |
---|---|---|---|
ISCEVT_TryNetConn (4601) | NULL | サーバーへの接続を再試行します。 | |
ISCEVT_TrySendRequest (4602) | NULL | 要求の送信を再試行します。 | |
ISCEVT_TryRecvReply (4603) | NULL | 応答の受信を再試行します。 | |
ISCEVT_TryRecvTimeout (4604) | NULL | 受信応答を待機する時間を延ばします。 | |
SCEVT_TryRecvAck (4605) | NULL | 確認通知の受信を再度試みます。 |
表 144. iscEngineListenerPF のイベント・コード
イベント・タイプ: ISCEVTTYPE_Query | ||
イベント・コード | イベント情報 (argc) | 説明 |
---|---|---|
ISCEVT_QueCancel (5000) | NULL | ユーザーがキャンセルしたかどうかを照会して、次に示す値を戻します (括弧内は実際の値)。
|
ISCEVT_QueCancelUponError (5001) | NULL | ユーザーがキャンセルしたかどうかを照会して、次に示す値を戻します (括弧内は実際の値)。
|
ISCEVT_QueLogin (5002) | ISCLISTENARG(3)
info->argv[0]
info->argv[1]
info->argv[2] | アダプターによって要求されたログイン情報です。
リスナーはイベント情報で要求された情報を提供し、実際の値 (1) と共に ISCRTNCB_Done を戻さなければなりません。
データ・ソースのターゲット名
ユーザー名を保持するブランク・バッファー
パスワードを保持するブランク・バッファー |
ISCEVT_QueSubsTarget (5003) |
ISCLISTENARG(1)
info->argv[0]
|
アダプターによって要求されたデータベース情報。リスナーは、 イベント情報で 要求された情報を提供し、デフォルトのターゲット・ディレクトリーを 使用するためにISCRTNCB_Done または ISCRTNCB_Default を戻します。
サブスクリプション用ディレクトリー。
|
表 145. iscEngineListenerPF のイベント・コード
イベント・タイプ: ISCEVTTYPE_Error | |||
イベント・コード | イベント情報 (argc) | 説明 | |
---|---|---|---|
ISCEVT_ErrOpenAdapter (300) | NULL | アダプター <adapter name> のオープンに失敗しました。 | |
ISCEVT_ErrLoadAdapter (301) | NULL | アダプター <adapter name> のロードに失敗しました。 | |
ISCEVT_ErrCloseAdapter (302) | NULL | アダプター <adapter name> のクローズに失敗しました。 | |
ISCEVT_ErrAuthenticateKey (306) | NULL | 認証が失敗しました (無効な暗号鍵)。同期化は打ち切られました。 | |
ISYNCEVT_ErrClientCryptoFailed (307) | NULL | クライアントの暗号化または暗号化解除が失敗しました。同期化は打ち切られました。 | |
ISCEVT_ErrEncryptNotAvail (308) | NULL | 暗号化が利用不可です。 | |
ISCEVT_ErrEncryptLibOpen (309) | NULL | 暗号化ライブラリーのオープンに失敗しました。 | |
ISCEVT_ErrSubsNotFound (311) | NULL | サーバーがサブスクリプションを検出できません。 | |
ISCRTN_ErrSubsNotAvail (312) | NULL | サブスクリプションがサーバーによってブロックされています。 | |
ISCRTN_ErrSubsDefAltered (316) | NULL | 同期エンジンが最後に構成を同期化した後に、サブスクリプション定義が変更されています。 | |
ISCEVT_ErrAllocResource (400) | NULL | アダプター・リソースの割り振りに失敗しました。 | |
ISCEVT_ErrConnectData (401) | NULL | ターゲット・データへの接続に失敗しました。 | |
ISCEVT_ErrDisconnectData (402) | NULL | ターゲット・データからの切断に失敗しました。 | |
ISCEVT_ErrNoData (403) | NULL | データが見つかりません。 | |
ISCEVT_ErrMessageFormat (412) | NULL | 予期しないメッセージ・フォーマットです。 | |
ISCEVT_ErrNotFound (413) | ISCLISTENARG(2)
info->argv[0]
info->argv[1] | 要求されたデータが見つかりません。
データ・ソースのターゲット名
データ名 | |
ISCEVT_ErrEndOfData (414) | NULL | 予期しないデータの終わりです。 | |
ISCEVT_ErrDataTooLong (415) | ISCLISTENARG(3)
info->argv[0]
info->argv[1]
info->argv[2] | データが長すぎるため、切り捨てられました。
データ・ソースのターゲット名
データ名
データ・エレメント名 (空ではない場合) | |
ISCEVT_ErrSyncDisabled (417) | NULL | サーバーは、ユーザーが使用可能ではないと報告しています。 | |
ISCEVT_ErrServerException (418) | NULL | サーバーは、不明な例外を報告しています。 | |
ISCEVT_ErrReadOnly (420) | ISCLISTENARG(2)
info->argv[0]
info->argv[1] | 読み取り専用データを更新しようとしました。
データ・ソースのターゲット名
データ名 | |
ISCEVT_ErrOperation (421) | NULL | データに対する正しくない操作です。 | |
ISCEVT_ErrUnauthorized (423) | NULL | ターゲット・データへのアクセスが許可されていません。 | |
ISCEVT_ErrNotAvailable (424) | ISCLISTENARG(2)
info->argv[0]
info->argv[1] | 要求されたデータが利用不能です。
データ・ソースのターゲット名
データ名 | |
ISCEVT_ErrNotSupported (425) | ISCLISTENARG(3)
info->argv[0]
info->argv[1]
info->argv[2] | 要求されたデータはサポートされていません。
データ・ソースのターゲット名
データ名
データ・エレメント名 (空ではない場合) | |
ISCEVT_ErrNetConn (601) | NULL | サーバーへの接続に失敗しました。 | |
ISCEVT_ErrSendRequest (602) | NULL | 要求の送信に失敗しました。 | |
ISCEVT_ErrRecvReply (603) | NULL | 応答の受信に失敗しました。 | |
ISCEVT_ErrRecvTimeout (604) | NULL | 応答の受信中にタイムアウトになりました。 | |
ISCEVT_ErrRecvAck (605) | NULL | 確認通知の受信が失敗しました。 | |
ISCRTN_ErrCloseNetLib (608) | NULL | ネットワーク・ライブラリーのクローズに失敗しました。 | |
ISCEVT_ErrOutOfMemory (610) | NULL | メモリー不足。 | |
ISCEVT_ErrInternal (698) | ISCLISTENARG(1)
info->argv[0] | その他の内部エラーが発生しました。
エラー状態 (ストリング)。 |
表 146. iscEngineListenerPF のイベント・コード
イベント・タイプ: ISCEVTTYPE_Fatal | ||
イベント・コード | イベント情報 (argc) | 説明 |
---|---|---|
ISCEVT_FatSyncCfgAbort (303) | NULL | 構成の同期化が失敗しました。同期化は打ち切られました。 |
ISCEVT_FatAuthenticateFailed (304) | NULL | 認証が失敗しました。同期化は打ち切られました。 |
ISCEVT_FatIncompVersion (310) | NULL | 非互換バージョンの同期クライアントです。 |
ISCEVT_FatInvalidSession (313) | NULL | 無効なセッション ID です。 |
ISCEVT_FatSyncGroup (314) | NULL | ユーザーがどの同期グループにも属していません。 |
ISCEVT_FatRegisterDevice (315) | NULL | ユーザー用のデバイスの登録に失敗しました。 |
ISCEVT_FatNetOpenConn (600) | NULL | サーバーへの接続のオープンに失敗しました。 |
ISCEVT_FatOpenNetLib (606) | NULL | ネットワーク・ライブラリーのロードに失敗しました。 |
ISCEVT_FatResolveHost (609) | NULL | ホスト名の解決に失敗しました。 |
ISCEVT_FatServerForbidden (611) | NULL | サーバーへの同期化が禁止されています。 |
ISCEVT_FatServerNotFound (612) | NULL | サーバーが見つかりません。 |
ISCEVT_FatServer (613) | NULL | サーバーのエラー。 |
ISCEVT_FatServerNotAvail (614) | NULL | サーバーから応答がありません。 |
ISCEVT_FatNetUnknown (699) | NULL | 不明なネットワーク・エラーです。 |
例:
isy_INT32 mySyncListener( isy_UINT32 listenerData, ISCEVT* event, isy_VOID* pExtraInfo) { char *statusMsg = appEventCodeToMessage(event); int timesRetried; switch (event->type) { case ISCEVTTYPE_Info: appStatusBar(statusMsg); // appStatusBar can be any routine which shows the statusMsg (e.g., in a // status bar) return ISCRTNCB_Done; case ISCEVTTYPE_Retry: timesRetried = event->retry; if (timesRetried >= 3) // Try no more than 3 times return ISCRTNCB_ReplyNo; else return appRetryCancelBox(statusMsg, 10); // 10 sec timeout // appRetryCancelBox can be any routine which shows a window with two // buttons: Cancel and Retry. It returns // ISCRTNCB_ReplyYes, if user clicks Retry // ISCRTNCB_ReplyNo, if user clicks Cancel // If the user doesn't make choice, it returns ISCRTNCB_Default. break; // all other event types, don't care default: return ISCRTNCB_Default; } // switch (event->type) } // mySyncListener
戻りコード
イベント・タイプが ISCEVTTYPE_Retry である場合、リスナー関数は以下のいずれかのコードを戻します。
イベント・タイプが ISCEVTTYPE_Query である場合、戻りコードの意味はイベント・コードの値によって決まります。 つまり、リスナーはイベント・コードをチェックし、該当する値を戻します。 しかし、ユーザーが照会に応答しない場合、アプリケーションは以下のコードを戻します。
ISCEVTTYPE_Retry および ISCEVTTYPE_Query 以外のイベント・タイプの場合、同期エンジンは戻りコードを無視します。 リスナーは単に ISCRTNCB_Done を戻します。
注: 評価対象外のイベントの場合、リスナー関数は単に ISCRTNCB_Default を戻し、 同期エンジンでデフォルトのアクションを実行します。
注: 上記の中で示されているアスタリスク (*) は、各イベント・タイプのデフォルトのアクションを示しています。
制約事項
ユーザー定義のリスナー関数は、同期エンジンのプロトコルに従わなければなりません。 従わない場合、同期エンジンが正しく動作しない可能性があります。
関連した概念
関連したタスク
関連した解説