Peer discovery somewhat works. Still WIP

This commit is contained in:
Pavel Murygin 2020-12-28 01:12:28 +03:00
parent 4f4f7ebea7
commit 09c34a1774
4 changed files with 46 additions and 148 deletions

View File

@ -14,20 +14,23 @@ function App() {
const service = new FluentPadService(fluenceClient, nickName); const service = new FluentPadService(fluenceClient, nickName);
service.on('disconnected', (peer: FluentPadClientPeer) => { service.on('disconnected', (peer: FluentPadClientPeer) => {
setPeers((prev) => { setPeers((prev) => {
prev.delete(peer.peerId); const res = new Map(prev.entries());
return prev; res.delete(peer.peerId);
return res;
}); });
}); });
service.on('newConnected', (peer: FluentPadClientPeer) => { service.on('newConnected', (peer: FluentPadClientPeer) => {
setPeers((prev) => { setPeers((prev) => {
prev.set(peer.peerId, peer.nickname); const res = new Map(prev.entries());
return prev; res.set(peer.peerId, peer.nickname);
return res;
}); });
}); });
service.on('nameChanged', (peerId: string, newName: string) => { service.on('nameChanged', (peerId: string, newName: string) => {
setPeers((prev) => { setPeers((prev) => {
prev.set(peerId, newName); const res = new Map(prev.entries());
return prev; res.set(peerId, newName);
return res;
}); });
}); });
setService(service); setService(service);

View File

@ -56,7 +56,7 @@ export class FluentPadService extends ServiceMultiple {
async connect(): Promise<void> { async connect(): Promise<void> {
this.registerService(); this.registerService();
await calls.registerAsFluentPadUser(); await calls.registerAsFluentPadUser();
//await calls.discoverPeers(); await calls.discoverPeers();
} }
async disconnect(): Promise<void> { async disconnect(): Promise<void> {
@ -129,7 +129,6 @@ export class FluentPadService extends ServiceMultiple {
const peers = args[0] as { const peers = args[0] as {
knownPeers: FluentPadClientPeer[]; knownPeers: FluentPadClientPeer[];
}; };
console.log(args);
setImmediate(this.reconcilePeers.bind(this), peers.knownPeers); setImmediate(this.reconcilePeers.bind(this), peers.knownPeers);
return {}; return {};
} }

View File

@ -22,165 +22,61 @@ export const registerAsFluentPadUser = async () => {
const data = new Map(); const data = new Map();
data.set('myRelay', myRelay); data.set('myRelay', myRelay);
data.set('value', { peer: myPeerId }); data.set('value', { peer: myPeerId, service_id: myRelay });
data.set('key', fluentPadProviderKey); data.set('key', fluentPadProviderKey);
let particle = await build(fluenceClient.selfPeerId, script, data); let particle = await build(fluenceClient.selfPeerId, script, data);
await fluenceClient.executeParticle(particle); await fluenceClient.executeParticle(particle);
}; };
export const debugDiscoverPeers = async () => {
const myPeerId = fluenceClient.selfPeerIdStr;
const myRelay = fluenceClient.connection.nodePeerId.toB58String();
//const myRelay = relay.peerId;
let script = `
(seq
(call myRelay ("dht" "neighborhood") [myRelay] neighbors)
(fold neighbors n
(par
(seq
(call n ("dht" "get_providers") [key] providers)
(seq
(call myRelay ("op" "identiy") [])
(call %init_peer_id% ("debug" "notifyDiscovered") [providers])
)
)
(next n)
)
)
)
`;
script = `
(seq
(call myRelay ("dht" "neighborhood") [myRelay] neighbors)
(fold neighbors n
(seq
(seq
(call n ("op" "identity") [] x)
(seq
(call myRelay ("op" "identity") [])
(call %init_peer_id% ("debug" "notifyDiscovered") [key])
)
)
(next n)
)
)
)
`;
script = `
(seq
(call myRelay ("dht" "neighborhood") [myRelay] neighbors)
(par
(fold neighbors n
(par
(seq
(call n ("dht" "get_providers") [key] result)
(seq
(call myRelay ("op" "identity") [])
(call %init_peer_id% ("debug" "notifyDiscovered") [result])
)
)
(next n)
)
)
(seq
(call myRelay ("dht" "get_providers") [key] result)
(call %init_peer_id% ("debug" "notifyDiscovered") [result])
)
)
)
`;
// script = `
// (seq
// (seq
// (call myRelay ("dht" "neighborhood") [myRelay] neighbors)
// (fold neighbors n
// (seq
// (call n ("dht" "get_providers") [key] result[])
// (next n)
// )
// )
// )
// (call %init_peer_id% ("debug" "notifyDiscovered") [result])
// )
// `;
// script = `
// (seq
// (seq
// (call myRelay ("dht" "neighborhood") [myRelay] neighbors)
// (fold neighbors n
// (seq
// (call n ("op" "identity") [])
// (next n)
// )
// )
// )
// (call %init_peer_id% ("debug" "notifyDiscovered") [key])
// )
// `;
// script = `
// (seq
// (call myRelay ("dht" "neighborhood") [myRelay] result)
// (call %init_peer_id% ("debug" "notifyDiscovered") [result])
// )`;
// script = `
// (seq
// (call myRelay ("dht" "get_providers") [key] result)
// (call %init_peer_id% ("debug" "notifyDiscovered") [result])
// )`;
const data = new Map();
data.set('key', fluentPadProviderKey);
data.set('myPeerID', myPeerId);
data.set('myRelay', myRelay);
let particle = await build(fluenceClient.selfPeerId, script, data);
await fluenceClient.executeParticle(particle);
};
(window as any).debugDiscoverPeers = debugDiscoverPeers;
export const discoverPeers = async () => { export const discoverPeers = async () => {
const myPeerId = fluenceClient.selfPeerId.toB58String(); const myPeerId = fluenceClient.selfPeerIdStr;
const myRelay = fluenceClient.connection.nodePeerId.toB58String(); const myRelay = fluenceClient.connection.nodePeerId.toB58String();
let script = ` let discoveryProcedure = (name, binding) => `(fold ${name} ${binding}
(par
(seq (seq
(call ${binding}.$.service_id ("op" "identity") [])
(seq (seq
(call myRelay ("dht" "neighborhood") [key] neighbors) (call ${binding}.$.peer (serviceId "discover") [] discovery_result)
(fold neighbors n
(seq (seq
(call n ("dht" "get_providers") [key] providers) (call ${binding}.$.service_id ("op" "identity") [])
(next n)
)
)
)
(fold providers p
(seq (seq
(seq (call myRelay ("op" "identity") [])
(call p.$.peer (serviceId "discover") [] discovery_result)
(seq
(call myRelay ("op" "identiy") [])
(call %init_peer_id% (serviceId "notifyDiscovered") [discovery_result]) (call %init_peer_id% (serviceId "notifyDiscovered") [discovery_result])
) )
) )
(next p)
) )
) )
(next ${binding})
)
)`; )`;
let script = `
(seq
(call myRelay ("dht" "get_providers") [key] providers)
(seq
${discoveryProcedure('providers', 'p')}
(seq
(call myRelay ("dht" "neighborhood") [myRelay] neighbors)
(fold neighbors n
(par
(seq
(call n ("dht" "get_providers") [key] providers1)
${discoveryProcedure('providers1', 'p1')}
)
(next n)
)
)
)
)
)`;
const data = new Map(); const data = new Map();
data.set('serviceId', fluentPadServiceId); data.set('serviceId', fluentPadServiceId);
data.set('myRelay', myRelay);
data.set('myPeerId', myPeerId);
data.set('key', fluentPadProviderKey); data.set('key', fluentPadProviderKey);
data.set('myPeerID', myPeerId);
data.set('myRelay', myRelay);
let particle = await build(fluenceClient.selfPeerId, script, data); let particle = await build(fluenceClient.selfPeerId, script, data);
await fluenceClient.executeParticle(particle); await fluenceClient.executeParticle(particle);

View File

@ -1,2 +1,2 @@
export const fluentPadServiceId = 'fluence/fluent-pad'; export const fluentPadServiceId = 'fluence/fluent-pad';
export const fluentPadProviderKey = 'fluence/fluent-pad-user'; export const fluentPadProviderKey = 'fluence/fluent-pad-user/v3';