|
|
|
@ -376,7 +376,7 @@ nThen(function (w) {
|
|
|
|
|
alice.anonRpc.send('GET_METADATA', oscar.mailboxChannel, w(function (err, response) {
|
|
|
|
|
if (!response) { throw new Error("EXPECTED RESPONSE"); }
|
|
|
|
|
var metadata = response[0];
|
|
|
|
|
var expected_fields = ['restricted', 'allowed'];
|
|
|
|
|
var expected_fields = ['restricted', 'allowed', 'rejected'];
|
|
|
|
|
for (var key in metadata) {
|
|
|
|
|
if (expected_fields.indexOf(key) === -1) {
|
|
|
|
|
console.log(metadata);
|
|
|
|
@ -655,7 +655,7 @@ nThen(function (w) {
|
|
|
|
|
console.error("checkpoint by member failed as expected");
|
|
|
|
|
}));
|
|
|
|
|
}).nThen(function (w) {
|
|
|
|
|
console.log("STATE =", JSON.stringify(oscar.roster.getState(), null, 2));
|
|
|
|
|
//console.log("STATE =", JSON.stringify(oscar.roster.getState(), null, 2));
|
|
|
|
|
|
|
|
|
|
// oscar describes the team
|
|
|
|
|
oscar.roster.metadata({
|
|
|
|
@ -663,7 +663,7 @@ nThen(function (w) {
|
|
|
|
|
topic: "pewpewpew",
|
|
|
|
|
}, w(function (err) {
|
|
|
|
|
if (err) { return void console.log(err); }
|
|
|
|
|
console.log("STATE =", JSON.stringify(oscar.roster.getState(), null, 2));
|
|
|
|
|
//console.log("STATE =", JSON.stringify(oscar.roster.getState(), null, 2));
|
|
|
|
|
}));
|
|
|
|
|
}).nThen(function (w) {
|
|
|
|
|
// oscar sends a checkpoint
|
|
|
|
@ -718,10 +718,12 @@ nThen(function (w) {
|
|
|
|
|
}));
|
|
|
|
|
}).nThen(function (w) {
|
|
|
|
|
oscar.roster.checkpoint(w(function (err) {
|
|
|
|
|
var hash = oscar.lastRosterCheckpointHash = oscar.roster.getLastCheckpointHash(); // FIXME bob should connect to this to avoid extra messages
|
|
|
|
|
if (!err) { return; }
|
|
|
|
|
console.error("Checkpoint by an owner failed unexpectedly");
|
|
|
|
|
console.error(err);
|
|
|
|
|
process.exit(1);
|
|
|
|
|
|
|
|
|
|
}));
|
|
|
|
|
}).nThen(function (w) {
|
|
|
|
|
alice.roster.remove([
|
|
|
|
@ -742,21 +744,21 @@ nThen(function (w) {
|
|
|
|
|
channel: rosterKeys.channel,
|
|
|
|
|
keys: rosterKeys,
|
|
|
|
|
anon_rpc: bob.anonRpc,
|
|
|
|
|
lastKnownHash: oscar.lastKnownHash,
|
|
|
|
|
//lastKnownHash: oscar.lastRosterCheckpointHash
|
|
|
|
|
//lastKnownHash: oscar.lastKnownHash, // FIXME this doesn't work. off-by-one?
|
|
|
|
|
}, w(function (err, roster) {
|
|
|
|
|
if (err) {
|
|
|
|
|
w.abort();
|
|
|
|
|
return void console.trace(err);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bob.roster = roster;
|
|
|
|
|
if (JSON.stringify(bob.roster.getState()) !== JSON.stringify(oscar.roster.getState())) {
|
|
|
|
|
console.log("BOB AND OSCAR DO NOT HAVE THE SAME STATE");
|
|
|
|
|
//console.log("BOB AND OSCAR DO NOT HAVE THE SAME STATE");
|
|
|
|
|
console.log("BOB =", JSON.stringify(bob.roster.getState(), null, 2));
|
|
|
|
|
console.log("OSCAR =", JSON.stringify(oscar.roster.getState(), null, 2));
|
|
|
|
|
throw new Error("BOB AND OSCAR DO NOT HAVE THE SAME STATE");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bob.destroy.reg(function () {
|
|
|
|
|
roster.stop();
|
|
|
|
|
});
|
|
|
|
@ -803,8 +805,8 @@ nThen(function (w) {
|
|
|
|
|
|
|
|
|
|
bob.roster.describe(data, w(function (err) {
|
|
|
|
|
if (err) {
|
|
|
|
|
console.error("self-description by a member failed unexpectedly");
|
|
|
|
|
process.exit(1);
|
|
|
|
|
console.error(err);
|
|
|
|
|
throw new Error("self-description by a member failed unexpectedly");
|
|
|
|
|
}
|
|
|
|
|
}));
|
|
|
|
|
}).nThen(function (w) {
|
|
|
|
|