From 972716b2e434206e329c90ce3a619ee96f1b87d1 Mon Sep 17 00:00:00 2001 From: joelchu Date: Wed, 25 Mar 2020 16:38:00 +0800 Subject: [PATCH 01/11] update deps before continue the test --- packages/ws-server-core/package.json | 2 +- packages/ws-server/package.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/ws-server-core/package.json b/packages/ws-server-core/package.json index 59cebd28..14b5aa66 100644 --- a/packages/ws-server-core/package.json +++ b/packages/ws-server-core/package.json @@ -37,7 +37,7 @@ "jsonql-errors": "^1.2.1", "jsonql-params-validator": "^1.6.2", "jsonql-resolver": "^1.2.2", - "jsonql-utils": "^1.2.5", + "jsonql-utils": "^1.2.6", "lodash": "^4.17.15" }, "devDependencies": { diff --git a/packages/ws-server/package.json b/packages/ws-server/package.json index 31634758..4957f8fb 100755 --- a/packages/ws-server/package.json +++ b/packages/ws-server/package.json @@ -33,8 +33,8 @@ "dependencies": { "colors": "^1.4.0", "debug": "^4.1.1", - "jsonql-constants": "^2.0.10", - "jsonql-utils": "^1.2.4", + "jsonql-constants": "^2.0.13", + "jsonql-utils": "^1.2.6", "jsonql-ws-server-core": "^0.8.0", "ws": "^7.2.3" }, -- Gitee From f7ec36e25e3dbc0a89f35bc32b196818a4ff267d Mon Sep 17 00:00:00 2001 From: joelchu Date: Wed, 25 Mar 2020 16:45:19 +0800 Subject: [PATCH 02/11] Fix the test error and the send before throw error --- packages/ws-server-core/src/share/helpers.js | 3 ++- .../ws-server/tests/ws-connect-error.test.js | 26 +++++++++++-------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/packages/ws-server-core/src/share/helpers.js b/packages/ws-server-core/src/share/helpers.js index de61d50c..5d38d638 100644 --- a/packages/ws-server-core/src/share/helpers.js +++ b/packages/ws-server-core/src/share/helpers.js @@ -14,11 +14,12 @@ const { chainFns, objDefineProps, objHasProp, + createWsReply, // port over to the jsonql-utils getResolverFromPayload, extractWsPayload } = require('jsonql-utils') -const { createWsReply } = require('../../../utils/src/socket') +// const { } = require('../../../utils/src/socket') // create debug diff --git a/packages/ws-server/tests/ws-connect-error.test.js b/packages/ws-server/tests/ws-connect-error.test.js index 40a5e7be..4518f4a9 100644 --- a/packages/ws-server/tests/ws-connect-error.test.js +++ b/packages/ws-server/tests/ws-connect-error.test.js @@ -62,17 +62,21 @@ test.cb(`It should able to extract the error object when error throw from the se localDebug('json decoded from msg:', data) - t.truthy(data.error, 'causeError should have error field') - // data.error = typeof data.error === 'string' ? JSON.parse(data.error) : data.error; - t.is(data.error.className, 'JsonqlResolverAppError') - t.is(json.type, ERROR_KEY) - - // The same problem happens again - // data.error.className === 'JsonqlResolverAppError' - // it returned a JsonqlError again - t.is(json.resolverName, 'causeError') - - t.end() + if (data.error) { + + t.truthy(data.error, 'causeError should have error field') + // data.error = typeof data.error === 'string' ? JSON.parse(data.error) : data.error; + t.is(data.error.className, 'JsonqlResolverAppError') + t.is(json.type, ERROR_KEY) + t.is(json.resolverName, 'causeError') + t.end() + } else { + // this seems weird but in fact, + // before the resolver throw error, it send a message out + // therefore here should able to capture a message + + debug('Got a send message:', data) + } } catch(e) { localDebug('error happens in the catch phrase and end the test', e) -- Gitee From f1ec6ac0c4e71fdd7cc7f00df8ea32aa423214af Mon Sep 17 00:00:00 2001 From: joelchu Date: Wed, 25 Mar 2020 18:51:59 +0800 Subject: [PATCH 03/11] Add a setup-event-handler placeholder --- .../src/handles/setup-event-handler.js | 8 ++++++++ packages/ws-server-core/tests/object.test.js | 14 ++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 packages/ws-server-core/src/handles/setup-event-handler.js diff --git a/packages/ws-server-core/src/handles/setup-event-handler.js b/packages/ws-server-core/src/handles/setup-event-handler.js new file mode 100644 index 00000000..1db1c628 --- /dev/null +++ b/packages/ws-server-core/src/handles/setup-event-handler.js @@ -0,0 +1,8 @@ +// this is the inter communication event setup + + +function setupEventHandler() { + +} + +module.exports = { setupEventHandler } \ No newline at end of file diff --git a/packages/ws-server-core/tests/object.test.js b/packages/ws-server-core/tests/object.test.js index 5b06df23..f71ce585 100644 --- a/packages/ws-server-core/tests/object.test.js +++ b/packages/ws-server-core/tests/object.test.js @@ -32,3 +32,17 @@ test(`Different way to extract data from payload`, t => { t.is(resolverName, name) }) + + +test(`Testing the chain object style interface`, t => { + function MyNumber(n) { + function x () { } + x.one = function() { n++; return this; }; + x.valueOf = function() { return n; }; + return x; + } + + const result = MyNumber(5).one().one().valueOf() + + t.is(7, result) +}) \ No newline at end of file -- Gitee From 3fac4e7911126c9189d412a24fc8a1a0cacf87fb Mon Sep 17 00:00:00 2001 From: joelchu Date: Wed, 25 Mar 2020 21:44:44 +0800 Subject: [PATCH 04/11] break down test passed next combine test --- packages/ws-server/package.json | 2 +- .../src/core/security/create-verify-client.js | 6 +-- packages/ws-server/src/modules.js | 4 +- packages/ws-server/tests/ws-jwt-auth.test.js | 47 ++++++++++++++----- 4 files changed, 40 insertions(+), 19 deletions(-) diff --git a/packages/ws-server/package.json b/packages/ws-server/package.json index 4957f8fb..d067a830 100755 --- a/packages/ws-server/package.json +++ b/packages/ws-server/package.json @@ -35,7 +35,7 @@ "debug": "^4.1.1", "jsonql-constants": "^2.0.13", "jsonql-utils": "^1.2.6", - "jsonql-ws-server-core": "^0.8.0", + "jsonql-ws-server-core": "^0.8.1", "ws": "^7.2.3" }, "devDependencies": { diff --git a/packages/ws-server/src/core/security/create-verify-client.js b/packages/ws-server/src/core/security/create-verify-client.js index 74a4c587..b7e7fa54 100644 --- a/packages/ws-server/src/core/security/create-verify-client.js +++ b/packages/ws-server/src/core/security/create-verify-client.js @@ -111,14 +111,13 @@ function createVerifyClient(namespace, opts, jwtOptions = {}, cb = localCb) { } // @TODO here we need to take the interceptor.validate method that created by // develop to run their own checks - - + // auth features const uri = req.url const token = getTokenFromQuery(uri) if (token) { - debug(`Got a token`, token) + debug(`Got a token`) try { const payload = jwtDecode(token, publicKey, jwtOptions) @@ -129,6 +128,7 @@ function createVerifyClient(namespace, opts, jwtOptions = {}, cb = localCb) { } // passing this along to the next info.req[SOCKET_STATE_KEY].userdata = payload + return done(payload) } catch(e) { cb({e, token, uri}) diff --git a/packages/ws-server/src/modules.js b/packages/ws-server/src/modules.js index 7bb40ce3..8e255bef 100644 --- a/packages/ws-server/src/modules.js +++ b/packages/ws-server/src/modules.js @@ -19,8 +19,8 @@ const { SOCKET_STATE_KEY, getSocketHandler -} = require('../../ws-server-core') -// require('jsonql-ws-server-core') +} = require('jsonql-ws-server-core') +// require('../../ws-server-core') module.exports = { diff --git a/packages/ws-server/tests/ws-jwt-auth.test.js b/packages/ws-server/tests/ws-jwt-auth.test.js index b97dc75c..db040483 100644 --- a/packages/ws-server/tests/ws-jwt-auth.test.js +++ b/packages/ws-server/tests/ws-jwt-auth.test.js @@ -22,6 +22,9 @@ const port = 3003 const baseUrl = `ws://localhost:${port}/${JSONQL_PATH}/` const { rainbow } = colors +const EventEmitter = require('@to1source/event') + + test.before(async t => { const { app, io } = await serverSetup({ contract, @@ -48,6 +51,8 @@ test.before(async t => { t.context.client_public = basicClient(baseUrl + 'public') // t.context.client_private_1 = await fullClient(baseUrl + 'private', t.context.token) + t.context.eventEmitter = new EventEmitter() + }) test.after(t => { @@ -55,7 +60,7 @@ test.after(t => { }) -test.cb('It should able to connect to public namespace without a token', t => { +test.cb.skip('It should able to connect to public namespace without a token', t => { // connect to the private channel t.plan(2) @@ -74,10 +79,9 @@ test.cb('It should able to connect to public namespace without a token', t => { // client.close() t.end() }) - }) -test.cb('It should able to connect to the private namespace', t => { +test.cb.skip('It should able to connect to the private namespace', t => { t.plan(2) let client = t.context.client_private @@ -95,28 +99,36 @@ test.cb('It should able to connect to the private namespace', t => { debug('second json', json) t.end() }) - /* - t.context.client_private_1.on('open', () => { - t.end() - }) - */ }) // @NOTE when we run this in serial, it could hang up. // Also if a 401 happens, does it mean the server die? or the client die (of course) // what about the other clients? Should we reconnect them? so many question at the moment test.cb(`first try to connect to the private without login and see what happens`, t => { - + const evtEmitter = t.context.eventEmitter + const evtName = 'count' + const add = () => evtEmitter.$trigger(evtName) const plan = 3 t.plan(plan) + let ctn = 0 + evtEmitter.$on(evtName, () => { + ++ctn + debug(rainbow('============================= count added ==========================='), ctn) + if (ctn >= plan) { + t.end() + } + }) + // crash out the client let authClient = basicClient(baseUrl + 'private') // this is useful we could add this to the client to handle the error authClient.on('error', err => { debug(rainbow(`Got error`), err) + t.truthy(err, `Expect to get an error`) // (1) + add() }) @@ -128,29 +140,38 @@ test.cb(`first try to connect to the private without login and see what happens` debug(rainbow(`onopen`)) pClient.send( createPayload('availableToEveryone') ) }) + pClient.on('message', data => { let json = extractWsPayload(data) debug(rainbow('PUBLIC reply'), json) + t.truthy(json.data, `Expect to get respond from the public nsp`) + add() }) + pClient.on('error', err => { debug(rainbow('public client error'), err) }) - - setTimeout(() => { authClient = basicClient(baseUrl + 'private', t.context.token1) + authClient.on('message', data => { ++ctn let json = extractWsPayload(data) + debug(rainbow(ctn+''), json) + t.truthy(json.data) // 3 + authClient.close() - t.end() + add() }) + authClient.on('open', () => { - authClient.send( createPayload('secretChatroom', 'la', 'na') ) + authClient.send( + createPayload('secretChatroom', 'la', 'na') + ) }) }, 500) -- Gitee From d5e5fcd573498013df56f689ce8aedacc549c48c Mon Sep 17 00:00:00 2001 From: joelchu Date: Wed, 25 Mar 2020 22:36:32 +0800 Subject: [PATCH 05/11] disable the cache handleNsp because it cause a weird bug probably due to the ws --- packages/ws-server-core/package.json | 2 +- .../ws-server-core/src/handles/handle-nsp-resolvers.js | 8 ++++---- .../ws-server-core/src/resolver/resolve-socket-method.js | 1 + packages/ws-server/src/modules.js | 4 ++-- packages/ws-server/tests/ws-jwt-auth.test.js | 4 ++-- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/ws-server-core/package.json b/packages/ws-server-core/package.json index 14b5aa66..4bab441f 100644 --- a/packages/ws-server-core/package.json +++ b/packages/ws-server-core/package.json @@ -1,6 +1,6 @@ { "name": "jsonql-ws-server-core", - "version": "0.8.1", + "version": "0.8.2", "description": "This is the core module that drive the Jsonql WS Socket server, not for direct use.", "main": "index.js", "files": [ diff --git a/packages/ws-server-core/src/handles/handle-nsp-resolvers.js b/packages/ws-server-core/src/handles/handle-nsp-resolvers.js index ca7e3fdd..d8b22103 100644 --- a/packages/ws-server-core/src/handles/handle-nsp-resolvers.js +++ b/packages/ws-server-core/src/handles/handle-nsp-resolvers.js @@ -25,11 +25,13 @@ let nspHandlerFn */ function handleNspResolvers(deliverFn, ws, opts) { // check the cache method first + /* + @BUG when we use this cache method, the reply broken halfway if (typeof nspHandlerFn === 'function') { debug('return the cached nspHandlerFn') return nspHandlerFn } - + */ /** * The actual method to action on the execution of the resolver * @param {string} namespace connected namespace @@ -39,7 +41,7 @@ function handleNspResolvers(deliverFn, ws, opts) { * @param {object} userdata userdata * @return {promise} resolve the result */ - nspHandlerFn = (namespace, resolverName, args, params, userdata) => ( + return (namespace, resolverName, args, params, userdata) => ( validateInput(args, params) .then(_args => resolveSocketMethod( namespace, @@ -62,8 +64,6 @@ function handleNspResolvers(deliverFn, ws, opts) { handleError(deliverFn, resolverName, err) }) ) - - return nspHandlerFn } module.exports = { handleNspResolvers } diff --git a/packages/ws-server-core/src/resolver/resolve-socket-method.js b/packages/ws-server-core/src/resolver/resolve-socket-method.js index 9bd92b04..cff9cd85 100644 --- a/packages/ws-server-core/src/resolver/resolve-socket-method.js +++ b/packages/ws-server-core/src/resolver/resolve-socket-method.js @@ -29,6 +29,7 @@ const resolveSocketMethod = function( // resolverName, opts, key = null, store = null const key = [namespace, resolverName].join('-') const store = opts[CACHE_STORE_PROP_KEY] + const actionFn = getCompleteSocketResolver(resolverName, opts, key, store) const injectorFns = getInjectors() diff --git a/packages/ws-server/src/modules.js b/packages/ws-server/src/modules.js index 8e255bef..88c2072c 100644 --- a/packages/ws-server/src/modules.js +++ b/packages/ws-server/src/modules.js @@ -19,8 +19,8 @@ const { SOCKET_STATE_KEY, getSocketHandler -} = require('jsonql-ws-server-core') -// require('../../ws-server-core') +} = require('../../ws-server-core') +// require('jsonql-ws-server-core') module.exports = { diff --git a/packages/ws-server/tests/ws-jwt-auth.test.js b/packages/ws-server/tests/ws-jwt-auth.test.js index db040483..cc3f741f 100644 --- a/packages/ws-server/tests/ws-jwt-auth.test.js +++ b/packages/ws-server/tests/ws-jwt-auth.test.js @@ -60,7 +60,7 @@ test.after(t => { }) -test.cb.skip('It should able to connect to public namespace without a token', t => { +test.cb('It should able to connect to public namespace without a token', t => { // connect to the private channel t.plan(2) @@ -81,7 +81,7 @@ test.cb.skip('It should able to connect to public namespace without a token', t }) }) -test.cb.skip('It should able to connect to the private namespace', t => { +test.cb('It should able to connect to the private namespace', t => { t.plan(2) let client = t.context.client_private -- Gitee From 4db2bdf34c53b44d12d38dc134c1a42b09da8f2e Mon Sep 17 00:00:00 2001 From: joelchu Date: Wed, 25 Mar 2020 23:13:55 +0800 Subject: [PATCH 06/11] update module and confirm working --- packages/ws-server/package.json | 2 +- packages/ws-server/src/modules.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/ws-server/package.json b/packages/ws-server/package.json index d067a830..a549e007 100755 --- a/packages/ws-server/package.json +++ b/packages/ws-server/package.json @@ -35,7 +35,7 @@ "debug": "^4.1.1", "jsonql-constants": "^2.0.13", "jsonql-utils": "^1.2.6", - "jsonql-ws-server-core": "^0.8.1", + "jsonql-ws-server-core": "^0.8.2", "ws": "^7.2.3" }, "devDependencies": { diff --git a/packages/ws-server/src/modules.js b/packages/ws-server/src/modules.js index 88c2072c..23715832 100644 --- a/packages/ws-server/src/modules.js +++ b/packages/ws-server/src/modules.js @@ -19,8 +19,8 @@ const { SOCKET_STATE_KEY, getSocketHandler -} = require('../../ws-server-core') -// require('jsonql-ws-server-core') +} = require('jsonql-ws-server-core') +// require('../../ws-server-core') module.exports = { -- Gitee From 97b004292b90752281af30f49ac8c1d19a3713f5 Mon Sep 17 00:00:00 2001 From: joelchu Date: Thu, 26 Mar 2020 10:00:21 +0800 Subject: [PATCH 07/11] the suspend state is working once the lock is leaved --- packages/ws-client-core/package.json | 10 +++++----- packages/ws-client-core/src/callers/setup-resolver.js | 2 -- .../ws-client-core/src/listener/event-listeners.js | 9 +++++++++ packages/ws-client-core/src/options/index.js | 4 ++-- packages/ws-client-core/tests/fixtures/server-setup.js | 4 ++-- 5 files changed, 18 insertions(+), 11 deletions(-) diff --git a/packages/ws-client-core/package.json b/packages/ws-client-core/package.json index ade2b2de..e654c19c 100644 --- a/packages/ws-client-core/package.json +++ b/packages/ws-client-core/package.json @@ -56,17 +56,17 @@ }, "dependencies": { "@to1source/event": "^1.1.1", - "jsonql-constants": "^2.0.9", + "jsonql-constants": "^2.0.13", "jsonql-errors": "^1.2.1", - "jsonql-params-validator": "^1.6.1", - "jsonql-utils": "^1.2.4" + "jsonql-params-validator": "^1.6.2", + "jsonql-utils": "^1.2.6" }, "devDependencies": { - "ava": "^3.5.0", + "ava": "^3.5.1", "esm": "^3.2.25", "fs-extra": "^9.0.0", "jsonql-contract": "^1.9.1", - "jsonql-jwt": "^1.3.10", + "jsonql-jwt": "^1.4.0", "jsonql-ws-server": "^1.7.8", "kefir": "^3.8.6", "ws": "^7.2.3" diff --git a/packages/ws-client-core/src/callers/setup-resolver.js b/packages/ws-client-core/src/callers/setup-resolver.js index b7cdbdc4..0f9a7184 100644 --- a/packages/ws-client-core/src/callers/setup-resolver.js +++ b/packages/ws-client-core/src/callers/setup-resolver.js @@ -34,8 +34,6 @@ function createResolver(ee, namespace, resolverName, params, log) { } } - - /** * The first one in the chain, just setup a namespace prop * the rest are passing through diff --git a/packages/ws-client-core/src/listener/event-listeners.js b/packages/ws-client-core/src/listener/event-listeners.js index 48db5013..b7626b7e 100644 --- a/packages/ws-client-core/src/listener/event-listeners.js +++ b/packages/ws-client-core/src/listener/event-listeners.js @@ -118,4 +118,13 @@ export const logoutEvtListener = (nsps, namespaces, ee, opts) => { notLoginWsListerner(privateNamespace, ee, opts) } ) +} + +/** + * connect event listener this will not be a standalone one, instead + * will combine with the client one, because this is to release the + * $suspend + */ +export const releaseEvtOnConnection = (nsps, namespaces, ee, opts) => { + // @TODO } \ No newline at end of file diff --git a/packages/ws-client-core/src/options/index.js b/packages/ws-client-core/src/options/index.js index 007c51b5..d8bdfb53 100644 --- a/packages/ws-client-core/src/options/index.js +++ b/packages/ws-client-core/src/options/index.js @@ -70,7 +70,7 @@ function postCheckInjectOpts(opts) { opts.log = getLogFn(opts) opts.eventEmitter = getEventEmitter(opts) - + return opts }) } @@ -96,7 +96,7 @@ function createRequiredParams(opts) { // next we loop the namespace and suspend all the events prefix with namespace // ee.$suspendEvent - namespaces.forEach(namespace => ee.$suspendEvent(namespace)) + // namespaces.forEach(namespace => ee.$suspendEvent(namespace)) return { opts, nspMap, ee } } diff --git a/packages/ws-client-core/tests/fixtures/server-setup.js b/packages/ws-client-core/tests/fixtures/server-setup.js index 0f27ea07..716c74cb 100644 --- a/packages/ws-client-core/tests/fixtures/server-setup.js +++ b/packages/ws-client-core/tests/fixtures/server-setup.js @@ -6,8 +6,8 @@ const { join } = require('path') const resolverDir = join(__dirname, 'resolvers') -// require('../../../ws-server') -const { jsonqlWsServer } = require('jsonql-ws-server') +const { jsonqlWsServer } = require('../../../ws-server') +// require('jsonql-ws-server') // start const server = http.createServer(function(req, res) { -- Gitee From 8cad8bb2917cac5110808e4fa40008c86f4f9ed8 Mon Sep 17 00:00:00 2001 From: joelchu Date: Thu, 26 Mar 2020 10:11:06 +0800 Subject: [PATCH 08/11] jsonql-ws-server 1.7.9 --- packages/ws-client-core/src/options/defaults.js | 4 +++- packages/ws-client-core/src/options/index.js | 5 +++-- packages/ws-client-core/tests/fixtures/server-setup.js | 2 ++ packages/ws-server/package.json | 2 +- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/ws-client-core/src/options/defaults.js b/packages/ws-client-core/src/options/defaults.js index a29877c1..8ca65838 100644 --- a/packages/ws-client-core/src/options/defaults.js +++ b/packages/ws-client-core/src/options/defaults.js @@ -70,7 +70,9 @@ const configCheckMap = { // we will use this for determine the socket.io client type as well - @TODO remove or rename useJwt: createConfig(true, [BOOLEAN_TYPE, STRING_TYPE]), // this is going to replace the use of useJwt === string next - authStrKey: createConfig(null, [STRING_TYPE]) + authStrKey: createConfig(null, [STRING_TYPE]), + // this is experimental to see the effects, might take downlater + suspendOnStart: createConfig(false, [BOOLEAN_TYPE]) } // socket client diff --git a/packages/ws-client-core/src/options/index.js b/packages/ws-client-core/src/options/index.js index d8bdfb53..135cb8bc 100644 --- a/packages/ws-client-core/src/options/index.js +++ b/packages/ws-client-core/src/options/index.js @@ -95,8 +95,9 @@ function createRequiredParams(opts) { log(`namespaces`, namespaces) // next we loop the namespace and suspend all the events prefix with namespace - // ee.$suspendEvent - // namespaces.forEach(namespace => ee.$suspendEvent(namespace)) + if (opts.suspendOnStart === true) { + namespaces.forEach(namespace => ee.$suspendEvent(namespace)) + } return { opts, nspMap, ee } } diff --git a/packages/ws-client-core/tests/fixtures/server-setup.js b/packages/ws-client-core/tests/fixtures/server-setup.js index 716c74cb..3ee2469b 100644 --- a/packages/ws-client-core/tests/fixtures/server-setup.js +++ b/packages/ws-client-core/tests/fixtures/server-setup.js @@ -3,6 +3,8 @@ const http = require('http') const { join } = require('path') // const debug = require('debug')('jsonql-ws-client:fixtures:server') // const { JSONQL_PATH } = require('jsonql-constants') +// const colors = require('colors/safe') +// const logger = (str, ...args) => Reflect.apply(debug, null, [colors.white.bgMagenta(str), ...args]) const resolverDir = join(__dirname, 'resolvers') diff --git a/packages/ws-server/package.json b/packages/ws-server/package.json index a549e007..fa5d0b06 100755 --- a/packages/ws-server/package.json +++ b/packages/ws-server/package.json @@ -1,6 +1,6 @@ { "name": "jsonql-ws-server", - "version": "1.7.8", + "version": "1.7.9", "description": "Setup WebSocket server for the jsonql to run on the same host, automatic generate public / private channel using contract", "main": "index.js", "files": [ -- Gitee From 5c8c5de93d733ec09821606b3be56cdb74801dc5 Mon Sep 17 00:00:00 2001 From: joelchu Date: Thu, 26 Mar 2020 10:15:39 +0800 Subject: [PATCH 09/11] update the jsonql-ws-server and all test still passed --- packages/ws-client-core/package.json | 2 +- packages/ws-client-core/src/options/index.js | 3 +++ packages/ws-client-core/tests/fixtures/server-setup.js | 5 +++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/ws-client-core/package.json b/packages/ws-client-core/package.json index e654c19c..7cb488d0 100644 --- a/packages/ws-client-core/package.json +++ b/packages/ws-client-core/package.json @@ -67,7 +67,7 @@ "fs-extra": "^9.0.0", "jsonql-contract": "^1.9.1", "jsonql-jwt": "^1.4.0", - "jsonql-ws-server": "^1.7.8", + "jsonql-ws-server": "^1.7.9", "kefir": "^3.8.6", "ws": "^7.2.3" }, diff --git a/packages/ws-client-core/src/options/index.js b/packages/ws-client-core/src/options/index.js index 135cb8bc..171e941a 100644 --- a/packages/ws-client-core/src/options/index.js +++ b/packages/ws-client-core/src/options/index.js @@ -97,6 +97,9 @@ function createRequiredParams(opts) { // next we loop the namespace and suspend all the events prefix with namespace if (opts.suspendOnStart === true) { namespaces.forEach(namespace => ee.$suspendEvent(namespace)) + // then we create a new method to releas the queue + // we prefix it with the $ to notify this is not a jsonql part methods + opts.$releaseNamespace = () => ee.$release() } return { opts, nspMap, ee } diff --git a/packages/ws-client-core/tests/fixtures/server-setup.js b/packages/ws-client-core/tests/fixtures/server-setup.js index 3ee2469b..0a432a9e 100644 --- a/packages/ws-client-core/tests/fixtures/server-setup.js +++ b/packages/ws-client-core/tests/fixtures/server-setup.js @@ -8,8 +8,9 @@ const { join } = require('path') const resolverDir = join(__dirname, 'resolvers') -const { jsonqlWsServer } = require('../../../ws-server') -// require('jsonql-ws-server') +const { jsonqlWsServer } = require('jsonql-ws-server') +// require('../../../ws-server') +// // start const server = http.createServer(function(req, res) { -- Gitee From f8fff7b3c4f554e8c5cacc5c3cedaf8da34f7685 Mon Sep 17 00:00:00 2001 From: joelchu Date: Thu, 26 Mar 2020 11:34:39 +0800 Subject: [PATCH 10/11] adding the suspendOnStart code --- packages/constants/package.json | 2 +- packages/constants/prop.js | 4 +++- packages/ws-client-core/src/listener/event-listeners.js | 4 ++++ packages/ws-client-core/src/options/index.js | 6 +++++- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/constants/package.json b/packages/constants/package.json index 073e0f88..ff1f011e 100755 --- a/packages/constants/package.json +++ b/packages/constants/package.json @@ -1,6 +1,6 @@ { "name": "jsonql-constants", - "version": "2.0.13", + "version": "2.0.14", "description": "All the share constants for jsonql modules", "main": "main.js", "module": "index.js", diff --git a/packages/constants/prop.js b/packages/constants/prop.js index 0744a21f..161c5721 100644 --- a/packages/constants/prop.js +++ b/packages/constants/prop.js @@ -103,4 +103,6 @@ export const CONNECTED_PROP_KEY = 'connected' // share naming to id the cache store object export const CACHE_STORE_PROP_KEY = 'cacheStore' -export const EVENT_EMITTER_PROP_KEY = 'eventEmitter' \ No newline at end of file +export const EVENT_EMITTER_PROP_KEY = 'eventEmitter' +// track this key if we want to suspend event on start +export const SUSPEND_EVENT_PROP_KEY = 'suspendOnStart' \ No newline at end of file diff --git a/packages/ws-client-core/src/listener/event-listeners.js b/packages/ws-client-core/src/listener/event-listeners.js index b7626b7e..f5f548a8 100644 --- a/packages/ws-client-core/src/listener/event-listeners.js +++ b/packages/ws-client-core/src/listener/event-listeners.js @@ -24,6 +24,10 @@ export const notConnectedListener = (namespace, ee, opts) => { createEvt(namespace, EMIT_EVT), function disconnectedEvtCallback(resolverName, args) { log(`[disconnectedListerner] hijack the ws call`, namespace, resolverName, args) + // Now we suspend all the calls but note the existing one won't be affected + // we need to update the methods to move everything across + + const error = { message: DISCONNECTED_ERROR_MSG } diff --git a/packages/ws-client-core/src/options/index.js b/packages/ws-client-core/src/options/index.js index 171e941a..a5c0c568 100644 --- a/packages/ws-client-core/src/options/index.js +++ b/packages/ws-client-core/src/options/index.js @@ -96,10 +96,14 @@ function createRequiredParams(opts) { // next we loop the namespace and suspend all the events prefix with namespace if (opts.suspendOnStart === true) { - namespaces.forEach(namespace => ee.$suspendEvent(namespace)) + // we create this as a function then we can call it again + opts.$suspendNamepsace = () => namespaces.forEach(namespace => ee.$suspendEvent(namespace)) // then we create a new method to releas the queue // we prefix it with the $ to notify this is not a jsonql part methods opts.$releaseNamespace = () => ee.$release() + + // now run it + opts.$suspendNamepsace() } return { opts, nspMap, ee } -- Gitee From e4850629e5918c64b7ea9353eafaadf329c3232c Mon Sep 17 00:00:00 2001 From: joelchu Date: Thu, 26 Mar 2020 11:35:05 +0800 Subject: [PATCH 11/11] jsonql-constants 2.0.14 --- packages/constants/README.md | 1 + packages/constants/browser.js | 1 + packages/constants/constants.json | 1 + packages/constants/index.js | 4 +++- packages/constants/main.js | 1 + 5 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/constants/README.md b/packages/constants/README.md index 40f9fea8..690c776a 100755 --- a/packages/constants/README.md +++ b/packages/constants/README.md @@ -172,6 +172,7 @@ Please consult the detail break down below. - CONNECTED_PROP_KEY - CACHE_STORE_PROP_KEY - EVENT_EMITTER_PROP_KEY +- SUSPEND_EVENT_PROP_KEY ### SOCKET diff --git a/packages/constants/browser.js b/packages/constants/browser.js index ccd312a9..2891dfe2 100644 --- a/packages/constants/browser.js +++ b/packages/constants/browser.js @@ -173,6 +173,7 @@ var jsonqlConstants = { "CONNECTED_PROP_KEY": "connected", "CACHE_STORE_PROP_KEY": "cacheStore", "EVENT_EMITTER_PROP_KEY": "eventEmitter", + "SUSPEND_EVENT_PROP_KEY": "suspendOnStart", "SOCKET_PING_EVENT_NAME": "__ping__", "SWITCH_USER_EVENT_NAME": "__switch__", "LOGIN_EVENT_NAME": "__login__", diff --git a/packages/constants/constants.json b/packages/constants/constants.json index 8136611f..cdb9aa67 100644 --- a/packages/constants/constants.json +++ b/packages/constants/constants.json @@ -173,6 +173,7 @@ "CONNECTED_PROP_KEY": "connected", "CACHE_STORE_PROP_KEY": "cacheStore", "EVENT_EMITTER_PROP_KEY": "eventEmitter", + "SUSPEND_EVENT_PROP_KEY": "suspendOnStart", "SOCKET_PING_EVENT_NAME": "__ping__", "SWITCH_USER_EVENT_NAME": "__switch__", "LOGIN_EVENT_NAME": "__login__", diff --git a/packages/constants/index.js b/packages/constants/index.js index 5a40f845..5b24c6c5 100644 --- a/packages/constants/index.js +++ b/packages/constants/index.js @@ -248,7 +248,9 @@ export const CONNECTED_PROP_KEY = 'connected' // share naming to id the cache store object export const CACHE_STORE_PROP_KEY = 'cacheStore' -export const EVENT_EMITTER_PROP_KEY = 'eventEmitter' /* socket.js */ +export const EVENT_EMITTER_PROP_KEY = 'eventEmitter' +// track this key if we want to suspend event on start +export const SUSPEND_EVENT_PROP_KEY = 'suspendOnStart' /* socket.js */ // the constants file is gettig too large // we need to split up and group the related constant in one file diff --git a/packages/constants/main.js b/packages/constants/main.js index dfa27981..285b0f5b 100644 --- a/packages/constants/main.js +++ b/packages/constants/main.js @@ -173,6 +173,7 @@ module.exports = { "CONNECTED_PROP_KEY": "connected", "CACHE_STORE_PROP_KEY": "cacheStore", "EVENT_EMITTER_PROP_KEY": "eventEmitter", + "SUSPEND_EVENT_PROP_KEY": "suspendOnStart", "SOCKET_PING_EVENT_NAME": "__ping__", "SWITCH_USER_EVENT_NAME": "__switch__", "LOGIN_EVENT_NAME": "__login__", -- Gitee