다음을 통해 공유


그룹 레코드 관리

그룹 레코드는 피어 그룹의 모든 활성 멤버(예: 채팅 메시지 또는 애플리케이션별 상태 업데이트)에 게시된 특정 데이터입니다. 레코드는 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_RECORDpwzAttributes 필드에 제공된 특정 사용자 지정 특성을 기반으로 특정 레코드를 검색할 수도 있습니다. 이렇게 하려면 레코드 검색 쿼리 형식 항목에 지정된 대로 형식이 지정된 XML 검색 쿼리와 함께 PeerGroupSearchRecords 함수를 사용합니다.

피어 인프라의 레코드 작업에 대한 자세한 내용은 피어 인프라 사용레코드 항목을 참조하세요.

피어 그룹 레코드 관리

피어 그룹의 작성자가 초기 초대를 발급하는 경우 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 구조로 표현된 이 레코드의 만료 날짜 및 시간이 포함됩니다.
  • 형식입니다. 이 필드에는 애플리케이션에 대한 레코드 형식을 식별하는 GUID 값이 포함되어 있습니다. 이 형식이 애플리케이션 인프라에 대한 사용자 지정인 경우 데이터 필드도 채워야 합니다.

다음 필드는 인프라에 의해 채워지고 애플리케이션에서 설정하는 경우 무시됩니다.

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

나머지 필드는 선택 사항입니다. 이 새 레코드를 피어 그룹에 추가하려면 PeerGroupAddRecord에 전달합니다.

레코드 가져오기 및 내보내기

피어 투 피어 그룹 레코드는 데이터베이스로 로컬로 유지 관리됩니다. 피어 그룹 레코드 데이터베이스의 현재 스냅샷 로컬 파일에 저장하려면 PeerGroupExportDatabase를 호출하고 해당 핸들을 피어 그룹에 전달합니다. 그런 다음 이 파일을 다른 컴퓨터 또는 애플리케이션으로 전송할 수 있으며, PeerGroupImportDatabase를 호출하여 이 레코드 데이터베이스를 추출하고 사용할 수 있습니다.