gamerpc 7.1.2 → 8.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gamerpc",
3
- "version": "7.1.2",
3
+ "version": "8.0.1",
4
4
  "author": "bookmansoft <ceo@920.cc>",
5
5
  "contributors": [
6
6
  "bookmansoft <ceo@920.cc>"
@@ -18,7 +18,7 @@
18
18
  "cloud"
19
19
  ],
20
20
  "description": "connector for gamecloud & gamegold",
21
- "main": "./lib/gamerpc7.1.2.js",
21
+ "main": "index.js",
22
22
  "scripts": {
23
23
  "test": "mocha",
24
24
  "build": "set NODE_OPTIONS=--openssl-legacy-provider & cross-env NODE_ENV=production webpack ./src/index.js --mode=production"
@@ -32,13 +32,10 @@
32
32
  },
33
33
  "homepage": "https://github.com/bookmansoft/gamegoldtoolkit#readme",
34
34
  "dependencies": {
35
- "create-hmac": "1.1.7",
36
- "elliptic": "^6.5.4",
37
- "node-fetch": "^2.6.1",
35
+ "gamerpc": "^8.0.0",
38
36
  "socket.io-client": "^4.7.2"
39
37
  },
40
38
  "devDependencies": {
41
- "mocha": "^10.2.0",
42
39
  "babel": "^6.23.0",
43
40
  "babel-core": "^6.26.3",
44
41
  "babel-loader": "^7.1.5",
@@ -47,6 +44,10 @@
47
44
  "babel-preset-es2015": "^6.24.1",
48
45
  "babel-preset-stage-2": "^6.24.1",
49
46
  "cross-env": "^5.2.1",
47
+ "mocha": "^10.2.0",
48
+ "create-hmac": "1.1.7",
49
+ "elliptic": "^6.5.4",
50
+ "node-fetch": "^2.6.1",
50
51
  "webpack": "^4.46.0",
51
52
  "webpack-cli": "^3.3.2"
52
53
  }
package/src/gameConn.js CHANGED
@@ -1,10 +1,10 @@
1
- const {stringify, NotifyType, encrypt, decrypt, extendObj, CommStatus, clone, ReturnCodeName, ReturnCode, CommMode, createHmac} = require('./utils/util');
1
+ //const {encrypt, decrypt, createHmac} = require('./utils/util');
2
+ const {stringify, NotifyType, extendObj, CommStatus, clone, ReturnCodeName, ReturnCode, CommMode, io} = require('./utils/util');
2
3
  const EventEmitter = require('events').EventEmitter;
3
4
  const Indicator = require('./utils/Indicator');
4
- const assert = require('./utils/assert')
5
- let {sha1, hash160, hash256, verifyData, generateKey, signObj, verifyObj, verifyAddress} = require('./utils/verifyData');
6
- const Secret = require('./utils/secret')
7
- const ioclient = require('./utils/socket.io.min.js');
5
+ // const assert = require('./utils/assert')
6
+ // let {sha1, hash160, hash256, verifyData, generateKey, signObj, verifyObj, verifyAddress} = require('./utils/verifyData');
7
+ // const Secret = require('./utils/secret')
8
8
 
