CDS
view release on metacpan or search on metacpan
$o->{localRoot} = $o->{localDocument}->root;
$o->{publicDataSelector} = $o->{groupRoot}->child('public data');
$o->{actorGroupSelector} = $o->{groupRoot}->child('actor group');
$o->{actorSelector} = $o->{actorGroupSelector}->child(substr($keyPair->publicKey->hash->bytes, 0, 16));
$o->{entrustedActorsSelector} = $o->{groupRoot}->child('entrusted actors');
# Message reader
my $pool = CDS::MessageBoxReaderPool->new($keyPair, $publicKeyCache, $o);
$o->{messageBoxReader} = CDS::MessageBoxReader->new($pool, CDS::ActorOnStore->new($keyPair->publicKey, $messagingStore), CDS->HOUR);
# Active actor group members and entrusted keys
$o->{cachedGroupDataMembers} = {};
$o->{cachedEntrustedKeys} = {};
return $o;
}
sub keyPair { shift->{keyPair} }
sub storageStore { shift->{storageStore} }
sub messagingStore { shift->{messagingStore} }
sub messagingStoreUrl { shift->{messagingStoreUrl} }
sub storagePrivateRoot { shift->{storagePrivateRoot} }
sub groupDocument { shift->{groupDocument} }
sub localDocument { shift->{localDocument} }
sub messagingPrivateRoot { shift->{messagingPrivateRoot} }
sub sentList { shift->{sentList} }
sub sentListReady { shift->{sentListReady} }
sub groupDataSharer { shift->{groupDataSharer} }
sub groupRoot { shift->{groupRoot} }
sub localRoot { shift->{localRoot} }
sub publicDataSelector { shift->{publicDataSelector} }
sub actorGroupSelector { shift->{actorGroupSelector} }
sub actorSelector { shift->{actorSelector} }
sub entrustedActorsSelector { shift->{entrustedActorsSelector} }
### Our own actor ###
sub isMe {
my $o = shift;
my $actorHash = shift; die 'wrong type '.ref($actorHash).' for $actorHash' if defined $actorHash && ref $actorHash ne 'CDS::Hash';
return $o->{keyPair}->publicKey->hash->equals($actorHash);
}
sub setName {
my $o = shift;
my $name = shift;
$o->{actorSelector}->child('name')->set($name);
}
sub getName {
my $o = shift;
return $o->{actorSelector}->child('name')->textValue;
}
sub updateMyRegistration {
my $o = shift;
$o->{actorSelector}->addObject($o->{keyPair}->publicKey->hash, $o->{keyPair}->publicKey->object);
my $record = CDS::Record->new;
$record->add('hash')->addHash($o->{keyPair}->publicKey->hash);
$record->add('store')->addText($o->{messagingStoreUrl});
$o->{actorSelector}->set($record);
}
sub setMyActiveFlag {
my $o = shift;
my $flag = shift;
$o->{actorSelector}->child('active')->setBoolean($flag);
}
sub setMyGroupDataFlag {
my $o = shift;
my $flag = shift;
$o->{actorSelector}->child('group data')->setBoolean($flag);
}
### Actor group
sub groupMemberSelector {
my $o = shift;
my $actorHash = shift; die 'wrong type '.ref($actorHash).' for $actorHash' if defined $actorHash && ref $actorHash ne 'CDS::Hash';
return $o->{actorGroupSelector}->child(substr($actorHash->bytes, 0, 16));
}
sub isGroupMember {
my $o = shift;
my $actorHash = shift; die 'wrong type '.ref($actorHash).' for $actorHash' if defined $actorHash && ref $actorHash ne 'CDS::Hash';
return 1 if $actorHash->equals($o->{keyPair}->publicKey->hash);
my $memberSelector = $o->groupMemberSelector($actorHash) // return;
return 0 if $memberSelector->child('revoked')->isSet;
my $record = $memberSelector->record;
return $actorHash->equals($record->child('hash')->hashValue);
}
sub forgetOldIdleActors {
my $o = shift;
my $limit = shift;
for my $child ($o->{actorGroupSelector}->children) {
next if $child->child('active')->booleanValue;
next if $child->child('group data')->booleanValue;
next if $child->revision > $limit;
$child->forgetBranch;
}
}
sub setGroupMember {
my $o = shift;
my $publicKey = shift; die 'wrong type '.ref($publicKey).' for $publicKey' if defined $publicKey && ref $publicKey ne 'CDS::PublicKey';
my $storeUrl = shift;
my $active = shift;
( run in 1.058 second using v1.01-cache-2.11-cpan-13bb782fe5a )