'sender' field in FunctionCall (#908)

This commit is contained in:
Dima
2020-06-12 19:54:09 +03:00
committed by GitHub
parent 145b4232f6
commit 55db70d96f
5 changed files with 33 additions and 25 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "fluence", "name": "fluence",
"version": "0.5.4", "version": "0.5.5",
"description": "the browser js-libp2p client for the Fluence network", "description": "the browser js-libp2p client for the Fluence network",
"main": "./dist/fluence.js", "main": "./dist/fluence.js",
"typings": "./dist/fluence.d.ts", "typings": "./dist/fluence.d.ts",

View File

@ -41,8 +41,8 @@ export class FluenceClient {
/** /**
* Makes call with response from function. Without reply_to field. * Makes call with response from function. Without reply_to field.
*/ */
private static responseCall(target: Address, args: any): FunctionCall { private responseCall(target: Address, args: any): FunctionCall {
return makeFunctionCall(genUUID(), target, args, undefined, "response"); return makeFunctionCall(genUUID(), target, this.connection.sender, args, undefined, "response");
} }
/** /**
@ -155,14 +155,14 @@ export class FluenceClient {
// if the request hasn't been applied, there is no such service. Return an error. // if the request hasn't been applied, there is no such service. Return an error.
if (!applied) { if (!applied) {
console.log(`there is no service ${lastProtocol.value}`); console.log(`there is no service ${lastProtocol.value}`);
return FluenceClient.responseCall(call.reply_to, { return this.responseCall(call.reply_to, {
reason: `there is no such service`, reason: `there is no such service`,
msg: call msg: call
}); });
} }
} catch (e) { } catch (e) {
// if service throw an error, return it to the sender // if service throw an error, return it to the sender
return FluenceClient.responseCall(call.reply_to, { return this.responseCall(call.reply_to, {
reason: `error on execution: ${e}`, reason: `error on execution: ${e}`,
msg: call msg: call
}); });
@ -174,7 +174,7 @@ export class FluenceClient {
console.log(`relay call: ${call}`); console.log(`relay call: ${call}`);
} else { } else {
console.warn(`this relay call is not for me: ${callToString(call)}`); console.warn(`this relay call is not for me: ${callToString(call)}`);
return FluenceClient.responseCall(call.reply_to, { return this.responseCall(call.reply_to, {
reason: `this relay call is not for me`, reason: `this relay call is not for me`,
msg: call msg: call
}); });
@ -185,7 +185,7 @@ export class FluenceClient {
console.log(`peer call: ${call}`); console.log(`peer call: ${call}`);
} else { } else {
console.warn(`this peer call is not for me: ${callToString(call)}`); console.warn(`this peer call is not for me: ${callToString(call)}`);
return FluenceClient.responseCall(call.reply_to, { return this.responseCall(call.reply_to, {
reason: `this relay call is not for me`, reason: `this relay call is not for me`,
msg: call msg: call
}); });

View File

@ -47,7 +47,7 @@ enum Status {
export class FluenceConnection { export class FluenceConnection {
private readonly selfPeerInfo: PeerInfo; private readonly selfPeerInfo: PeerInfo;
readonly replyToAddress: Address; readonly sender: Address;
private node: LibP2p; private node: LibP2p;
private readonly address: Multiaddr; private readonly address: Multiaddr;
private readonly nodePeerId: PeerId; private readonly nodePeerId: PeerId;
@ -60,7 +60,7 @@ export class FluenceConnection {
this.selfPeerId = selfPeerInfo.id.toB58String(); this.selfPeerId = selfPeerInfo.id.toB58String();
this.address = multiaddr; this.address = multiaddr;
this.nodePeerId = hostPeerId; this.nodePeerId = hostPeerId;
this.replyToAddress = replyToAddress this.sender = replyToAddress
} }
async connect() { async connect() {
@ -90,7 +90,7 @@ export class FluenceConnection {
* Sends remote service_id call. * Sends remote service_id call.
*/ */
async sendServiceCall(serviceId: string, args: any, name?: string) { async sendServiceCall(serviceId: string, args: any, name?: string) {
let regMsg = makeCall(serviceId, args, this.replyToAddress, name); let regMsg = makeCall(serviceId, args, this.sender, this.sender, name);
await this.sendCall(regMsg); await this.sendCall(regMsg);
} }
@ -98,7 +98,7 @@ export class FluenceConnection {
* Sends custom message to the peer. * Sends custom message to the peer.
*/ */
async sendPeerCall(peer: string, msg: any, name?: string) { async sendPeerCall(peer: string, msg: any, name?: string) {
let regMsg = makePeerCall(PeerId.createFromB58String(peer), msg, this.replyToAddress, name); let regMsg = makePeerCall(PeerId.createFromB58String(peer), msg, this.sender, this.sender, name);
await this.sendCall(regMsg); await this.sendCall(regMsg);
} }
@ -106,7 +106,7 @@ export class FluenceConnection {
* Sends custom message to the peer through relay. * Sends custom message to the peer through relay.
*/ */
async sendRelayCall(peer: string, relay: string, msg: any, name?: string) { async sendRelayCall(peer: string, relay: string, msg: any, name?: string) {
let regMsg = await makeRelayCall(PeerId.createFromB58String(peer), PeerId.createFromB58String(relay), msg, this.replyToAddress, name); let regMsg = await makeRelayCall(PeerId.createFromB58String(peer), PeerId.createFromB58String(relay), msg, this.sender, this.sender, name);
await this.sendCall(regMsg); await this.sendCall(regMsg);
} }
@ -184,9 +184,9 @@ export class FluenceConnection {
this.checkConnectedOrThrow(); this.checkConnectedOrThrow();
let replyTo; let replyTo;
if (reply) replyTo = this.replyToAddress; if (reply) replyTo = this.sender;
let call = makeFunctionCall(genUUID(), target, args, replyTo, name); let call = makeFunctionCall(genUUID(), target, args, this.sender, replyTo, name);
await this.sendCall(call); await this.sendCall(call);
} }

View File

@ -26,6 +26,7 @@ export interface FunctionCall {
uuid: string, uuid: string,
target: Address, target: Address,
reply_to?: Address, reply_to?: Address,
sender: Address,
arguments: any, arguments: any,
name?: string, name?: string,
action: "FunctionCall" action: "FunctionCall"
@ -43,12 +44,13 @@ export function callToString(call: FunctionCall) {
return JSON.stringify(obj) return JSON.stringify(obj)
} }
export function makeFunctionCall(uuid: string, target: Address, args: object, replyTo?: Address, name?: string): FunctionCall { export function makeFunctionCall(uuid: string, target: Address, sender: Address, args: object, replyTo?: Address, name?: string): FunctionCall {
return { return {
uuid: uuid, uuid: uuid,
target: target, target: target,
reply_to: replyTo, reply_to: replyTo,
sender: sender,
arguments: args, arguments: args,
name: name, name: name,
action: "FunctionCall" action: "FunctionCall"
@ -64,13 +66,16 @@ export function parseFunctionCall(str: string): FunctionCall {
if (!json.uuid) throw Error(`there is no 'uuid' field in json.\n${str}`); if (!json.uuid) throw Error(`there is no 'uuid' field in json.\n${str}`);
if (!json.target) throw Error(`there is no 'uuid' field in json.\n${str}`); if (!json.target) throw Error(`there is no 'uuid' field in json.\n${str}`);
if (!json.sender) throw Error(`there is no 'sender' field in json.\n${str}`);
let target = parseAddress(json.target); let target = parseAddress(json.target);
let sender = parseAddress(json.sender);
return { return {
uuid: json.uuid, uuid: json.uuid,
target: target, target: target,
reply_to: replyTo, reply_to: replyTo,
sender: sender,
arguments: json.arguments, arguments: json.arguments,
name: json.name, name: json.name,
action: "FunctionCall" action: "FunctionCall"
@ -85,28 +90,28 @@ export function genUUID() {
/** /**
* Message to peer through relay * Message to peer through relay
*/ */
export async function makeRelayCall(client: PeerId, relay: PeerId, msg: any, replyTo?: Address, name?: string): Promise<FunctionCall> { export async function makeRelayCall(client: PeerId, relay: PeerId, msg: any, sender: Address, replyTo?: Address, name?: string): Promise<FunctionCall> {
let relayAddress = await createRelayAddress(relay.toB58String(), client, false); let relayAddress = await createRelayAddress(relay.toB58String(), client, false);
return makeFunctionCall(genUUID(), relayAddress, msg, replyTo, name); return makeFunctionCall(genUUID(), relayAddress, sender, msg, replyTo, name);
} }
/** /**
* Message to peer * Message to peer
*/ */
export function makePeerCall(client: PeerId, msg: any, replyTo?: Address, name?: string): FunctionCall { export function makePeerCall(client: PeerId, msg: any, sender: Address, replyTo?: Address, name?: string): FunctionCall {
let peerAddress = createPeerAddress(client.toB58String()); let peerAddress = createPeerAddress(client.toB58String());
return makeFunctionCall(genUUID(), peerAddress, msg, replyTo, name); return makeFunctionCall(genUUID(), peerAddress, msg, sender, replyTo, name);
} }
/** /**
* Message to call remote service_id * Message to call remote service_id
*/ */
export function makeCall(functionId: string, args: any, replyTo?: Address, name?: string): FunctionCall { export function makeCall(functionId: string, args: any, sender: Address, replyTo?: Address, name?: string): FunctionCall {
let target = createServiceAddress(functionId); let target = createServiceAddress(functionId);
return makeFunctionCall(genUUID(), target, args, replyTo, name); return makeFunctionCall(genUUID(), target, args, sender, replyTo, name);
} }
/** /**
@ -116,11 +121,12 @@ export async function makeRegisterMessage(serviceId: string, relayPeerId: PeerId
let target = createServiceAddress("provide"); let target = createServiceAddress("provide");
let replyTo = await createRelayAddress(relayPeerId.toB58String(), selfPeerId, true); let replyTo = await createRelayAddress(relayPeerId.toB58String(), selfPeerId, true);
return makeFunctionCall(genUUID(), target, {service_id: serviceId}, replyTo, "provide service_id"); return makeFunctionCall(genUUID(), target, replyTo, {service_id: serviceId}, replyTo, "provide service_id");
} }
export function makeUnregisterMessage(serviceId: string, peerId: PeerId): FunctionCall { // TODO uncomment when this will be implemented in Fluence network
/*export function makeUnregisterMessage(serviceId: string, peerId: PeerId): FunctionCall {
let target = createPeerAddress(peerId.toB58String()); let target = createPeerAddress(peerId.toB58String());
return makeFunctionCall(genUUID(), target, {key: serviceId}, undefined, "unregister"); return makeFunctionCall(genUUID(), target, target, {key: serviceId}, undefined, "unregister");
} }*/

View File

@ -61,6 +61,7 @@ describe("Typescript usage suite", () => {
let functionCall = makeFunctionCall( let functionCall = makeFunctionCall(
"123", "123",
addr2, addr2,
addr2,
{ {
arg1: "123", arg1: "123",
arg2: 3, arg2: 3,
@ -79,6 +80,7 @@ describe("Typescript usage suite", () => {
let functionCallWithOptional = makeFunctionCall( let functionCallWithOptional = makeFunctionCall(
"123", "123",
addr, addr,
addr,
{ {
arg1: "123", arg1: "123",
arg2: 3, arg2: 3,