9
9
  /**
10
10
  * RPC控件
@@ -58,7 +58,7 @@ class Remote {
58
58
 
59
59
  this.close();
60
60
 
61
- this.socket = ioclient(`${this.config.UrlHead}://${ip}:${port}`, {'force new connection': true});
61
+ this.socket = io(`${this.config.UrlHead}://${ip}:${port}`, {'force new connection': true});
62
62
  this.socket.on('notify', ret => {//监听推送消息
63
63
  if(this.notifyHandles[ret.type]) {
64
64
  this.notifyHandles[ret.type](ret.info);
@@ -684,22 +684,22 @@ class Remote {
684
684
  }
685
685
 
686
686
  Remote.prototype.CommMode = CommMode;
687
- Remote.prototype.createHmac = createHmac;
688
- Remote.prototype.assert = assert;
687
+ // Remote.prototype.createHmac = createHmac;
688
+ // Remote.prototype.assert = assert;
689
689
  Remote.prototype.stringify = stringify;
690
- Remote.prototype.encrypt = encrypt;
691
- Remote.prototype.decrypt = decrypt;
692
- Remote.prototype.verifyData = verifyData;
693
- Remote.prototype.generateKey = generateKey;
694
- Remote.prototype.signObj = signObj;
695
- Remote.prototype.verifyObj = verifyObj;
696
- Remote.prototype.verifyAddress = verifyAddress;
690
+ // Remote.prototype.encrypt = encrypt;
691
+ // Remote.prototype.decrypt = decrypt;
692
+ // Remote.prototype.verifyData = verifyData;
693
+ // Remote.prototype.generateKey = generateKey;
694
+ // Remote.prototype.signObj = signObj;
695
+ // Remote.prototype.verifyObj = verifyObj;
696
+ // Remote.prototype.verifyAddress = verifyAddress;
697
697
  Remote.prototype.CommStatus = CommStatus;
698
698
  Remote.prototype.ReturnCode = ReturnCode;
699
699
  Remote.prototype.NotifyType = NotifyType;
700
- Remote.prototype.Secret = Secret;
701
- Remote.prototype.hash256 = hash256;
702
- Remote.prototype.hash160 = hash160;
703
- Remote.prototype.sha1 = sha1;
700
+ // Remote.prototype.Secret = Secret;
701
+ // Remote.prototype.hash256 = hash256;
702
+ // Remote.prototype.hash160 = hash160;
703
+ // Remote.prototype.sha1 = sha1;
704
704
 
705
705
  module.exports = Remote;
package/src/index.js CHANGED
@@ -13,37 +13,35 @@ Array.prototype.randObj = function() {
13
13
  }
14
14
  }
15
15
 
16
- const assert = require('./utils/assert')
17
- const {CommStatus, createHmac, ReturnCode, CommMode, NotifyType, encrypt, decrypt, stringify} = require('./utils/util');
18
- let {sha1, hash160, hash256, verifyData, generateKey, signObj, verifyObj, verifyAddress} = require('./utils/verifyData');
19
- const Secret = require('./utils/secret')
16
+ //const assert = require('./utils/assert')
17
+ const {CommStatus, ReturnCode, CommMode, NotifyType, stringify} = require('./utils/util');
18
+ //const {createHmac, encrypt, decrypt} = require('./utils/util');
19
+ // let {sha1, hash160, hash256, verifyData, generateKey, signObj, verifyObj, verifyAddress} = require('./utils/verifyData');
20
+ // const Secret = require('./utils/secret')
20
21
 
21
22
  const toolkit = exports;
22
23
 
23
- //主网连接器
24
- toolkit.conn = require('./authConn');
25
-
26
24
  //游戏云连接器
27
25
  toolkit.gameconn = require('./gameConn');
28
26
 
29
27
  //实用函数列表
30
- toolkit.assert = assert;
28
+ //toolkit.assert = assert;
31
29
  toolkit.stringify = stringify;
32
- toolkit.encrypt = encrypt;
33
- toolkit.decrypt = decrypt;
34
- toolkit.verifyData = verifyData;
35
- toolkit.generateKey = generateKey;
36
- toolkit.signObj = signObj;
37
- toolkit.verifyObj = verifyObj;
38
- toolkit.verifyAddress = verifyAddress;
30
+ // toolkit.encrypt = encrypt;
31
+ // toolkit.decrypt = decrypt;
32
+ // toolkit.verifyData = verifyData;
33
+ // toolkit.generateKey = generateKey;
34
+ // toolkit.signObj = signObj;
35
+ // toolkit.verifyObj = verifyObj;
36
+ // toolkit.verifyAddress = verifyAddress;
39
37
  toolkit.CommMode = CommMode;
40
38
  toolkit.CommStatus = CommStatus;
41
39
  toolkit.ReturnCode = ReturnCode;
42
40
  toolkit.NotifyType = NotifyType;
43
- toolkit.createHmac = createHmac;
44
- toolkit.Secret = Secret;
45
- toolkit.hash256 = hash256;
46
- toolkit.hash160 = hash160;
47
- toolkit.sha1 = sha1;
41
+ // toolkit.createHmac = createHmac;
42
+ // toolkit.Secret = Secret;
43
+ // toolkit.hash256 = hash256;
44
+ // toolkit.hash160 = hash160;
45
+ // toolkit.sha1 = sha1;
48
46
 
49
47
  global.toolkit = toolkit;
package/src/utils/util.js CHANGED
@@ -5,11 +5,16 @@
5
5
 
6
6
  'use strict';
7
7
 
8
- const assert = require('assert');
8
+ //const assert = require('assert');
9
9
  const nodeUtil = require('util');
10
- const aes = require('./aes');
11
- const createHmac = require('create-hmac/browser');
12
- const Buffer = require('safe-buffer').Buffer
10
+ // const aes = require('./aes');
11
+ // const createHmac = require('create-hmac/browser');
12
+ const io = require('socket.io-client');
13
+ // const Buffer = require('safe-buffer').Buffer
14
+
15
+ function assert(ok) {
16
+ throw new Error('something wrong');
17
+ }
13
18
 
14
19
  /**
15
20
  * @exports utils/util
@@ -81,73 +86,6 @@ util.sprintf = function sprintf() {
81
86
  return o.join('');
82
87
  }
83
88
 
84
- /**
85
- * 加密方法
86
- * @param key 加密key
87
- * @param iv 向量
88
- * @param data 需要加密的数据
89
- * @returns string
90
- */
91
- util.encrypt = function encrypt(key, iv, data) {
92
- if(!Buffer.isBuffer(key)) {
93
- assert(typeof key === 'string');
94
- key = Buffer.from(key, 'binary')
95
- }
96
-
97
- if(!Buffer.isBuffer(iv)) {
98
- assert(typeof iv === 'string');
99
- iv = Buffer.from(iv, 'binary')
100
- }
101
-
102
- if(!Buffer.isBuffer(data)) {
103
- assert(typeof data === 'string');
104
- data = Buffer.from(data, 'binary')
105
- }
106
-
107
- var crypted = aes.encipher(data, key, iv);
108
-
109
- crypted = Buffer.from(crypted, 'binary');
110
-
111
- let ret = Buffer.alloc(crypted.length*2);
112
- for(let i = 0; i < crypted.length; i++){
113
- ret[2*i] = (crypted[i] >> 4) + 97;
114
- ret[2*i+1] = (crypted[i] & 0x0F) + 97;
115
- }
116
- return ret.toString('binary');
117
- };
118
-
119
- /**
120
- * 解密方法
121
- * @param key 解密的key
122
- * @param iv 向量
123
- * @param data 密文
124
- * @returns string
125
- */
126
- util.decrypt = function decrypt(key, iv, data) {
127
- if(!Buffer.isBuffer(key)) {
128
- assert(typeof key === 'string');
129
- key = Buffer.from(key, 'binary')
130
- }
131
-
132
- if(!Buffer.isBuffer(iv)) {
133
- assert(typeof iv === 'string');
134
- iv = Buffer.from(iv, 'binary')
135
- }
136
-
137
- if(!Buffer.isBuffer(data)) {
138
- assert(typeof data === 'string');
139
- data = Buffer.from(data, 'binary')
140
- }
141
-
142
- let ret = Buffer.alloc(data.length/2);
143
- for(let i = 0; i < ret.length; i++){
144
- ret[i] = ((data[i*2]-97)<<4) | (data[i*2+1]-97);
145
- }
146
-
147
- var decoded = aes.decipher(ret, key, iv);
148
- return decoded.toString('binary');
149
- };
150
-
151
89
  /**
152
90
  * Test whether a number is Number,
153
91
  * finite, and below MAX_SAFE_INTEGER.
@@ -258,9 +196,10 @@ util.stringify = function(data, exclude) {
258
196
  }
259
197
  });
260
198
  return base;
261
- } else if(Buffer.isBuffer(data)) {
262
- return data.toString('base64');
263
199
  }
200
+ // else if(Buffer.isBuffer(data)) {
201
+ // return data.toString('base64');
202
+ // }
264
203
 
265
204
  return data;
266
205
  }
@@ -655,40 +594,40 @@ util.random = function random(min, max) {
655
594
  /**
656
595
  * Create a 32 or 64 bit nonce.
657
596
  * @param {Number} size
658
- * @returns {Buffer}
597
+ * @returns {*}
659
598
  */
