some cleanup

This commit is contained in:
2020-01-19 21:20:16 +01:00
parent daf9ccc133
commit cbefba6625
3 changed files with 63 additions and 20 deletions
+1 -6
View File
@@ -149,19 +149,14 @@ export class RPCSocket implements I.Socket{
const argParams = fnArgs.map(stripAfterEquals).join(",") const argParams = fnArgs.map(stripAfterEquals).join(",")
if(!sesame){ if(!sesame){
const headerArgs = fnArgs.join(",") return eval( `( () => async (`+headerArgs+(headerArgs.length!==0?",":"")+` callback) => {
const argParams = fnArgs.map(stripAfterEquals).join(",")
const f = eval( `( () => async (`+headerArgs+(headerArgs.length!==0?",":"")+` callback) => {
const r = await this.socket.call("`+fnName+`", `+argParams+`) const r = await this.socket.call("`+fnName+`", `+argParams+`)
if(r && r.result === 'Success'){ if(r && r.result === 'Success'){
this.socket.hook(r.uuid, callback) this.socket.hook(r.uuid, callback)
} }
return r return r
} )()` ) } )()` )
return f
}else{ }else{
return eval( `( () => async (`+headerArgs+(headerArgs.length!==0?",":"")+` callback) => { return eval( `( () => async (`+headerArgs+(headerArgs.length!==0?",":"")+` callback) => {
const r = await this.socket.call("`+fnName+`", "`+sesame+`", `+argParams+`) const r = await this.socket.call("`+fnName+`", "`+sesame+`", `+argParams+`)
if(r && r.result === 'Success'){ if(r && r.result === 'Success'){
+1 -1
View File
@@ -20,7 +20,7 @@ export const rpcToRpcinfo = <SubResT = {}>(rpc : T.RPC<any, any, SubResT>, owner
argNames: extractArgs(rpc['call']), argNames: extractArgs(rpc['call']),
type: "Call", type: "Call",
name: rpc.name, name: rpc.name,
call: sesame?async (_sesame, ...args) => {if(sesame(_sesame)) return await rpc['call'].apply({}, args)}:rpc['call'], // check & remove sesame call: sesame?async (_sesame, ...args) => {if(sesame(_sesame)) return await rpc['call'].apply({}, args); throw new Error('Bad sesame')}:rpc['call'], // check & remove sesame
} }
}else{ }else{
const generator = hookGenerator(<T.HookRPC<any, any, any>>rpc, sesame) const generator = hookGenerator(<T.HookRPC<any, any, any>>rpc, sesame)
+61 -13
View File
@@ -6,7 +6,7 @@ import * as uuidv4 from "uuid/v4"
const add = (...args:number[]) => {return args.reduce((a,b)=>a+b, 0)} const add = (...args:number[]) => {return args.reduce((a,b)=>a+b, 0)}
function makeServer(){ function makeServer(){
let subcallback let subcallback
return new RPCServer<{ topic: string }>(20000, [{ return new RPCServer<{ topic: string }>(21000, [{
name: "test", name: "test",
exportRPCs: () => [ exportRPCs: () => [
{ {
@@ -59,26 +59,26 @@ describe('RPCServer', () => {
const echo = (x) => x const echo = (x) => x
const server = new RPCServer(20003, [{ const server = new RPCServer(21003, [{
name: 'HelloWorldRPCGroup', name: 'HelloWorldRPCGroup',
exportRPCs: () => [ exportRPCs: () => [
echo, //named function variable echo, //named function variable
function echof(x){ return x }, //named function function echof(x){ return x }, //named function
{ {
name: 'echoExplicit', //describing object name: 'echoExplicit', //describing object
call: async (x) => x call: async (x,y,z) => [x,y,z]
} }
] ]
}]) }])
const client = new RPCSocket(20003, 'localhost') const client = new RPCSocket(21003, 'localhost')
client.connect().then(async () => { client.connect().then(async () => {
const r0 = await client['HelloWorldRPCGroup'].echo('Hello') const r0 = await client['HelloWorldRPCGroup'].echo('Hello')
const r1 = await client['HelloWorldRPCGroup'].echof('World') const r1 = await client['HelloWorldRPCGroup'].echof('World')
const r2 = await client['HelloWorldRPCGroup'].echoExplicit('RPC!') const r2 = await client['HelloWorldRPCGroup'].echoExplicit('R','P','C!')
if(r0 === 'Hello' && r1 === 'World' && r2 ==='RPC!'){ if(r0 === 'Hello' && r1 === 'World' && r2.join('') ==='RPC!'){
client.destroy() client.destroy()
server.destroy() server.destroy()
done() done()
@@ -108,7 +108,7 @@ describe('RPCSocket', () => {
before(async() => { before(async() => {
server = makeServer() server = makeServer()
client = new RPCSocket(20000, "localhost") client = new RPCSocket(21000, "localhost")
return await client.connect() return await client.connect()
}) })
@@ -177,7 +177,7 @@ describe('It should do unhook', () => {
let server: RPCServer<{topic: string}> let server: RPCServer<{topic: string}>
before(async() => { before(async() => {
server = new RPCServer<{ topic: string }>(20000, [{ server = new RPCServer<{ topic: string }>(21000, [{
name: "test", name: "test",
exportRPCs: () => [{ exportRPCs: () => [{
name: 'subscribe', name: 'subscribe',
@@ -198,7 +198,7 @@ describe('It should do unhook', () => {
closeHandler: (socket) => { console.log("closeHandler OK") }, closeHandler: (socket) => { console.log("closeHandler OK") },
errorHandler: (socket, err) => { console.error("errorHandler OK SO YOU SHOULDN'T SEE THIS"); throw err } errorHandler: (socket, err) => { console.error("errorHandler OK SO YOU SHOULDN'T SEE THIS"); throw err }
}) })
client = new RPCSocket(20000, "localhost") client = new RPCSocket(21000, "localhost")
return await client.connect() return await client.connect()
}) })
@@ -240,7 +240,7 @@ describe('Sesame should unlock the socket', () => {
let cb = (...args) => {} let cb = (...args) => {}
before(async() => { before(async() => {
server = new RPCServer(20004, [{ server = new RPCServer(21004, [{
name: "test", name: "test",
exportRPCs: () => [ exportRPCs: () => [
{ {
@@ -255,11 +255,12 @@ describe('Sesame should unlock the socket', () => {
} }
}, },
async function checkCandy():Promise<string> { cb(candy); cb=()=>{}; return candy }, async function checkCandy():Promise<string> { cb(candy); cb=()=>{}; return candy },
async function manyParams(a,b,c,d) {return [a,b,c,d]}
]} ]}
],{ ],{
sesame: (_sesame) => _sesame === 'sesame!' sesame: (_sesame) => _sesame === 'sesame!'
}) })
const sock = new RPCSocket(20004, "localhost") const sock = new RPCSocket(21004, "localhost")
client = await sock.connect<SesameTestIfc>('sesame!') client = await sock.connect<SesameTestIfc>('sesame!')
}) })
@@ -272,8 +273,15 @@ describe('Sesame should unlock the socket', () => {
client.test.checkCandy().then(c => done()) client.test.checkCandy().then(c => done())
}) })
it('should work with multiple params', (done) => {
client.test['manyParams']('a','b','c','d').then(c => {
if(c[0] == 'a' && c[1] === 'b' && c[2] === 'c' && c[3] === 'd')
done()
})
})
it('should not work without sesame', (done) => { it('should not work without sesame', (done) => {
const sock = new RPCSocket(20004, "localhost") const sock = new RPCSocket(21004, "localhost")
sock.connect<SesameTestIfc>( /* no sesame */).then(async (c) => { sock.connect<SesameTestIfc>( /* no sesame */).then(async (c) => {
c.test.checkCandy().then(d => { c.test.checkCandy().then(d => {
if(d === candy) if(d === candy)
@@ -299,7 +307,7 @@ describe('Sesame should unlock the socket', () => {
}) })
it('callback should not work without sesame', (done) => { it('callback should not work without sesame', (done) => {
const sock = new RPCSocket(20004, "localhost") const sock = new RPCSocket(21004, "localhost")
sock.connect<SesameTestIfc>( /* no sesame */).then(async (c) => { sock.connect<SesameTestIfc>( /* no sesame */).then(async (c) => {
c.test.subscribe((c) => { c.test.subscribe((c) => {
console.log("CALLBACK TRIGGERED UNEXPECTED"); console.log("CALLBACK TRIGGERED UNEXPECTED");
@@ -317,3 +325,43 @@ describe('Sesame should unlock the socket', () => {
}) })
}) })
}) })
/*
class myServer{
server = new RPCServer(21004, [ {
name: 'createUser' as 'createUser',
exportRPCs: () => [{
name: 'createUser' as 'createUser',
call: this.createUser
}]
}
])
createUser = async( user: {a:any,b:any}) => {
console.log(user)
return user
}
}
describe('Should pass the createUser edge case', ()=>{
let server
before(()=>{
server = new myServer()
})
after(()=>{
server.server.destroy()
})
it("should work", async ()=>{
let sock = new RPCSocket(21004, 'localhost')
let client = await sock.connect()
client["createUser"]["createUser"]({
a:'a',
b:'b'
}).then(console.log)
})
})
*/