Поделиться через


Управление групповыми записями

Запись группы — это определенные данные, опубликованные для всех активных участников одноранговой группы, например сообщение чата или обновление состояния конкретного приложения. Запись представлена структурой PEER_RECORD и содержит следующие сведения о одноранговом узле:

  • Идентификатор записи — это значение, которое однозначно идентифицирует запись в одноранговой группе.
  • Guid, указывающий тип записи. Приложения могут поддерживать различные типы записей. Приложение интерпретирует поле данных записи на основе типа записи. Некоторые идентификаторы GUID зарезервированы, и вызов API возвращает PEER_E_NOT_AUTHORIZED , когда приложение пытается их использовать.
  • Набор атрибутов записи, описываемых как строка XML. Атрибуты используются при поиске записей. Дополнительные сведения об атрибутах см. в разделе Схема атрибутов записи.
  • Время создания записи в одноранговом узле.
  • Время однорангового узла, в течение которого истекает срок действия записи.
  • Время изменения записи в одноранговом узле.
  • Создатель записи.
  • Элемент, изменяющий запись.
  • Структура PEER_DATA , содержащая криптографическую сигнатуру для всех полей в этой PEER_RECORD структуре. Одноранговый узел не может напрямую обновить или изменить это поле.
  • Структура PEER_DATA , содержащая данные конкретного приложения, связанные с этой записью в виде массива байтов. Тип данных, присутствующих в этом поле, определяется типом записей, определяемым приложением.

Получение записей группы одноранговых узлов

Отдельные записи получаются путем вызова PeerGroupGetRecord с идентификатором записи. При обработке всех записей определенного типа перечисляемый набор всех записей текущей одноранговой группы получается путем вызова PeerGroupEnumRecords для открытия перечисления, а затем итеративного вызова PeerGetNextItem до тех пор, пока не будут получены все записи. По завершении закройте перечисление и освободите связанную с ним память, вызвав PeerEndEnumeration.

Когда одноранговый узел создает, удаляет или обновляет запись, затронутая запись публикуется для всех членов одноранговой группы с помощью события PEER_GROUP_EVENT_RECORD_CHANGE . Обратите внимание, что если одноранговый узел не подключен к группе, он получит обновленную запись, а затем при следующем подключении. Важно зарегистрироваться для этого события в PeerGroupRegisterEvent , если приложение поддерживает записи или управляет ими каким-либо значимым образом. Кроме того, приложение может запрашивать базу данных записей по запросу с помощью PeerGroupSearchRecords.

При возникновении события PEER_GROUP_EVENT_RECORD_CHANGE в качестве структуры PEER_EVENT_RECORD_CHANGE_DATA получается конкретный идентификатор и тип записи, а также тип изменения (добавление, обновление, удаление). Эта структура получается с помощью вызова PeerGroupGetEventData. Если изменение является добавлением или обновлением, следует использовать PeerGroupGetRecord , чтобы получить запись с указанным идентификатором. Локальная база данных записей для инфраструктуры обновляется автоматически.

Вы также можете искать определенные записи на основе определенных настраиваемых атрибутов, предоставленных в поле pwzAttributesPEER_RECORD, а также любых предопределенных атрибутов. Для этого используйте функцию PeerGroupSearchRecords с поисковым запросом XML в формате, указанном в разделе Формат запроса поиска записей .

Дополнительные сведения о работе с записями в одноранговой инфраструктуре см. в разделе Записистатьи Использование одноранговой инфраструктуры.

Администрирование записей одноранговых групп

Когда первоначальные приглашения выдаются создателем одноранговой группы, он может указать, что некоторые участники выполняют административную роль (PEER_GROUP_ROLE_ADMIN) всякий раз, когда он выдает новые учетные данные пользователю (через PeerGroupCreateInvitation или PeerGroupIssueCredentials). Администратор может напрямую добавлять, удалять и обновлять любые записи группы одноранговых узлов. И наоборот, член одноранговой группы с ролью PEER_GROUP_ROLE_MEMBER или PEER_GROUP_ROLE_INVITING_MEMBER может добавлять, обновлять и удалять только свои собственные записи.

Создатель по умолчанию имеет роль администратора.

Чтобы обновить запись, получите запись с помощью PeerGroupGetRecord или PeerGroupEnumRecords, внесите изменения и передайте обновленную запись в PeerGroupUpdateRecord.

Чтобы удалить запись, передайте идентификатор записи для удаления в PeerGroupDeleteRecord.

Чтобы добавить запись, создайте новую структуру PEER_RECORD и заполните следующие поля:

  • dwSize. Это поле содержит значение sizeof(PEER_RECORD).
  • ftExpiration. Это поле содержит дату и время окончания срока действия этой записи, выраженные в одноранговом времени в виде структуры FILETIME .
  • type. Это поле содержит значение GUID , определяющее тип записи для приложения. Если этот тип является пользовательским для инфраструктуры приложения, необходимо также заполнить поле данных .

Следующие поля заполняются инфраструктурой и будут игнорироваться, если они заданы приложением:

  • идентификатор
  • pwzCreatorId
  • pwzLastModifiedById
  • ftCreation
  • ftLastModified
  • securityData

Остальные поля являются необязательными. Чтобы добавить эту новую запись в группу одноранговых узлов, передайте ее в PeerGroupAddRecord.

Импорт и экспорт записей

Одноранговые записи групп хранятся локально как база данных. Чтобы сохранить текущую snapshot базы данных записей одноранговой группы в локальный файл, вызовите PeerGroupExportDatabase и передайте его дескриптор группе одноранговых узлов. Затем этот файл можно перенести на другой компьютер или приложение, которое может извлечь и использовать эту базу данных записей, вызвав PeerGroupImportDatabase.