This commit is contained in:
Pavel Murygin 2022-02-24 19:17:01 +03:00
parent 2d47bfa507
commit 1152eaf8f2
6 changed files with 24 additions and 243 deletions

2
.gitignore vendored
View File

@ -22,3 +22,5 @@ jspm_packages/
public/*.wasm
public/runnerScript.web.js
src/_aqua

View File

@ -1,3 +1,3 @@
module Export
import createMyRoute, DiscoveryService from "hello-registry.aqua"
export createMyRoute, DiscoveryService
import createMyRoute, DiscoveryService, discoverAndNotify from "hello-registry.aqua"
export createMyRoute, DiscoveryService, discoverAndNotify

View File

@ -1,4 +1,4 @@
module HelloRegistry declares createMyRoute, DiscoveryService
module HelloRegistry declares createMyRoute, DiscoveryService, discoverAndNotify
import "@fluencelabs/registry/routing.aqua"
import "@fluencelabs/aqua-lib/builtin.aqua"

View File

@ -6,16 +6,17 @@
</head>
<body>
<div id="app" class="hidden">
<h1></h1>
<div>your peer id: <span id="peerid"></span></div>
<div>
<label>your name</label>
<input type="text" id="name" value="my name" />
</div>
<div>
<button id="start">start room</button>
<div id="ref-route-id-wrapper" class="hidden">
reference route id: <span id="ref-route-id">route id here</span>
</div>
<div>
<button id="join" class="hidden">join room</button>
<button id="go">go!</button>
</div>
<div id="join-link-wrapper" class="hidden">
<div>Join link: <span id="join-link"></span></div>
@ -23,7 +24,7 @@
</div>
<div id="user-list-wrapper" class="hidden">
<span>users in room</span>
<h1>users in room</h1>
<ul id="user-list"></ul>
</div>
</div>

View File

@ -1,204 +0,0 @@
/**
*
* This file is auto-generated. Do not edit manually: changes may be erased.
* Generated by Aqua compiler: https://github.com/fluencelabs/aqua/.
* If you find any bugs, please write an issue on GitHub: https://github.com/fluencelabs/aqua/issues
* Aqua version: 0.6.1-279
*
*/
import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import {
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
// Services
export interface DiscoveryServiceDef {
notify_discovered: (route_id: string, userName: string, callParams: CallParams<'route_id' | 'userName'>) => { route: string; userName: string; }[] | Promise<{ route: string; userName: string; }[]>;
}
export function registerDiscoveryService(service: DiscoveryServiceDef): void;
export function registerDiscoveryService(serviceId: string, service: DiscoveryServiceDef): void;
export function registerDiscoveryService(peer: FluencePeer, service: DiscoveryServiceDef): void;
export function registerDiscoveryService(peer: FluencePeer, serviceId: string, service: DiscoveryServiceDef): void;
export function registerDiscoveryService(...args: any) {
registerService(
args,
{
"defaultServiceId" : "discoveryService",
"functions" : [
{
"functionName" : "notify_discovered",
"argDefs" : [
{
"name" : "route_id",
"argType" : {
"tag" : "primitive"
}
},
{
"name" : "userName",
"argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "primitive"
}
}
]
}
);
}
// Functions
export function createMyRoute(
label: string,
userName: string,
config?: {ttl?: number}
): Promise<string>;
export function createMyRoute(
peer: FluencePeer,
label: string,
userName: string,
config?: {ttl?: number}
): Promise<string>;
export function createMyRoute(...args: any) {
let script = `
(xor
(seq
(seq
(seq
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(call %init_peer_id% ("getDataSrv" "label") [] label)
)
(call %init_peer_id% ("getDataSrv" "userName") [] userName)
)
(new $relay
(seq
(seq
(seq
(seq
(seq
(seq
(seq
(ap -relay- $relay)
(call %init_peer_id% ("peer" "timestamp_sec") [] t)
)
(xor
(call -relay- ("registry" "get_key_bytes") [label [] t [] ""] bytes)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
)
)
(call %init_peer_id% ("sig" "sign") [bytes] signature)
)
(xor
(call -relay- ("registry" "get_key_id") [label %init_peer_id%] route_id)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
)
(xor
(call -relay- ("registry" "get_record_bytes") [route_id userName $relay [] t []] bytes-0)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
)
(call %init_peer_id% ("sig" "sign") [bytes-0] signature-0)
)
(xor
(seq
(seq
(call -relay- ("op" "string_to_b58") [route_id] k)
(call -relay- ("kad" "neighborhood") [k [] []] nodes)
)
(par
(fold nodes n
(par
(xor
(xor
(seq
(seq
(seq
(seq
(seq
(call n ("peer" "timestamp_sec") [] t-0)
(call n ("trust-graph" "get_weight") [%init_peer_id% t-0] weight)
)
(call n ("registry" "register_key") [label [] t [] "" signature.$.signature! false weight t-0] result)
)
(call n ("peer" "timestamp_sec") [] t-1)
)
(call n ("trust-graph" "get_weight") [%init_peer_id% t-1] weight-0)
)
(call n ("registry" "put_record") [route_id userName $relay [] t [] signature-0.$.signature! weight-0 t-1] result-0)
)
(null)
)
(seq
(call -relay- ("op" "noop") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
)
)
(next n)
)
)
(null)
)
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 5])
)
)
)
)
(xor
(call %init_peer_id% ("callbackSrv" "response") [route_id])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 6])
)
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 7])
)
`
return callFunction(
args,
{
"functionName" : "createMyRoute",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
{
"name" : "label",
"argType" : {
"tag" : "primitive"
}
},
{
"name" : "userName",
"argType" : {
"tag" : "primitive"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
}

View File

@ -1,11 +1,11 @@
import './index.css';
import { Fluence } from '@fluencelabs/fluence';
import { CallParams, Fluence } from '@fluencelabs/fluence';
import { krasnodar } from '@fluencelabs/fluence-network-environment';
import avmRunner from './avmRunner';
import { createQrCode, disable, getValue, hide, onClick, setText, show } from './util';
import { createMyRoute, registerDiscoveryService, DiscoveryServiceDef } from './_aqua/export';
import { createMyRoute, discoverAndNotify, registerDiscoveryService, DiscoveryServiceDef } from './_aqua/export';
const label = 'registry-demo';
@ -14,12 +14,16 @@ interface DiscoveredUser {
route: string;
userName: string;
}
class DiscoveryService implements DiscoveryServiceDef {
private _discoveredUsers: DiscoveredUser[] = [];
notify_discovered(user: DiscoveredUser): DiscoveredUser[] {
if (this._discoveredUsers.every((x) => x.route !== user.route)) {
this._discoveredUsers.push(user);
notify_discovered(route_id: string, userName: string): DiscoveredUser[] {
if (this._discoveredUsers.every((x) => x.route !== route_id)) {
this._discoveredUsers.push({
userName: userName,
route: route_id,
});
if (this.onUpdated) {
this.onUpdated(this._discoveredUsers);
@ -46,9 +50,9 @@ discoveryServiceInstance.onUpdated = async (users) => {
const promises = users.map(async (x) => {
const html =
// force new line
`<div>
<div>${x.userName}</div>
<canvas id="${x.route}" />
`<div class="user">
<div class="user__name">${x.userName}</div>
<canvas class="user__canvas" id="${x.route}" />
</div>`;
const li = document.createElement('li');
li.innerHTML = html;
@ -87,8 +91,8 @@ async function main() {
show('app');
}
onClick('start', async () => {
disable('start');
onClick('go', async () => {
disable('go');
const myName = getValue('name');
const createdRoute = await createMyRoute(label, myName);
selfDiscoveryRouteId = createdRoute;
@ -120,25 +124,3 @@ onClick('start', async () => {
function link(id: string): string {
return window.location.origin + '?join=' + id;
}
onClick('join', async () => {
const myName = getValue('name');
// const res = await joinRoom(roomPeerId, label);
// if(res is not fine)
// throw
show('room-list-wrapper');
});
// async function loadMemberList() {
// const members = await getMembers(roomPeerId, label);
// const liElems = members.map((x) => {
// const el = document.createElement('li');
// el.textContent = x;
// return el;
// });
// const roomElem = document.getElementById('room-list');
// roomElem?.replaceChildren(...liElems);
// }
main();