660
599
 
661
- util.nonce = function nonce(size) {
662
- let n, data;
663
-
664
- if (!size)
665
- size = 8;
666
-
667
- switch (size) {
668
- case 8:
669
- data = Buffer.allocUnsafe(8);
670
- n = util.random(0, 0x100000000);
671
- data.writeUInt32LE(n, 0, true);
672
- n = util.random(0, 0x100000000);
673
- data.writeUInt32LE(n, 4, true);
674
- break;
675
- case 4:
676
- data = Buffer.allocUnsafe(4);
677
- n = util.random(0, 0x100000000);
678
- data.writeUInt32LE(n, 0, true);
679
- break;
680
- default:
681
- assert(false, 'Bad nonce size.');
682
- break;
683
- }
684
-
685
- return data;
686
- };
600
+ // util.nonce = function nonce(size) {
601
+ // let n, data;
602
+
603
+ // if (!size)
604
+ // size = 8;
605
+
606
+ // switch (size) {
607
+ // case 8:
608
+ // data = Buffer.allocUnsafe(8);
609
+ // n = util.random(0, 0x100000000);
610
+ // data.writeUInt32LE(n, 0, true);
611
+ // n = util.random(0, 0x100000000);
612
+ // data.writeUInt32LE(n, 4, true);
613
+ // break;
614
+ // case 4:
615
+ // data = Buffer.allocUnsafe(4);
616
+ // n = util.random(0, 0x100000000);
617
+ // data.writeUInt32LE(n, 0, true);
618
+ // break;
619
+ // default:
620
+ // assert(false, 'Bad nonce size.');
621
+ // break;
622
+ // }
623
+
624
+ // return data;
625
+ // };
687
626
 
