Gestione dei record di gruppo
Un record di gruppo è dati specifici pubblicati per tutti i membri attivi di un gruppo peer, ad esempio un messaggio di chat o un aggiornamento di stato specifico dell'applicazione. Un record è rappresentato dalla struttura PEER_RECORD e contiene le informazioni seguenti su un peer:
- L'ID record è un valore che identifica in modo univoco un record nel gruppo peer.
- GUID che specifica il tipo di record. Le applicazioni possono supportare diversi tipi di record. Un'applicazione interpreta il campo dati di un record in base al tipo di record. Alcuni GUID sono riservati e la chiamata API restituisce PEER_E_NOT_AUTHORIZED quando l'applicazione tenta di usarli.
- Set di attributi di record descritti come stringa XML. Gli attributi vengono usati durante la ricerca dei record. Per altre informazioni sugli attributi, vedere Schema degli attributi record.
- Tempo peer creato da un record.
- Tempo di peer scadenza di un record.
- Tempo peer modificato da un record.
- Creatore di un record.
- Membro che modifica un record.
- Struttura PEER_DATA contenente la firma crittografica per tutti i campi della struttura PEER_RECORD . Questo campo non può essere aggiornato direttamente o modificato da un peer.
- Struttura PEER_DATA contenente i dati specifici dell'applicazione associati a questo record come matrice di byte. Il tipo di dati presenti in questo campo è determinato dal tipo di record definito dall'applicazione.
Recupero di record del gruppo di peer
I singoli record vengono ottenuti chiamando PeerGroupGetRecord con l'ID del record. Quando si elaborano tutti i record di un tipo specifico, il set enumerato di tutti i record del gruppo di peer corrente viene ottenuto chiamando prima PeerGroupEnumRecords per aprire l'enumerazione e quindi chiamare in modo iterativo PeerGetNextItem fino a quando non vengono recuperati tutti i record. Al termine, chiudere l'enumerazione e rilasciare la memoria associata chiamando PeerEndEnumeration.
Quando un record viene creato, eliminato o aggiornato da un peer, il record interessato viene pubblicato in tutti i membri del gruppo peer tramite l'evento PEER_GROUP_EVENT_RECORD_CHANGE . Si noti che se un peer non è connesso al gruppo, riceverà il record aggiornato e quindi la prossima volta che si connette. È importante registrare per questo evento con PeerGroupRegisterEvent se l'applicazione gestisce o gestisce i record in qualsiasi modo significativo. In alternativa, l'applicazione può eseguire query sul database di record su richiesta usando PeerGroupSearchRecords.
Quando viene generato l'evento PEER_GROUP_EVENT_RECORD_CHANGE , viene ricevuto come struttura PEER_EVENT_RECORD_CHANGE_DATA l'ID record e il tipo di modifica (aggiungere, aggiornare, eliminare). Questa struttura viene ottenuta con una chiamata a PeerGroupGetEventData. Se la modifica è un componente aggiuntivo o un aggiornamento, è necessario usare PeerGroupGetRecord per ottenere il record con l'ID fornito. Il database record locale per l'infrastruttura viene aggiornato automaticamente.
È anche possibile cercare record specifici in base a specifici attributi personalizzati forniti nel campo pwzAttributes di PEER_RECORD, nonché su tutti gli attributi predefiniti. A tale scopo, usare la funzione PeerGroupSearchRecords con una query di ricerca XML formattata come specificato nell'argomento Formato query di ricerca record .
Per altre informazioni sull'uso dei record nell'infrastruttura peer, vedere l'argomento Record in Uso dell'infrastruttura peer.
Amministrazione dei record del gruppo peer
Quando gli inviti iniziali vengono rilasciati dal creatore del gruppo peer, è possibile specificare che determinati membri servono in un ruolo amministrativo (PEER_GROUP_ROLE_ADMIN) ogni volta che rilascia nuove credenziali all'utente (tramite PeerGroupCreateInvitation o PeerGroupIssueCredentials). Un amministratore ha la possibilità di aggiungere, eliminare ed aggiornare direttamente i record del gruppo peer. Al contrario, un membro del gruppo peer con il ruolo impostato su PEER_GROUP_ROLE_MEMBER o PEER_GROUP_ROLE_INVITING_MEMBER può aggiungere, aggiornare ed eliminare solo i propri record.
L'autore ha il ruolo amministratore per impostazione predefinita.
Per aggiornare un record, ottenere il record con PeerGroupGetRecord o PeerGroupEnumRecords, apportare le modifiche e passare il record aggiornato a PeerGroupUpdateRecord.
Per eliminare un record, passare l'ID record da eliminare a PeerGroupDeleteRecord.
Per aggiungere un record, creare una nuova struttura PEER_RECORD e popolare i campi seguenti:
- dwSize. Questo campo contiene il valore di sizeof(PEER_RECORD).
- ftExpiration. Questo campo contiene la data e l'ora di scadenza del record, espressa in tempo peer come struttura FILETIME .
- tipo. Questo campo contiene un valore GUID che identifica il tipo di record all'applicazione. Se questo tipo è personalizzato per l'infrastruttura dell'applicazione, è necessario popolare anche il campo dati .
I campi seguenti vengono popolati dall'infrastruttura e verranno ignorati se impostati dall'applicazione:
- id
- pwzCreatorId
- pwzLastModifiedById
- ftCreation
- ftLastModified
- securityData
Gli altri campi sono facoltativi. Per aggiungere questo nuovo record al gruppo peer, passarlo a PeerGroupAddRecord.
Importazione ed esportazione di record
I record del gruppo peer-to-peer vengono mantenuti localmente come database. Per salvare uno snapshot corrente del database di record del gruppo peer in un file locale, chiamare PeerGroupExportDatabase e passarlo al gruppo peer. Questo file può quindi essere trasportato in un computer o un'applicazione diverso, che può estrarre e usare questo database di record chiamando PeerGroupImportDatabase.