Управление записями группы
Запись группы — это определенные данные, опубликованные всем активным членам одноранговой группы, например сообщение чата или обновление состояния конкретного приложения. Запись представлена структурой данных 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. Это поле содержит значение размера(PEER_RECORD).
- срок действия. Это поле содержит дату окончания срока действия и время этой записи, выраженную в одноранговом времени в виде структуры FILETIME.
- тип. Это поле содержит GUID , определяющий тип записи для приложения. Если этот тип настраивается для инфраструктуры вашего приложения, необходимо также заполнить поле данных .
Следующие поля предоставляются инфраструктурой и будут игнорироваться, если они заданы приложением.
- идентификатор
- pwzCreatorId
- pwzLastModifiedById
- ftCreation
- ftLastModified
- данные безопасности
Остальные поля являются необязательными. Чтобы добавить эту новую запись в одноранговую группу, передайте ее в PeerGroupAddRecord.
Импорт и экспорт записей
Записи групп одноранговой сети хранятся локально в виде базы данных. Чтобы сохранить текущий снимок состояния базы данных одноранговой группы в локальный файл, вызовите PeerGroupExportDatabaseи передайте ей дескриптор одноранговой группы. Затем этот файл можно перенести на другой компьютер или приложение, которое может извлечь и использовать эту базу данных записей, вызвав PeerGroupImportDatabase.