688
627
  /**
689
628
  * String comparator (memcmp + length comparison).
690
- * @param {Buffer} a
691
- * @param {Buffer} b
629
+ * @param {*} a
630
+ * @param {*} b
692
631
  * @returns {Number} -1, 1, or 0.
693
632
  */
694
633
 
@@ -723,26 +662,26 @@ util.mb = function mb(size) {
723
662
 
724
663
  /**
725
664
  * Find index of a buffer in an array of buffers.
726
- * @param {Buffer[]} items
727
- * @param {Buffer} data - Target buffer to find.
665
+ * @param {buffer[]} items
666
+ * @param {buffer} data - Target buffer to find.
728
667
  * @returns {Number} Index (-1 if not found).
729
668
  */
730
669
 
731
- util.indexOf = function indexOf(items, data) {
732
- assert(Array.isArray(items));
733
- assert(Buffer.isBuffer(data));
670
+ // util.indexOf = function indexOf(items, data) {
671
+ // assert(Array.isArray(items));
672
+ // assert(Buffer.isBuffer(data));
734
673
 
735
- for (let i = 0; i < items.length; i++) {
736
- const item = items[i];
674
+ // for (let i = 0; i < items.length; i++) {
675
+ // const item = items[i];
737
676
 
738
- assert(Buffer.isBuffer(item));
677
+ // assert(Buffer.isBuffer(item));
739
678
 
740
- if (item.equals(data))
741
- return i;
742
- }
679
+ // if (item.equals(data))
680
+ // return i;
681
+ // }
743
682
 
744
- return -1;
745
- };
683
+ // return -1;
684
+ // };
746
685
 
747
686
  /**
748
687
  * Convert a number to a padded uint8
@@ -1284,7 +1223,7 @@ const CommMode = {
1284
1223
  */
1285
1224
  const NotifyType = {
1286
1225
  none: 0, //测试消息
1287
- test: 9999, //测试消息
1226
+ test: 9999, //测试消息
1288
1227
  };
1289
1228
 
1290
1229
  function Base64() {
@@ -1390,17 +1329,6 @@ function Base64() {
1390
1329
  }
1391
1330
  }
1392
1331
 
1393
- /**
1394
- * 利用HMAC算法,以及令牌固定量和令牌随机量,计算访问令牌
1395
- * @param {*} token
1396
- * @param {*} random
1397
- */
1398
- function signHMAC(token, random) {
1399
- var hmac = createHmac('sha256', random);
1400
- let sig = hmac.update(token).digest('hex');
1401
- return sig;
1402
- }
1403
-
1404
1332
  /**
1405
1333
  * 扩展对象,用于多个对象之间的属性注入
1406
1334
  * @note 对属性(get set)复制不会成功
@@ -1516,13 +1444,13 @@ function clone(obj) {
1516
1444
  throw new Error("Unable to copy obj! Its type isn't supported.");
1517
1445
  }
1518
1446
 
1447
+ util.io = io;
1519
1448
  util.Base64 = Base64;
1520
- util.signHMAC = signHMAC;
1521
1449
  util.ReturnCode = ReturnCode;
1522
1450
  util.ReturnCodeName = ReturnCodeName;
1523
1451
  util.CommMode = CommMode;
1524
1452
  util.NotifyType = NotifyType;
1525
- util.createHmac = createHmac;
1453
+ // util.createHmac = createHmac;
1526
1454
  util.extendObj = extendObj;
1527
1455
  util.clone = clone;
1528
1456
  util.CommStatus = CommStatus;
package/test/game/auth.js CHANGED
@@ -32,7 +32,7 @@ let phone_wx = ((Math.random() * 100000000) | 0).toString();
32
32
  //用于验证后期绑定成功的用户证书缓存变量
33
33
  let authUser = '';
34
34
 
35
- describe.only('钱包注册登录测试', () => {
35
+ describe('钱包注册登录测试', () => {
36
36
  it('用户注册并登录 - 使用两阶段认证模式', async () => {
37
37
  //执行登录操作,通过配置对象传入用户信息,并指定签证方式为两阶段认证
38
38
  let ret = await remote.init(/*初始化连接器,只保留原始配置信息*/).login({
package/test/game/crm.js CHANGED
@@ -22,7 +22,7 @@ let username = `${(Math.random()*1000000)|0}@vallnet.cn`;
22
22
  let password = crypto.createHash("sha1").update(((Math.random()*1000000)|0).toString() + salt).digest("hex");
23
23
  let mobilephone = `139${((Math.random()*100000000)|0).toString()}`;
24
24
 
25
- describe.only('CRM注册登录', () => {
25
+ describe('CRM注册登录', () => {
26
26
  it('用户注册 - 通过两阶段认证模式实现', async () => {
27
27
  //当用户点击'获取验证码'时执行如下流程:
28
28
  let ret = await remote.init(/*初始化连接器,只保留原始配置信息*/).login({
@@ -0,0 +1,43 @@
1
+ /**
2
+ * 联机单元测试:游戏登录测试流程
3
+ */
4
+
5
+ //连接配置信息
6
+ const config = {
7
+ UrlHead: "http", //协议选择: http/https
8
+ webserver: {
9
+ "host": "127.0.0.1", //远程主机地址
10
+ "port": 9901 //远程主机端口
11
+ },
12
+ logicserver: {},
13
+ oemInfo: { //模拟用户信息
14
+ domain: 'CoreOfKow', //指定访问的逻辑服务器类型
15
+ openid: `bxs.15699999936`, //用户标识
16
+ token: '', //用户令牌,由920客户端向920服务端索取并填充于此
17
+ },
18
+ }
19
+
20
+ //长连接中,下行通告的类型定义
21
+ const NotifyType = {
22
+ action: 1, //体力数值推送
23
+ };
24
+
25
+ //引入长连接组件
26
+ let {gameconn} = require('../../index');
27
+ let connector = new gameconn(config)
28
+ .setFetch(require('node-fetch')); //设置node服务端环境下兼容的fetch函数,**注意只在node服务端环境下需要,浏览器环境中系统自带 fetch 函数**
29
+
30
+ connector.setmode(connector.CommMode.ws).watch(msg => {
31
+ console.log('收到下行消息', msg);
32
+ }, NotifyType.action);
33
+
34
+ (async function() {
35
+ console.log('start login...');
36
+ try {
37
+ let ret = await connector.login(config.oemInfo);
38
+ console.log('end login...');
39
+ console.log(config.oemInfo, ret);
40
+ } catch(e) {
41
+ console.log(e);
42
+ }
43
+ })();
@@ -0,0 +1,80 @@
1
+ d:\workshop\gitee\vallnetserver\test\kow.socket.js/**
2
+ * 联机单元测试:远程管理
3
+ */
4
+
5
+ const assert = require('assert')
6
+
7
+ //引入游戏云连接器,创建连接器对象
8
+ const {gameconn} = require('../../src/')
9
+ const remote = new gameconn({
10
+ "UrlHead": "http", //协议选择: http/https
11
+ "webserver": {
12
+ //注意:如果需要负载均衡,这里一般指定负载均衡服务器地址,否则直接填写业务主机地址
13
+ "host": "127.0.0.1", //远程主机地址
14
+ "authPort": 9601, //签证主机端口
15
+ "port": 9901 //远程主机端口
16
+ },
17
+ }).setFetch(require('node-fetch')); //设置node环境下兼容的fetch函数
18
+
19
+ //切换为长连模式
20
+ //remote.setmode(remote.CommMode.ws);
21
+
22
+ //这里需要填充管理员登录信息
23
+ let admin = {
24
+ openid: '',
25
+ openkey: '',
26
+ }
27
+
28
+ describe('远程管理', () => {
29
+ it.skip('执行索引服远程指令 remote.printInfo', async () => {
30
+ await remote.init(/*初始化连接器,只保留原始配置信息*/).login({
31
+ domain: 'CoreOfIndex',
32
+ openid: admin.openid,
33
+ openkey: admin.openkey,
34
+ });
35
+
36
+ let msg = await remote.fetching({func: "remote.printInfo"});
37
+ console.log(msg);
38
+ });
39
+
40
+ it.skip('透过索引服执行业务服远程指令 remote.command printInfo', async () => {
41
+ await remote.init(/*初始化连接器,只保留原始配置信息*/).login({
42
+ domain: 'CoreOfIndex',
43
+ openid: admin.openid,
44
+ openkey: admin.openkey,
45
+ });
46
+
47
+ let msg = await remote.fetching({func: "remote.command", data: ['printInfo', 'CoreOfChickIOS', '1']});
48
+ console.log(msg);
49
+ });
50
+
51
+ it('模拟用户注册并登录', async () => {
52
+ //执行登录操作,通过配置对象传入用户信息,并指定签证方式为两阶段认证
53
+ let auth = {
54
+ cpId: 'c376af60-cab5-11ed-90e8-25399b14218a',
55
+ addr: '10000000',
56
+ name: 'bookman',
57
+ bonus: '',
58
+ time: Date.now(),
59
+ };
60
+
61
+ //需要正确填充 auth.sign, 此处采用模拟命令填充, 注意命令 testSign 只在测试模式下开启
62
+ await remote.init().login({
63
+ domain: 'CoreOfIndex',
64
+ openid: admin.openid,
65
+ openkey: admin.openkey,
66
+ });
67
+ let msg = await remote.fetching({func: "remote.command", data: ['testSign', 'CoreOfChickIOS', '1', auth]});
68
+ auth.sign = msg['CoreOfChickIOS.1'].sign;
69
+
70
+ let ret = await remote.init().login({
71
+ domain: 'CoreOfChickIOS', //登录域
72
+ openid: `bxs.${auth.addr}`, //用户登录标识,含验证方式
73
+ auth,
74
+ });
75
+ if(!!ret) {
76
+ ret = await remote.fetching({func: "test.echo"});
77
+ assert(ret.code == 0);
78
+ }
79
+ });
80
+ });