次の方法で共有


グループ レコードの管理

グループ レコードは、チャット メッセージやアプリケーション固有の状態更新など、ピア グループのすべてのアクティブなメンバーに公開される特定のデータです。 レコードは PEER_RECORD 構造体によって表され、ピアに関する次の情報が含まれます。

  • レコード ID は、ピア グループ内のレコードを一意に識別する値です。
  • レコードの種類を指定する GUID。 アプリケーションでは、さまざまなレコードの種類をサポートできます。 アプリケーションは、レコードの種類に基づいてレコードの データ フィールドを解釈します。 一部の GUID は予約されており、API 呼び出しでは、アプリケーションが使用しようとすると PEER_E_NOT_AUTHORIZED が返されます。
  • XML 文字列として記述されたレコード属性のセット。 属性は、レコードを検索するときに使用されます。 属性の詳細については、「 レコード属性スキーマ」を参照してください。
  • レコードが作成されるピア時間。
  • レコードの有効期限が切れるピア時間。
  • レコードが変更されたピア時間。
  • レコードの作成者。
  • レコードを変更するメンバー。
  • この PEER_RECORD 構造体内のすべてのフィールドの暗号化署名を含む PEER_DATA 構造体。 このフィールドは、ピアによって直接更新または変更することはできません。
  • このレコードに関連付けられたアプリケーション固有のデータをバイト配列として格納する PEER_DATA 構造体。 このフィールドに存在するデータの種類は、アプリケーション定義のレコード型によって決まります。

ピア グループ レコードの取得

個々のレコードは、レコードの ID を使用して PeerGroupGetRecord を呼び出すことによって取得されます。 特定の種類のすべてのレコードを処理する場合、現在のすべてのピア グループ レコードの列挙セットを取得するには、まず PeerGroupEnumRecords を呼び出して列挙を開き、すべてのレコードが取得されるまで PeerGetNextItem を 繰り返し呼び出します。 完了したら、列挙を閉じ、 PeerEndEnumeration を呼び出して、関連付けられているメモリを解放します。

ピアによってレコードが作成、削除、または更新されると、影響を受けるレコードは、 PEER_GROUP_EVENT_RECORD_CHANGE イベントを使用してピア グループのすべてのメンバーに発行されます。 ピアがグループに接続されていない場合、次に接続すると更新されたレコードが受信されることに注意してください。 アプリケーションが意味のある方法でレコードを保持または管理する場合は 、PeerGroupRegisterEvent にこのイベントに登録することが重要です。 または、 アプリケーションは PeerGroupSearchRecords を使用して、レコード データベースに対してオンデマンドでクエリを実行できます。

PEER_GROUP_EVENT_RECORD_CHANGE イベントが発生すると、特定のレコード ID と種類、および変更の種類 (追加、更新、削除) がPEER_EVENT_RECORD_CHANGE_DATA構造体として受信されます。 この構造体は、 PeerGroupGetEventData の呼び出しで取得されます。 変更が追加または更新の場合は、 PeerGroupGetRecord を使用して、指定された ID を持つレコードを取得する必要があります。 インフラストラクチャのローカル レコード データベースは自動的に更新されます。

また、PEER_RECORDの pwzAttributes フィールドで指定された 特定のカスタム属性と、定義済みの属性に基づいて特定のレコードを検索することもできます。 これを実現するには、 PeerGroupSearchRecords 関数を使用し、「レコード検索クエリの形式」トピックで指定された形式の XML 検索クエリ を使用します。

ピア インフラストラクチャでのレコードの操作の詳細については、「ピア インフラストラクチャの使用」の レコード に関するトピック 参照してください。

ピア グループ レコードの管理

ピア グループの作成者が最初の招待を発行すると、( PeerGroupCreateInvitation または PeerGroupIssueCredentials を介して) ユーザーに新しい資格情報を発行するたびに、特定のメンバーが管理ロール (PEER_GROUP_ROLE_ADMIN) で機能するように指定できます。 管理者は、ピア グループ レコードを直接追加、削除、および更新できます。 逆に、ロールが PEER_GROUP_ROLE_MEMBER または PEER_GROUP_ROLE_INVITING_MEMBER に設定されているピア グループ メンバーは、独自のレコードの追加、更新、削除のみを行うことができます。

作成者には、既定で管理者ロールがあります。

レコードを更新するには、PeerGroupGetRecord または PeerGroupEnumRecords でレコードを取得し、変更を行い、更新されたレコードを PeerGroupUpdateRecord に渡します。

レコードを削除するには、削除するレコード ID を PeerGroupDeleteRecord に渡します。

レコードを追加するには、新しい PEER_RECORD 構造を作成し、次のフィールドを設定します。

  • dwSize。 このフィールドには、 sizeof(PEER_RECORD) の値が含まれています
  • ftExpiration。 このフィールドには、 FILETIME 構造体としてピア時間で表される、このレコードの有効期限の日付と時刻が含まれます。
  • type。 このフィールドには、アプリケーションのレコードの種類を識別する GUID 値が含まれています。 この型がアプリケーション インフラストラクチャに対してカスタムである場合は、 データ フィールドも設定する必要があります。

次のフィールドはインフラストラクチャによって設定され、アプリケーションによって設定された場合は無視されます。

  • id
  • pwzCreatorId
  • pwzLastModifiedById
  • ftCreation
  • ftLastModified
  • securityData

残りのフィールドは省略可能です。 この新しいレコードをピア グループに追加するには、 PeerGroupAddRecord に渡します。

レコードのインポートとエクスポート

ピアツーピア グループ レコードは、データベースとしてローカルに保持されます。 ピア グループ レコード データベースの現在のスナップショットをローカル ファイルに保存するには、PeerGroupExportDatabase を呼び出して、そのハンドルをピア グループに渡します。 このファイルは、 PeerGroupImportDatabase を呼び出すことでこのレコード データベースを抽出して使用できる別のコンピューターまたはアプリケーションに転送できます。