From be85669fe076c907443e07e5b4af4dcc65b783ba Mon Sep 17 00:00:00 2001 From: joelchu Date: Fri, 20 Mar 2020 16:47:41 +0800 Subject: [PATCH 01/11] update deps again --- packages/ws-server-core/package.json | 2 +- packages/ws-server/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/ws-server-core/package.json b/packages/ws-server-core/package.json index 7f3615a4..0e07f43b 100644 --- a/packages/ws-server-core/package.json +++ b/packages/ws-server-core/package.json @@ -31,7 +31,7 @@ "debug": "^4.1.1", "esm": "^3.2.25", "fs-extra": "^9.0.0", - "jsonql-constants": "^2.0.7", + "jsonql-constants": "^2.0.8", "jsonql-errors": "^1.2.1", "jsonql-jwt": "^1.3.10", "jsonql-params-validator": "^1.6.1", diff --git a/packages/ws-server/package.json b/packages/ws-server/package.json index a0e4f4b5..f7ae3149 100755 --- a/packages/ws-server/package.json +++ b/packages/ws-server/package.json @@ -33,7 +33,7 @@ "dependencies": { "colors": "^1.4.0", "debug": "^4.1.1", - "jsonql-constants": "^2.0.7", + "jsonql-constants": "^2.0.8", "jsonql-utils": "^1.2.4", "jsonql-ws-server-core": "^0.7.10", "ws": "^7.2.3" -- Gitee From c85d73e0d3aeff13eedff40384f3ea4f6405c285 Mon Sep 17 00:00:00 2001 From: joelchu Date: Fri, 20 Mar 2020 16:50:05 +0800 Subject: [PATCH 02/11] just update the console log out to make it easier to know where its coming from --- packages/ws-server/src/core/setup-socket-server.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/ws-server/src/core/setup-socket-server.js b/packages/ws-server/src/core/setup-socket-server.js index 80f5fad9..4045bd5f 100644 --- a/packages/ws-server/src/core/setup-socket-server.js +++ b/packages/ws-server/src/core/setup-socket-server.js @@ -9,7 +9,7 @@ const rdebug = getRainbowDebug('ws-setup') const { createWsServer } = require('./create-ws-server') /** - * This is the core of the communicaton engine + * This is the core of the communicaton engine * and this method get pass back to the ws-server-core to finish the setup * @param {object} opts configuration * @param {object} server the http server instance @@ -22,18 +22,18 @@ function setupSocketServer(opts, server) { nsps[namespace].on('connection', (ws, req) => { let deliverFn = msg => ws.send(msg) let userdata = getUserdata(req) - rdebug(namespace, 'connected') + rdebug(namespace, ' --> connected') // @TODO need to redo here the nspGroup can be empty??? ws.on('message', data => { let payload = parseJson(data) - rdebug(`${namespace} --> message`, payload) + rdebug(`${namespace} --> on.message -->`, payload) // we now wrap everything in one generic method getSocketHandler(opts, ws, deliverFn, req, namespace, payload, userdata) }) }) } - return nsps + return nsps } -- Gitee From 699ace43d658a541d17c3be9adada665b70e9c9e Mon Sep 17 00:00:00 2001 From: joelchu Date: Fri, 20 Mar 2020 17:04:37 +0800 Subject: [PATCH 03/11] breaking up the methods into the appropriate files --- packages/ws-client-core/package.json | 6 +- .../src/callers/generator-methods.js | 88 ++----------------- .../src/callers/global-listener.js | 66 ++++++++++++++ .../src/callers/setup-final-step.js | 13 ++- .../src/callers/setup-resolver.js | 66 ++++++++++---- 5 files changed, 132 insertions(+), 107 deletions(-) create mode 100644 packages/ws-client-core/src/callers/global-listener.js diff --git a/packages/ws-client-core/package.json b/packages/ws-client-core/package.json index 5c873d20..41a06883 100644 --- a/packages/ws-client-core/package.json +++ b/packages/ws-client-core/package.json @@ -56,7 +56,7 @@ }, "dependencies": { "@to1source/event": "^1.0.0", - "jsonql-constants": "^2.0.4", + "jsonql-constants": "^2.0.8", "jsonql-errors": "^1.2.1", "jsonql-params-validator": "^1.6.1", "jsonql-utils": "^1.2.4" @@ -64,8 +64,8 @@ "devDependencies": { "ava": "^3.5.0", "esm": "^3.2.25", - "fs-extra": "^8.1.0", - "jsonql-contract": "^1.8.10", + "fs-extra": "^9.0.0", + "jsonql-contract": "^1.9.1", "jsonql-jwt": "^1.3.10", "jsonql-ws-server": "^1.7.7", "kefir": "^3.8.6", diff --git a/packages/ws-client-core/src/callers/generator-methods.js b/packages/ws-client-core/src/callers/generator-methods.js index 9e8ea5fc..5b29b986 100644 --- a/packages/ws-client-core/src/callers/generator-methods.js +++ b/packages/ws-client-core/src/callers/generator-methods.js @@ -7,38 +7,15 @@ // callable api for the developer to setup their front end // the only thing is - when they call they might get an error or // NOT_LOGIN_IN and they can react to this error accordingly -import { finalCatch } from 'jsonql-errors' -import { validateAsync } from 'jsonql-params-validator' -import { setupResolver } from './setup-resolver' -import { actionCall } from './action-call' + +import { + createResolver, + setupResolver +} from './setup-resolver' import { - createEvt, - objDefineProps, - isFunc, injectToFn } from '../utils' -import { - ON_ERROR_FN_NAME, - ON_READY_FN_NAME -} from 'jsonql-constants' -/** - * create the actual function to send message to server - * @param {object} ee EventEmitter instance - * @param {string} namespace this resolver end point - * @param {string} resolverName name of resolver as event name - * @param {object} params from contract - * @param {function} log pass the log function - * @return {function} resolver - */ -function createResolver(ee, namespace, resolverName, params, log) { - // note we pass the new withResult=true option - return function resolver(...args) { - return validateAsync(args, params.params, true) - .then(_args => actionCall(ee, namespace, resolverName, _args, log)) - .catch(finalCatch) - } -} /** * step one get the clientmap with the namespace @@ -71,58 +48,3 @@ export function generateResolvers(opts, ee, nspGroup) { return [ client, opts, ee, nspGroup ] } -/** - * The problem is the namespace can have more than one - * and we only have on onError message - * @param {object} clientthe client itself - * @param {object} opts configuration - * @param {object} ee Event Emitter - * @param {object} nspGroup namespace keys - * @return {array} [obj, opts, ee] - */ -export function setupNamespaceErrorListener(client, opts, ee, nspGroup) { - return [ - objDefineProps( - client, - ON_ERROR_FN_NAME, - function namespaceErrorCallbackHandler(namespaceErrorHandler) { - if (isFunc(namespaceErrorHandler)) { - // please note ON_ERROR_FN_NAME can add multiple listners - for (let namespace in nspGroup) { - // this one is very tricky, we need to make sure the trigger is calling - // with the namespace as well as the error - ee.$on(createEvt(namespace, ON_ERROR_FN_NAME), namespaceErrorHandler) - } - } - } - ), - opts, - ee - ] -} - -/** - * This event will fire when the socket.io.on('connection') and ws.onopen - * @param {object} client client itself - * @param {object} opts configuration - * @param {object} ee Event Emitter - * @return {array} [ obj, opts, ee ] - */ -export function setupOnReadyListener(client, opts, ee) { - return [ - objDefineProps( - client, - ON_READY_FN_NAME, - function onReadyCallbackHandler(onReadyCallback) { - if (isFunc(onReadyCallback)) { - // reduce it down to just one flat level - // @2020-03-19 only allow ONE onReady callback otherwise - // it will get fire multiple times which is not what we want - ee.$only(ON_READY_FN_NAME, onReadyCallback) - } - } - ), - opts, - ee - ] -} diff --git a/packages/ws-client-core/src/callers/global-listener.js b/packages/ws-client-core/src/callers/global-listener.js new file mode 100644 index 00000000..46d40252 --- /dev/null +++ b/packages/ws-client-core/src/callers/global-listener.js @@ -0,0 +1,66 @@ +// move from generator-methods +// they are global event listeners +import { + createEvt, + objDefineProps, + isFunc +} from '../utils' +import { + ON_ERROR_FN_NAME, + ON_READY_FN_NAME +} from 'jsonql-constants' +/** + * The problem is the namespace can have more than one + * and we only have on onError message + * @param {object} clientthe client itself + * @param {object} opts configuration + * @param {object} ee Event Emitter + * @param {object} nspGroup namespace keys + * @return {array} [obj, opts, ee] + */ +export function setupNamespaceErrorListener(client, opts, ee, nspGroup) { + return [ + objDefineProps( + client, + ON_ERROR_FN_NAME, + function namespaceErrorCallbackHandler(namespaceErrorHandler) { + if (isFunc(namespaceErrorHandler)) { + // please note ON_ERROR_FN_NAME can add multiple listners + for (let namespace in nspGroup) { + // this one is very tricky, we need to make sure the trigger is calling + // with the namespace as well as the error + ee.$on(createEvt(namespace, ON_ERROR_FN_NAME), namespaceErrorHandler) + } + } + } + ), + opts, + ee + ] +} + +/** + * This event will fire when the socket.io.on('connection') and ws.onopen + * @param {object} client client itself + * @param {object} opts configuration + * @param {object} ee Event Emitter + * @return {array} [ obj, opts, ee ] + */ +export function setupOnReadyListener(client, opts, ee) { + return [ + objDefineProps( + client, + ON_READY_FN_NAME, + function onReadyCallbackHandler(onReadyCallback) { + if (isFunc(onReadyCallback)) { + // reduce it down to just one flat level + // @2020-03-19 only allow ONE onReady callback otherwise + // it will get fire multiple times which is not what we want + ee.$only(ON_READY_FN_NAME, onReadyCallback) + } + } + ), + opts, + ee + ] +} diff --git a/packages/ws-client-core/src/callers/setup-final-step.js b/packages/ws-client-core/src/callers/setup-final-step.js index d6db2354..8bd697c0 100644 --- a/packages/ws-client-core/src/callers/setup-final-step.js +++ b/packages/ws-client-core/src/callers/setup-final-step.js @@ -1,5 +1,10 @@ // The final step of the setup before it returns the client import { setupInterCom } from './setup-intercom' +import { injectToFn } from '../utils' +import { + CONNECTED_PROP_KEY, + CONNECT_EVENT_NAME +} from 'jsonql-constants' /** * The final step to return the client @@ -12,7 +17,7 @@ function setupFinalStep(obj, opts, ee) { const client = setupInterCom(obj, opts, ee) - opts.log(`---> The final step to return the ws-client <---`) + // opts.log(`---> The final step to return the ws-client <---`) // add some debug functions client.verifyEventEmitter = () => ee.is // we add back the two things into the client @@ -21,7 +26,11 @@ function setupFinalStep(obj, opts, ee) { client.eventEmitter = opts.eventEmitter client.log = opts.log // we just inject a helloWorld method here - // client[HELLO_FN] = + // set up the init state of the connect + client = injectToFn(client, CONNECTED_PROP_KEY , false, true) + + // now at this point, we are going to call the connect event + ee.$trigger(CONNECT_EVENT_NAME, [opts]) // just passing back the entire opts object return client } diff --git a/packages/ws-client-core/src/callers/setup-resolver.js b/packages/ws-client-core/src/callers/setup-resolver.js index 4e72760b..0b1dbed0 100644 --- a/packages/ws-client-core/src/callers/setup-resolver.js +++ b/packages/ws-client-core/src/callers/setup-resolver.js @@ -5,17 +5,42 @@ import { ON_MESSAGE_FN_NAME, ON_RESULT_FN_NAME } from 'jsonql-constants' -// local +import { finalCatch } from 'jsonql-errors' +import { validateAsync } from 'jsonql-params-validator' +import { actionCall } from './action-call' +// local import { MY_NAMESPACE } from '../options/constants' import { chainFns, objDefineProps, injectToFn, createEvt, isFunc } from '../utils' import { respondHandler } from './respond-handler' import { setupSendMethod } from './setup-send-method' + +/** + * moved back from generator-methods + * create the actual function to send message to server + * @param {object} ee EventEmitter instance + * @param {string} namespace this resolver end point + * @param {string} resolverName name of resolver as event name + * @param {object} params from contract + * @param {function} log pass the log function + * @return {function} resolver + */ +function createResolver(ee, namespace, resolverName, params, log) { + // note we pass the new withResult=true option + return function resolver(...args) { + return validateAsync(args, params.params, true) + .then(_args => actionCall(ee, namespace, resolverName, _args, log)) + .catch(finalCatch) + } +} + + + /** * The first one in the chain, just setup a namespace prop * the rest are passing through * @param {function} fn the resolver function - * @param {object} ee the event emitter + * @param {object} ee the event emitter * @param {string} resolverName what it said * @param {object} params for resolver from contract * @param {function} log the logger function @@ -27,12 +52,12 @@ const setupNamespace = (fn, ee, namespace, resolverName, params, log) => [ namespace, resolverName, params, - log + log ] -/** +/** * onResult handler - */ + */ const setupOnResult = (fn, ee, namespace, resolverName, params, log) => [ objDefineProps(fn, ON_RESULT_FN_NAME, function(resultCallback) { if (isFunc(resultCallback)) { @@ -42,7 +67,7 @@ const setupOnResult = (fn, ee, namespace, resolverName, params, log) => [ respondHandler(result, resultCallback, (error) => { log(`Catch error: "${resolverName}"`, error) ee.$trigger( - createEvt(namespace, resolverName, ON_ERROR_FN_NAME), + createEvt(namespace, resolverName, ON_ERROR_FN_NAME), error ) }) @@ -57,9 +82,9 @@ const setupOnResult = (fn, ee, namespace, resolverName, params, log) => [ log ] -/** +/** * we do need to add the send prop back because it's the only way to deal with - * bi-directional data stream + * bi-directional data stream */ const setupOnMessage = (fn, ee, namespace, resolverName, params, log) => [ objDefineProps(fn, ON_MESSAGE_FN_NAME, function(messageCallback) { @@ -70,14 +95,14 @@ const setupOnMessage = (fn, ee, namespace, resolverName, params, log) => [ respondHandler(args, messageCallback, (error) => { log(`Catch error: "${resolverName}"`, error) ee.$trigger( - createEvt(namespace, resolverName, ON_ERROR_FN_NAME), + createEvt(namespace, resolverName, ON_ERROR_FN_NAME), error ) }) } // register the handler for this message event ee.$only( - createEvt(namespace, resolverName, ON_MESSAGE_FN_NAME), + createEvt(namespace, resolverName, ON_MESSAGE_FN_NAME), onMessageCallback ) } @@ -89,7 +114,7 @@ const setupOnMessage = (fn, ee, namespace, resolverName, params, log) => [ log ] -/** +/** * ON_ERROR_FN_NAME handler */ const setupOnError = (fn, ee, namespace, resolverName, params, log) => [ @@ -97,7 +122,7 @@ const setupOnError = (fn, ee, namespace, resolverName, params, log) => [ if (isFunc(resolverErrorHandler)) { // please note ON_ERROR_FN_NAME can add multiple listners ee.$only( - createEvt(namespace, resolverName, ON_ERROR_FN_NAME), + createEvt(namespace, resolverName, ON_ERROR_FN_NAME), resolverErrorHandler ) } @@ -116,21 +141,24 @@ const setupOnError = (fn, ee, namespace, resolverName, params, log) => [ * @param {object} params from contract * @param {function} fn resolver function * @param {object} ee EventEmitter - * @param {function} log function + * @param {function} log function * @return {function} resolver */ -export function setupResolver(namespace, resolverName, params, fn, ee, log) { +function setupResolver(namespace, resolverName, params, fn, ee, log) { let fns = [ - setupNamespace, - setupOnResult, - setupOnMessage, - setupOnError, + setupNamespace, + setupOnResult, + setupOnMessage, + setupOnError, setupSendMethod ] - + // get the executor const executor = Reflect.apply(chainFns, null, fns) const args = [fn, ee, namespace, resolverName, params, log] return Reflect.apply(executor, null, args) } + + +export { createResolver, setupResolver } \ No newline at end of file -- Gitee From 1bb8cb926c0d82b73433ad9280429c066313dab5 Mon Sep 17 00:00:00 2001 From: joelchu Date: Fri, 20 Mar 2020 19:31:25 +0800 Subject: [PATCH 04/11] update the post action --- packages/ws-client-core/src/callers/callers-generator.js | 7 ++++--- packages/ws-client-core/src/callers/setup-auth-methods.js | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/ws-client-core/src/callers/callers-generator.js b/packages/ws-client-core/src/callers/callers-generator.js index 862c01de..5b056bb1 100644 --- a/packages/ws-client-core/src/callers/callers-generator.js +++ b/packages/ws-client-core/src/callers/callers-generator.js @@ -4,11 +4,12 @@ import { chainFns } from '../utils' import { setupAuthMethods } from './setup-auth-methods' import { - generateResolvers, + generateResolvers +} from './generator-methods' +import { setupOnReadyListener, setupNamespaceErrorListener -} from './generator-methods' - +} from './global-listener' import { NSP_GROUP } from 'jsonql-constants' diff --git a/packages/ws-client-core/src/callers/setup-auth-methods.js b/packages/ws-client-core/src/callers/setup-auth-methods.js index df44196b..04d36747 100644 --- a/packages/ws-client-core/src/callers/setup-auth-methods.js +++ b/packages/ws-client-core/src/callers/setup-auth-methods.js @@ -9,8 +9,6 @@ import { injectToFn, chainFns, isString, objDefineProps, isFunc } from '../utils /** - * @TODO this is now become unnecessary because the login is a slave to the - * http-client - but keep this for now and see what we want to do with it later * @UPDATE it might be better if we decoup the two http-client only emit a login event * Here should catch it and reload the ws client @TBC * break out from createAuthMethods to allow chaining call @@ -61,6 +59,8 @@ const setupOnLoginhandler = (obj, opts, ee) => [ objDefineProps(obj, ON_LOGIN_FN_NAME, function onLoginCallbackHandler(onLoginCallback) { if (isFunc(onLoginCallback)) { // only one callback can registered with it, TBC + // Should this be a $onlyOnce listener after the logout + // we add it back? ee.$only(ON_LOGIN_FN_NAME, onLoginCallback) } }), -- Gitee From 6eab40282d4f85948a99105839a5060a0447fccc Mon Sep 17 00:00:00 2001 From: joelchu Date: Fri, 20 Mar 2020 19:36:49 +0800 Subject: [PATCH 05/11] exp test passed --- packages/ws-client-core/tests/experiment.test.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/ws-client-core/tests/experiment.test.js b/packages/ws-client-core/tests/experiment.test.js index 068c7749..b2c6a2f7 100644 --- a/packages/ws-client-core/tests/experiment.test.js +++ b/packages/ws-client-core/tests/experiment.test.js @@ -6,6 +6,8 @@ const { JSONQL_PATH } = require('jsonql-constants') const Event = require('@to1source/event') const debug = require('debug') +const colors = require('colors/safe') + const logger = debug('jsonql-ws-client:test:evt:logger') const localDebug = debug('jsonql-ws-client:test:evt') @@ -104,7 +106,6 @@ test.cb.only(`Testing the fullClient with csrf`, t => { const d1 = p => c1.send(p) const d2 = p => c2.send(p) - c1.onopen = function() { helloWorld(d1) plus() -- Gitee From 8fa9e1d047ec5dc17ff2b683967641d2043a24fb Mon Sep 17 00:00:00 2001 From: joelchu Date: Fri, 20 Mar 2020 20:23:46 +0800 Subject: [PATCH 06/11] Finally put it back together --- packages/ws-client-core/src/api.js | 18 +++---- .../src/callers/callers-generator.js | 12 ++--- .../src/callers/global-listener.js | 52 ++++++++++--------- packages/ws-client-core/src/callers/index.js | 5 +- .../src/callers/setup-final-step.js | 5 +- packages/ws-client-core/src/options/index.js | 1 - packages/ws-client-core/tests/auth.test.js | 2 - .../tests/fixtures/lib/fake-ws-client.js | 15 ++---- .../tests/fixtures/lib/mock-client.js | 5 -- 9 files changed, 47 insertions(+), 68 deletions(-) diff --git a/packages/ws-client-core/src/api.js b/packages/ws-client-core/src/api.js index 4e616d3c..46e39184 100644 --- a/packages/ws-client-core/src/api.js +++ b/packages/ws-client-core/src/api.js @@ -2,10 +2,7 @@ // The goal is to create a generic method that will able to handle // any kind of clients // import { injectToFn } from 'jsonql-utils' -import { - callersGenerator, - setupFinalStep -} from './callers' +import { callersGenerator } from './callers' import { checkConfiguration, postCheckInjectOpts, @@ -15,28 +12,25 @@ import { /** * 0.5.0 we break up the wsClientCore in two parts one without the config check - * @param {function} socketClientListener + * @param {function} setupSocketClientListener just make sure what it said it does * @return {function} to actually generate the client */ -export function wsClientCoreAction(socketClientListener) { +export function wsClientCoreAction(setupSocketClientListener) { /** * This is a breaking change, to continue the onion skin design * @param {object} config the already checked config * @return {promise} resolve the client */ - return (config = {}) => { + return function createClientAction(config = {}) { return postCheckInjectOpts(config) - // the following two moved to wsPostConfig .then(createRequiredParams) .then( - ({opts, nspMap, ee}) => callersGenerator(opts, nspMap, ee) + ({opts, nspMap, ee}) => setupSocketClientListener(opts, nspMap, ee) ) .then( - ({opts, nspMap, ee}) => socketClientListener(opts, nspMap, ee) + ({opts, nspMap, ee}) => callersGenerator(opts, nspMap, ee) ) - // because it returns as an array of params - .then(result => Reflect.apply(setupFinalStep, null, result)) .catch(err => { console.error(`jsonql-ws-core-client init error`, err) }) diff --git a/packages/ws-client-core/src/callers/callers-generator.js b/packages/ws-client-core/src/callers/callers-generator.js index 5b056bb1..1a63417b 100644 --- a/packages/ws-client-core/src/callers/callers-generator.js +++ b/packages/ws-client-core/src/callers/callers-generator.js @@ -1,18 +1,16 @@ // resolvers generator // we change the interface to return promise from v1.0.3 // this way we make sure the obj return is correct and timely +import { NSP_GROUP } from 'jsonql-constants' import { chainFns } from '../utils' import { setupAuthMethods } from './setup-auth-methods' -import { - generateResolvers -} from './generator-methods' +import { generateResolvers } from './generator-methods' +import { setupFinalStep } from './setup-final-step' import { setupOnReadyListener, setupNamespaceErrorListener } from './global-listener' -import { - NSP_GROUP -} from 'jsonql-constants' + /** * prepare the methods @@ -37,7 +35,7 @@ export function callersGenerator(opts, nspMap, ee) { // then we only return the obj (wsClient) // This has move outside of here, into the main method // the reason is we could switch around the sequence much easier - // fns.push(setupFinalStep) + fns.push(setupFinalStep) // run it const generator = Reflect.apply(chainFns, null, fns) diff --git a/packages/ws-client-core/src/callers/global-listener.js b/packages/ws-client-core/src/callers/global-listener.js index 46d40252..ebabec1b 100644 --- a/packages/ws-client-core/src/callers/global-listener.js +++ b/packages/ws-client-core/src/callers/global-listener.js @@ -9,6 +9,33 @@ import { ON_ERROR_FN_NAME, ON_READY_FN_NAME } from 'jsonql-constants' + +/** + * This event will fire when the socket.io.on('connection') and ws.onopen + * @param {object} client client itself + * @param {object} opts configuration + * @param {object} ee Event Emitter + * @return {array} [ obj, opts, ee ] + */ +export function setupOnReadyListener(client, opts, ee) { + return [ + objDefineProps( + client, + ON_READY_FN_NAME, + function onReadyCallbackHandler(onReadyCallback) { + if (isFunc(onReadyCallback)) { + // reduce it down to just one flat level + // @2020-03-19 only allow ONE onReady callback otherwise + // it will get fire multiple times which is not what we want + ee.$only(ON_READY_FN_NAME, onReadyCallback) + } + } + ), + opts, + ee + ] +} + /** * The problem is the namespace can have more than one * and we only have on onError message @@ -39,28 +66,3 @@ export function setupNamespaceErrorListener(client, opts, ee, nspGroup) { ] } -/** - * This event will fire when the socket.io.on('connection') and ws.onopen - * @param {object} client client itself - * @param {object} opts configuration - * @param {object} ee Event Emitter - * @return {array} [ obj, opts, ee ] - */ -export function setupOnReadyListener(client, opts, ee) { - return [ - objDefineProps( - client, - ON_READY_FN_NAME, - function onReadyCallbackHandler(onReadyCallback) { - if (isFunc(onReadyCallback)) { - // reduce it down to just one flat level - // @2020-03-19 only allow ONE onReady callback otherwise - // it will get fire multiple times which is not what we want - ee.$only(ON_READY_FN_NAME, onReadyCallback) - } - } - ), - opts, - ee - ] -} diff --git a/packages/ws-client-core/src/callers/index.js b/packages/ws-client-core/src/callers/index.js index eeeabac4..8a2c197e 100644 --- a/packages/ws-client-core/src/callers/index.js +++ b/packages/ws-client-core/src/callers/index.js @@ -9,7 +9,7 @@ import { } from './intercom-methods' import { helloWorld } from './hello' import { callersGenerator } from './callers-generator' -import { setupFinalStep } from './setup-final-step' + // just rename it export { @@ -18,6 +18,5 @@ export { extractPingResult, createIntercomPayload, extractSrvPayload, - callersGenerator, - setupFinalStep + callersGenerator } diff --git a/packages/ws-client-core/src/callers/setup-final-step.js b/packages/ws-client-core/src/callers/setup-final-step.js index 8bd697c0..ca90317d 100644 --- a/packages/ws-client-core/src/callers/setup-final-step.js +++ b/packages/ws-client-core/src/callers/setup-final-step.js @@ -14,9 +14,8 @@ import { * @return {object} client */ function setupFinalStep(obj, opts, ee) { - - const client = setupInterCom(obj, opts, ee) - + + let client = setupInterCom(obj, opts, ee) // opts.log(`---> The final step to return the ws-client <---`) // add some debug functions client.verifyEventEmitter = () => ee.is diff --git a/packages/ws-client-core/src/options/index.js b/packages/ws-client-core/src/options/index.js index a2bd7853..b4caefd2 100644 --- a/packages/ws-client-core/src/options/index.js +++ b/packages/ws-client-core/src/options/index.js @@ -90,7 +90,6 @@ function createRequiredParams(opts) { const ee = opts.eventEmitter // @TODO here we are going to add suspend event to the namespace related methods - return { opts, nspMap, ee } } diff --git a/packages/ws-client-core/tests/auth.test.js b/packages/ws-client-core/tests/auth.test.js index b9055603..fa8db4dd 100644 --- a/packages/ws-client-core/tests/auth.test.js +++ b/packages/ws-client-core/tests/auth.test.js @@ -5,8 +5,6 @@ // espcially debug the event system const test = require('ava') const { mockClient, log } = require('./fixtures/lib/mock-client') - - const { ON_ERROR_FN_NAME, ON_LOGIN_FN_NAME diff --git a/packages/ws-client-core/tests/fixtures/lib/fake-ws-client.js b/packages/ws-client-core/tests/fixtures/lib/fake-ws-client.js index 93a42cbe..7d3864d3 100644 --- a/packages/ws-client-core/tests/fixtures/lib/fake-ws-client.js +++ b/packages/ws-client-core/tests/fixtures/lib/fake-ws-client.js @@ -7,14 +7,9 @@ import { ON_LOGIN_FN_NAME } from 'jsonql-constants' -function fakeWsClient(...args) { - const obj = { - opts: args[0], - nspMap: args[1], - ee: args[2] - } +function fakeWsClient(opts, nspMap, ee) { - const { enableAuth } = obj.opts + const { enableAuth } = opts // log('\n/////////////////////fakeWsClient//////////////////\n') // log(obj) @@ -22,13 +17,13 @@ function fakeWsClient(...args) { // we fire the the onReady after 1/2 second setTimeout(() => { if (enableAuth) { - obj.ee.$trigger(ON_LOGIN_FN_NAME, 'You are login') + ee.$trigger(ON_LOGIN_FN_NAME, 'You are login') } else { - obj.ee.$trigger(ON_READY_FN_NAME, 'fake!') + ee.$trigger(ON_READY_FN_NAME, 'fake!') } }, 500) - return obj + return { opts, nspMap, ee } } export { fakeWsClient, log } \ No newline at end of file diff --git a/packages/ws-client-core/tests/fixtures/lib/mock-client.js b/packages/ws-client-core/tests/fixtures/lib/mock-client.js index 0d3f497e..cc734447 100644 --- a/packages/ws-client-core/tests/fixtures/lib/mock-client.js +++ b/packages/ws-client-core/tests/fixtures/lib/mock-client.js @@ -20,11 +20,6 @@ function mockClient(enableAuth = false) { debugOn: true, hostname: 'http://localhost:8888' }) - .then(config => { - config.log = log - log(`mockClient opts after checkConfiguration`, config) - return config - }) .then(wsClientCoreAction(fakeWsClient)) } -- Gitee From 0b51b5d0fe522492fa2afc52a2885d1ae9e1e717 Mon Sep 17 00:00:00 2001 From: joelchu Date: Fri, 20 Mar 2020 20:51:08 +0800 Subject: [PATCH 07/11] rename the method to match the naming on the ws-client-core --- packages/@jsonql/ws/src/node-ws-client.js | 10 +++++----- ...ocket-engine.js => setup-socket-client-listener.js} | 0 2 files changed, 5 insertions(+), 5 deletions(-) rename packages/@jsonql/ws/src/node/{node-framework-socket-engine.js => setup-socket-client-listener.js} (100%) diff --git a/packages/@jsonql/ws/src/node-ws-client.js b/packages/@jsonql/ws/src/node-ws-client.js index 8d1384b2..1e64c048 100644 --- a/packages/@jsonql/ws/src/node-ws-client.js +++ b/packages/@jsonql/ws/src/node-ws-client.js @@ -4,14 +4,14 @@ import { } from './core/modules' import { wsClientConstProps } from './options' -import nodeFrameworkSocketEngine from './node/node-framework-socket-engine' +import setupSocketClientListener from './node/setup-socket-client-listener' // export back the function and that's it export default function wsNodeClient(config = {}, constProps = {}) { - const initClientMethod = wsClientCore( - nodeFrameworkSocketEngine, + + return wsClientCore( + setupSocketClientListener, {}, Object.assign({}, wsClientConstProps, constProps) - ) - return initClientMethod(config) + )(config) } diff --git a/packages/@jsonql/ws/src/node/node-framework-socket-engine.js b/packages/@jsonql/ws/src/node/setup-socket-client-listener.js similarity index 100% rename from packages/@jsonql/ws/src/node/node-framework-socket-engine.js rename to packages/@jsonql/ws/src/node/setup-socket-client-listener.js -- Gitee From 9d17e603a7cea079d0dd2dc3556dea5cd62a3693 Mon Sep 17 00:00:00 2001 From: joelchu Date: Fri, 20 Mar 2020 21:53:17 +0800 Subject: [PATCH 08/11] Take out the logout event handler on its own --- .../create-nsp/bind-socket-event-handler.js | 36 +++++-------------- .../core/create-nsp/login-event-listener.js | 3 -- .../core/create-nsp/logout-event-handler.js | 24 +++++++++++++ 3 files changed, 32 insertions(+), 31 deletions(-) create mode 100644 packages/@jsonql/ws/src/core/create-nsp/logout-event-handler.js diff --git a/packages/@jsonql/ws/src/core/create-nsp/bind-socket-event-handler.js b/packages/@jsonql/ws/src/core/create-nsp/bind-socket-event-handler.js index 780590fd..375bfcfd 100644 --- a/packages/@jsonql/ws/src/core/create-nsp/bind-socket-event-handler.js +++ b/packages/@jsonql/ws/src/core/create-nsp/bind-socket-event-handler.js @@ -1,15 +1,13 @@ // the WebSocket main handler import { - LOGOUT_EVENT_NAME, ACKNOWLEDGE_REPLY_TYPE, EMIT_REPLY_TYPE, ERROR_KEY, - - ON_ERROR_FN_NAME, ON_MESSAGE_FN_NAME, ON_RESULT_FN_NAME, ON_READY_FN_NAME, - ON_LOGIN_FN_NAME + ON_LOGIN_FN_NAME, + ON_ERROR_FN_NAME } from 'jsonql-constants' import { createQueryStr, @@ -17,9 +15,11 @@ import { extractWsPayload } from 'jsonql-utils/module' import { - handleNamespaceOnError, - createIntercomPayload + handleNamespaceOnError } from '../modules' +import { + logoutEventListener +} from './logout-event-handler' /** * in some edge case we might not even have a resolverName, then @@ -30,7 +30,7 @@ import { * @param {object} json decoded payload or error object * @return {undefined} nothing return */ -const errorTypeHandler = (ee, namespace, resolverName, json) => { +export const errorTypeHandler = (ee, namespace, resolverName, json) => { let evt = [namespace] if (resolverName) { evt.push(resolverName) @@ -42,25 +42,6 @@ const errorTypeHandler = (ee, namespace, resolverName, json) => { ee.$trigger(evtName, [payload]) } -/** - * Handle the logout event when it's enableAuth - * @param {object} ee eventEmitter - * @param {object} ws the WebSocket instance - * @return {void} - */ -const logoutEventListener = (ee, ws) => { - // listen to the LOGOUT_EVENT_NAME when this is a private nsp - ee.$on(LOGOUT_EVENT_NAME, function closeEvtHandler() { - try { - // @TODO we need find a way to get the userdata - ws.send(createIntercomPayload(LOGOUT_EVENT_NAME)) - log('terminate ws connection') - ws.terminate() - } catch(e) { - console.error('ws.terminate error', e) - } - }) -} /** * Binding the event to socket normally @@ -80,7 +61,7 @@ export function bindSocketEventHandler(namespace, ws, ee, isPrivate, opts) { log('=== ws.onopen listened -->', namespace) // we just call the onReady - ee.$call(ON_READY_FN_NAME)(namespace) + ee.$trigger(ON_READY_FN_NAME, [namespace]) // we only want to allow it get call twice (number of namespaces) --onReadCalls if (onReadCalls === 0) { @@ -101,7 +82,6 @@ export function bindSocketEventHandler(namespace, ws, ee, isPrivate, opts) { * @param {array} args NEED TO CHECK HOW WE PASS THIS! */ function wsMainOnEvtHandler(resolverName, args) { - const payload = createQueryStr(resolverName, args) log('ws.onopen.send', resolverName, args, payload) diff --git a/packages/@jsonql/ws/src/core/create-nsp/login-event-listener.js b/packages/@jsonql/ws/src/core/create-nsp/login-event-listener.js index f611d76c..2151c42a 100644 --- a/packages/@jsonql/ws/src/core/create-nsp/login-event-listener.js +++ b/packages/@jsonql/ws/src/core/create-nsp/login-event-listener.js @@ -5,9 +5,6 @@ import { LOGIN_EVENT_NAME } from 'jsonql-constants' import { clearMainEmitEvt } from '../modules' -import { clientEventListener } from '../modules' -import { bindSocketEventHandler } from './bind-socket-event-handler' - /** * create a login event handler, that will unbind all existing ws --> event * then rebind them together, so this is a re-run of the create-nsp diff --git a/packages/@jsonql/ws/src/core/create-nsp/logout-event-handler.js b/packages/@jsonql/ws/src/core/create-nsp/logout-event-handler.js new file mode 100644 index 00000000..f88d4bee --- /dev/null +++ b/packages/@jsonql/ws/src/core/create-nsp/logout-event-handler.js @@ -0,0 +1,24 @@ +// taken out from the bind-socket-event-handler +import { LOGOUT_EVENT_NAME } from 'jsonql-constants' +import { createIntercomPayload } from '../modules' + +/** + * This is the actual logout (terminate socket connection) handler + * There is another one that is handle what should do when this happen + * @param {object} ee eventEmitter + * @param {object} ws the WebSocket instance + * @return {void} + */ +export const logoutEventListener = (ee, ws) => { + // listen to the LOGOUT_EVENT_NAME when this is a private nsp + ee.$on(LOGOUT_EVENT_NAME, function closeEvtHandler() { + try { + // @TODO we need find a way to get the userdata + ws.send(createIntercomPayload(LOGOUT_EVENT_NAME)) + log('terminate ws connection') + ws.terminate() + } catch(e) { + console.error('ws.terminate error', e) + } + }) +} \ No newline at end of file -- Gitee From b9ebaefe200b65e1a48b78dc7b0195c28fa35777 Mon Sep 17 00:00:00 2001 From: joelchu Date: Fri, 20 Mar 2020 22:19:29 +0800 Subject: [PATCH 09/11] regroup and remove unnecessary methods --- .../create-nsp-action.js => create-nsp.js} | 8 ++-- .../ws/src/core/create-nsp/create-nsp.js | 37 ------------------- .../bind-framework-to-jsonql.js | 30 ++++++++++++--- .../bind-socket-event-handler.js | 2 +- .../{create-nsp => handlers}/disconnect.js | 0 .../core/{create-nsp => handlers}/index.js | 2 +- .../login-event-listener.js | 0 .../logout-event-handler.js | 0 8 files changed, 31 insertions(+), 48 deletions(-) rename packages/@jsonql/ws/src/core/{create-nsp/create-nsp-action.js => create-nsp.js} (90%) delete mode 100644 packages/@jsonql/ws/src/core/create-nsp/create-nsp.js rename packages/@jsonql/ws/src/core/{create-nsp => create-websocket-binding}/bind-socket-event-handler.js (99%) rename packages/@jsonql/ws/src/core/{create-nsp => handlers}/disconnect.js (100%) rename packages/@jsonql/ws/src/core/{create-nsp => handlers}/index.js (71%) rename packages/@jsonql/ws/src/core/{create-nsp => handlers}/login-event-listener.js (100%) rename packages/@jsonql/ws/src/core/{create-nsp => handlers}/logout-event-handler.js (100%) diff --git a/packages/@jsonql/ws/src/core/create-nsp/create-nsp-action.js b/packages/@jsonql/ws/src/core/create-nsp.js similarity index 90% rename from packages/@jsonql/ws/src/core/create-nsp/create-nsp-action.js rename to packages/@jsonql/ws/src/core/create-nsp.js index 58933a86..c80cbb7d 100644 --- a/packages/@jsonql/ws/src/core/create-nsp/create-nsp-action.js +++ b/packages/@jsonql/ws/src/core/create-nsp.js @@ -1,7 +1,8 @@ +// actually binding the event client to the socket client import { createNspClient, createNspAuthClient -} from '../modules' +} from './modules' import { chainPromises } from 'jsonql-utils/src/chain-promises' @@ -16,7 +17,7 @@ import { * @param {string|null} token whether we have the token at run time * @return {promise} resolve the nsps namespace with namespace as key */ -const createNspAction = function(opts, nspMap, token) { +const createNsp = function(opts, nspMap, token) { const { log } = opts let { publicNamespace, namespaces } = nspMap log(`createNspAction`, 'publicNamespace', publicNamespace, 'namespaces', namespaces) @@ -48,5 +49,4 @@ const createNspAction = function(opts, nspMap, token) { .then(nsp => ({[publicNamespace]: nsp})) } - -export { createNspAction } \ No newline at end of file +export { createNsp } diff --git a/packages/@jsonql/ws/src/core/create-nsp/create-nsp.js b/packages/@jsonql/ws/src/core/create-nsp/create-nsp.js deleted file mode 100644 index a148e936..00000000 --- a/packages/@jsonql/ws/src/core/create-nsp/create-nsp.js +++ /dev/null @@ -1,37 +0,0 @@ -// actually binding the event client to the socket client - -// from the jsonql-ws-client-core -import { clientEventListener } from '../modules' -import { bindSocketEventHandler } from './bind-socket-event-handler' -// local -import { createNspAction } from './create-nsp-action' -import { loginEventListener } from './login-event-listener' - - -/** - * create the NSP(s) and determine if this require auth or not - * @param {object} opts configuration - * @param {object} nspMap namespace with resolvers - * @param {object} ee EventEmitter to pass through - * @return {object} what comes in what goes out - */ -function createNsp(opts, nspMap, ee) { - // now create the nsps - // const { namespaces } = nspMap - const { token } = opts - - return createNspAction(opts, nspMap, token) - .then(nsps => { - const listenerFn = clientEventListener(bindSocketEventHandler, nsps) - // now run it - listenerFn(opts, nspMap, ee) - - if (opts.enableAuth) { - loginEventHandler(opts, nspMap, ee) - } - // return what input - return { opts, nspMap, ee } - }) -} - -export { createNsp } diff --git a/packages/@jsonql/ws/src/core/create-websocket-binding/bind-framework-to-jsonql.js b/packages/@jsonql/ws/src/core/create-websocket-binding/bind-framework-to-jsonql.js index cdb6df39..3798affb 100644 --- a/packages/@jsonql/ws/src/core/create-websocket-binding/bind-framework-to-jsonql.js +++ b/packages/@jsonql/ws/src/core/create-websocket-binding/bind-framework-to-jsonql.js @@ -1,7 +1,15 @@ // share method to create the wsClientResolver +import { + NSP_CLIENT, + NSP_AUTH_CLIENT, + CONNECT_EVENT_NAME +} from 'jsonql-constants' import { initWebSocketClient } from './init-websocket-client' import createNsp from '../create-nsp' -import { NSP_CLIENT, NSP_AUTH_CLIENT } from 'jsonql-constants' + +// from the jsonql-ws-client-core +import { clientEventListener } from '../modules' +import { bindSocketEventHandler } from './bind-socket-event-handler' /** * Create the framework <---> jsonql client binding @@ -20,11 +28,23 @@ function bindFrameworkToJsonql(frameworkModule) { const { log } = opts opts[NSP_CLIENT] = initWebSocketClient(frameworkModule, false, log) opts[NSP_AUTH_CLIENT] = initWebSocketClient(frameworkModule, true, log) - // @1.0.7 remove later once everything fixed - + // debug log(`bindFrameworkToJsonql`, ee.name, nspMap) - // console.log(`contract`, opts.contract) - return createNsp(opts, nspMap, ee) + // @2020-03-20 @NOTE + // now we don't run the connection straight away + // instead we only set it to listen to the connect event call + // this event will pass back the modified opts object + ee.$only(CONNECT_EVENT_NAME, function(config) { + createNsp(config, nspMap, ee) + .then(nsps => { + clientEventListener(bindSocketEventHandler, nsps) + // now run it + listenerFn(opts, nspMap, ee) + }) + }) + + // we just return what comes in + return { opts, nspMap, ee } } } diff --git a/packages/@jsonql/ws/src/core/create-nsp/bind-socket-event-handler.js b/packages/@jsonql/ws/src/core/create-websocket-binding/bind-socket-event-handler.js similarity index 99% rename from packages/@jsonql/ws/src/core/create-nsp/bind-socket-event-handler.js rename to packages/@jsonql/ws/src/core/create-websocket-binding/bind-socket-event-handler.js index 375bfcfd..bb545707 100644 --- a/packages/@jsonql/ws/src/core/create-nsp/bind-socket-event-handler.js +++ b/packages/@jsonql/ws/src/core/create-websocket-binding/bind-socket-event-handler.js @@ -19,7 +19,7 @@ import { } from '../modules' import { logoutEventListener -} from './logout-event-handler' +} from '../create-nsp/logout-event-handler' /** * in some edge case we might not even have a resolverName, then diff --git a/packages/@jsonql/ws/src/core/create-nsp/disconnect.js b/packages/@jsonql/ws/src/core/handlers/disconnect.js similarity index 100% rename from packages/@jsonql/ws/src/core/create-nsp/disconnect.js rename to packages/@jsonql/ws/src/core/handlers/disconnect.js diff --git a/packages/@jsonql/ws/src/core/create-nsp/index.js b/packages/@jsonql/ws/src/core/handlers/index.js similarity index 71% rename from packages/@jsonql/ws/src/core/create-nsp/index.js rename to packages/@jsonql/ws/src/core/handlers/index.js index 076f18c4..6c148ae0 100644 --- a/packages/@jsonql/ws/src/core/create-nsp/index.js +++ b/packages/@jsonql/ws/src/core/handlers/index.js @@ -1,5 +1,5 @@ // breaking up the create-nsp.js file // then regroup them back together here -import { createNsp } from './create-nsp' +import { createNsp } from '../create-nsp' export default createNsp diff --git a/packages/@jsonql/ws/src/core/create-nsp/login-event-listener.js b/packages/@jsonql/ws/src/core/handlers/login-event-listener.js similarity index 100% rename from packages/@jsonql/ws/src/core/create-nsp/login-event-listener.js rename to packages/@jsonql/ws/src/core/handlers/login-event-listener.js diff --git a/packages/@jsonql/ws/src/core/create-nsp/logout-event-handler.js b/packages/@jsonql/ws/src/core/handlers/logout-event-handler.js similarity index 100% rename from packages/@jsonql/ws/src/core/create-nsp/logout-event-handler.js rename to packages/@jsonql/ws/src/core/handlers/logout-event-handler.js -- Gitee From 40bca600046ab5c11113afec4d218adee3769601 Mon Sep 17 00:00:00 2001 From: joelchu Date: Sat, 21 Mar 2020 08:06:24 +0800 Subject: [PATCH 10/11] still in the process of restructing the code base --- packages/@jsonql/ws/src/core/create-nsp.js | 6 ++-- .../bind-framework-to-jsonql.js | 36 +++++++++++++------ .../bind-socket-event-handler.js | 12 ++----- packages/constants/package.json | 2 +- packages/constants/socket.js | 6 ++++ .../src/callers/setup-final-step.js | 2 +- 6 files changed, 40 insertions(+), 24 deletions(-) diff --git a/packages/@jsonql/ws/src/core/create-nsp.js b/packages/@jsonql/ws/src/core/create-nsp.js index c80cbb7d..b015d287 100644 --- a/packages/@jsonql/ws/src/core/create-nsp.js +++ b/packages/@jsonql/ws/src/core/create-nsp.js @@ -17,9 +17,11 @@ import { * @param {string|null} token whether we have the token at run time * @return {promise} resolve the nsps namespace with namespace as key */ -const createNsp = function(opts, nspMap, token) { - const { log } = opts +const createNsp = function(opts, nspMap, token = null) { + // we leave the token param out because it could get call by another method + token = token || opts.token let { publicNamespace, namespaces } = nspMap + const { log } = opts log(`createNspAction`, 'publicNamespace', publicNamespace, 'namespaces', namespaces) // reverse the namespaces because it got stuck for some reason diff --git a/packages/@jsonql/ws/src/core/create-websocket-binding/bind-framework-to-jsonql.js b/packages/@jsonql/ws/src/core/create-websocket-binding/bind-framework-to-jsonql.js index 3798affb..9ca78977 100644 --- a/packages/@jsonql/ws/src/core/create-websocket-binding/bind-framework-to-jsonql.js +++ b/packages/@jsonql/ws/src/core/create-websocket-binding/bind-framework-to-jsonql.js @@ -4,13 +4,28 @@ import { NSP_AUTH_CLIENT, CONNECT_EVENT_NAME } from 'jsonql-constants' -import { initWebSocketClient } from './init-websocket-client' -import createNsp from '../create-nsp' -// from the jsonql-ws-client-core import { clientEventListener } from '../modules' +import { createNsp } from '../create-nsp' + +import { initWebSocketClient } from './init-websocket-client' import { bindSocketEventHandler } from './bind-socket-event-handler' +/** + * This is finally the core of this operation + * 1. connect the nsp (with or without the token auth) + * 2. binding nsp to the jsonql event listener + * @param {object} config configuration + * @param {object} nspMap the namespace map etc + * @param {object} ee the event class instance + * @return {*} + */ +function nspToEvtBinding(config, nspMap, ee) { + return createNsp(config, nspMap) + .then(nsps => clientEventListener(bindSocketEventHandler, nsps)) + .then(listenerFn => listenerFn(config, nspMap, ee)) +} + /** * Create the framework <---> jsonql client binding * @param {object} frameworkModule the different WebSocket module @@ -33,15 +48,14 @@ function bindFrameworkToJsonql(frameworkModule) { // @2020-03-20 @NOTE // now we don't run the connection straight away // instead we only set it to listen to the connect event call - // this event will pass back the modified opts object - ee.$only(CONNECT_EVENT_NAME, function(config) { - createNsp(config, nspMap, ee) - .then(nsps => { - clientEventListener(bindSocketEventHandler, nsps) - // now run it - listenerFn(opts, nspMap, ee) - }) + // this event will pass back the modified opts object + // also we pass the event emitter back with additional properties + + ee.$only(CONNECT_EVENT_NAME, function($config, $ee) { + return nspToEvtBinding($config, nspMap, $ee) }) + // next we need to setup the login event handler + // we just return what comes in return { opts, nspMap, ee } diff --git a/packages/@jsonql/ws/src/core/create-websocket-binding/bind-socket-event-handler.js b/packages/@jsonql/ws/src/core/create-websocket-binding/bind-socket-event-handler.js index bb545707..c4e4a108 100644 --- a/packages/@jsonql/ws/src/core/create-websocket-binding/bind-socket-event-handler.js +++ b/packages/@jsonql/ws/src/core/create-websocket-binding/bind-socket-event-handler.js @@ -17,9 +17,6 @@ import { import { handleNamespaceOnError } from '../modules' -import { - logoutEventListener -} from '../create-nsp/logout-event-handler' /** * in some edge case we might not even have a resolverName, then @@ -42,7 +39,6 @@ export const errorTypeHandler = (ee, namespace, resolverName, json) => { ee.$trigger(evtName, [payload]) } - /** * Binding the event to socket normally * @param {string} namespace @@ -146,9 +142,7 @@ export function bindSocketEventHandler(namespace, ws, ee, isPrivate, opts) { log(`ws.onerror`, err) handleNamespaceOnError(ee, namespace, err) } - - if (isPrivate) { - logoutEventListener(ee, ws) - } - + + // we don't bind the logut here and just return the ws + return ws } diff --git a/packages/constants/package.json b/packages/constants/package.json index 6a67e011..0a2cfe86 100755 --- a/packages/constants/package.json +++ b/packages/constants/package.json @@ -1,6 +1,6 @@ { "name": "jsonql-constants", - "version": "2.0.8", + "version": "2.0.9", "description": "All the share constants for jsonql modules", "main": "main.js", "module": "index.js", diff --git a/packages/constants/socket.js b/packages/constants/socket.js index 670e7aec..7fb08c13 100644 --- a/packages/constants/socket.js +++ b/packages/constants/socket.js @@ -21,6 +21,12 @@ export const SOCKET_CLIENT_TS_KEY = '__socket_client_ts_key__' // although it should never happens, but in some edge case might want to // disconnect from the current server, then re-establish connection later export const CONNECT_EVENT_NAME = '__connect__' +// we still need the connected event because after the connection establish +// we need to change a state within the client to let the front end know that +// it's current hook up to the server but we don't want to loop back the client +// inside the setup phrase, intead just trigger a connected event and the listener +// setup this property +export const CONNECTED_EVENT_NAME = '__connected__' export const DISCONNECT_EVENT_NAME = '__disconnect__' // instead of using an event name in place of resolverName in the param // we use this internal resolverName instead, and in type using the event names diff --git a/packages/ws-client-core/src/callers/setup-final-step.js b/packages/ws-client-core/src/callers/setup-final-step.js index ca90317d..dfd51924 100644 --- a/packages/ws-client-core/src/callers/setup-final-step.js +++ b/packages/ws-client-core/src/callers/setup-final-step.js @@ -29,7 +29,7 @@ function setupFinalStep(obj, opts, ee) { client = injectToFn(client, CONNECTED_PROP_KEY , false, true) // now at this point, we are going to call the connect event - ee.$trigger(CONNECT_EVENT_NAME, [opts]) // just passing back the entire opts object + ee.$trigger(CONNECT_EVENT_NAME, [opts, ee]) // just passing back the entire opts object return client } -- Gitee From 3b8a49811b0ea3aa3531ea1ba8af24f2584b58a0 Mon Sep 17 00:00:00 2001 From: joelchu Date: Sat, 21 Mar 2020 08:06:53 +0800 Subject: [PATCH 11/11] jsonql-constants 2.0.9 --- packages/constants/README.md | 1 + packages/constants/browser.js | 1 + packages/constants/constants.json | 1 + packages/constants/index.js | 6 ++++++ packages/constants/main.js | 1 + 5 files changed, 10 insertions(+) diff --git a/packages/constants/README.md b/packages/constants/README.md index 4c936c6c..ce7e3434 100755 --- a/packages/constants/README.md +++ b/packages/constants/README.md @@ -181,6 +181,7 @@ Please consult the detail break down below. - SOCKET_CLIENT_ID_KEY - SOCKET_CLIENT_TS_KEY - CONNECT_EVENT_NAME +- CONNECTED_EVENT_NAME - DISCONNECT_EVENT_NAME - INTERCOM_RESOLVER_NAME - INTER_COM_EVENT_NAMES diff --git a/packages/constants/browser.js b/packages/constants/browser.js index d6a210e3..ceb21f3d 100644 --- a/packages/constants/browser.js +++ b/packages/constants/browser.js @@ -179,6 +179,7 @@ var jsonqlConstants = { "SOCKET_CLIENT_ID_KEY": "__socket_client_id_key__", "SOCKET_CLIENT_TS_KEY": "__socket_client_ts_key__", "CONNECT_EVENT_NAME": "__connect__", + "CONNECTED_EVENT_NAME": "__connected__", "DISCONNECT_EVENT_NAME": "__disconnect__", "INTERCOM_RESOLVER_NAME": "__intercom__", "INTER_COM_EVENT_NAMES": [ diff --git a/packages/constants/constants.json b/packages/constants/constants.json index 7a8e8d90..ea077f23 100644 --- a/packages/constants/constants.json +++ b/packages/constants/constants.json @@ -179,6 +179,7 @@ "SOCKET_CLIENT_ID_KEY": "__socket_client_id_key__", "SOCKET_CLIENT_TS_KEY": "__socket_client_ts_key__", "CONNECT_EVENT_NAME": "__connect__", + "CONNECTED_EVENT_NAME": "__connected__", "DISCONNECT_EVENT_NAME": "__disconnect__", "INTERCOM_RESOLVER_NAME": "__intercom__", "INTER_COM_EVENT_NAMES": [ diff --git a/packages/constants/index.js b/packages/constants/index.js index 8989bbb9..5176ec85 100644 --- a/packages/constants/index.js +++ b/packages/constants/index.js @@ -269,6 +269,12 @@ export const SOCKET_CLIENT_TS_KEY = '__socket_client_ts_key__' // although it should never happens, but in some edge case might want to // disconnect from the current server, then re-establish connection later export const CONNECT_EVENT_NAME = '__connect__' +// we still need the connected event because after the connection establish +// we need to change a state within the client to let the front end know that +// it's current hook up to the server but we don't want to loop back the client +// inside the setup phrase, intead just trigger a connected event and the listener +// setup this property +export const CONNECTED_EVENT_NAME = '__connected__' export const DISCONNECT_EVENT_NAME = '__disconnect__' // instead of using an event name in place of resolverName in the param // we use this internal resolverName instead, and in type using the event names diff --git a/packages/constants/main.js b/packages/constants/main.js index 071bf0a1..8e791039 100644 --- a/packages/constants/main.js +++ b/packages/constants/main.js @@ -179,6 +179,7 @@ module.exports = { "SOCKET_CLIENT_ID_KEY": "__socket_client_id_key__", "SOCKET_CLIENT_TS_KEY": "__socket_client_ts_key__", "CONNECT_EVENT_NAME": "__connect__", + "CONNECTED_EVENT_NAME": "__connected__", "DISCONNECT_EVENT_NAME": "__disconnect__", "INTERCOM_RESOLVER_NAME": "__intercom__", "INTER_COM_EVENT_NAMES": [ -- Gitee