Files
ZYZ/game-server/test/Client.ts
2023-10-20 20:24:14 +08:00

110 lines
3.9 KiB
TypeScript

import { PinusWSClient } from 'pinus-robot-plugin';
import { expect } from 'chai';
import { checkSuccessResponse, checkRoleInfo } from './CheckPatten';
import { DEBUG_MAGIC_WORD, PUSH_ROUTE, STATUS } from '../app/consts';
import { genCode } from './pureUtil';
const request = require('request');
const crypto = require('crypto');
export class Client {
private _client;
private _roleInfo;
private ENCRYPT_IV = 'f7182j5f04e377ux';
private ENCRYPT_KEY = 'fiqaxijabbantusmprc234fj';
private serverId = 1;
constructor(tel: string = '18165059853') {
const param = {tel, deviceId: genCode(10), code: '', platform: 'ios', pkgName: 'com.bantu.zyz', serverType: 'dev'};
const paramStr = this.aesEncrypt(JSON.stringify(param), this.ENCRYPT_KEY, this.ENCRYPT_IV);
request.post('http://127.0.0.1:7001/user/smslogin', {
json: {
data: paramStr
}
}, (err, res, body) => {
const loginRes = JSON.parse(this.aesDecrypt(body.result, this.ENCRYPT_KEY, this.ENCRYPT_IV));
checkSuccessResponse(loginRes);
request.post('http://127.0.0.1:7001/user/checkrole', {
json: {
data: this.aesEncrypt(JSON.stringify({token: loginRes.data.token, serverId: this.serverId}), this.ENCRYPT_KEY, this.ENCRYPT_IV)
}
}, (err, res, body) => {
const checkRoleRes = JSON.parse(this.aesDecrypt(body.result, this.ENCRYPT_KEY, this.ENCRYPT_IV));
if (checkRoleRes.code === 0) {
this.createClient(loginRes.data.token);
} else {
this.createRole(loginRes.data.token, () => {
this.createClient(loginRes.data.token);
});
}
});
});
}
createRole(token, sucCB) {
request.post('http://127.0.0.1:7001/user/createrole', {
json: {
data: this.aesEncrypt(JSON.stringify({token, serverId: this.serverId}), this.ENCRYPT_KEY, this.ENCRYPT_IV)
}
}, (err, res, body) => {
const result = JSON.parse(this.aesDecrypt(body.result, this.ENCRYPT_KEY, this.ENCRYPT_IV));
checkSuccessResponse(result);
sucCB();
});
}
createClient(token) {
this._client = new PinusWSClient();
let host = '127.0.0.1';
let port = '3050';
this._client.init({
host: host,
port: port
}, (data) => {
// 连接成功执行函数
this._client.on(PUSH_ROUTE.ADD_CHANNEL, (msg) => {
checkSuccessResponse(msg);
expect(msg.data.roleId).to.be.a('string');
expect(msg.data.channelName).to.be.a('string');
});
this._client.request('connector.entryHandler.enter', { serverId: this.serverId, token, version:"0.1.1.211229" }, (enterRes) => {
// 消息回调
checkSuccessResponse(enterRes);
this._client.request('connector.entryHandler.debugGetRole', { magicWord: DEBUG_MAGIC_WORD }, (enterRes) => {
checkSuccessResponse(enterRes);
expect(enterRes.data.role).to.be.an('object');
checkRoleInfo(enterRes.data.role)
this._roleInfo = enterRes.data.role;
this._client.request('role.roleHandler.initRole', { serverId: this.serverId, token, roleName: genCode(8) }, (initRoleRes) => {
if (initRoleRes.code !== 0 && initRoleRes.code !== STATUS.ROLE_HAS_INIT.code) {
console.error('initRole error', initRoleRes.code, typeof initRoleRes.code);
}
});
});
});
});
}
get roleInfo() {
return this._roleInfo;
}
get client() {
return this._client;
}
private aesEncrypt(data, key, iv) {
const cipher = crypto.createCipheriv('aes-192-cbc', key, iv);
var crypted = cipher.update(data, 'utf8', 'hex');
crypted += cipher.final('hex');
return crypted;
}
private aesDecrypt(data, key, iv) {
const decipher = crypto.createDecipheriv('aes-192-cbc', key, iv);
var decrypted = decipher.update(data, 'hex', 'utf8');
decrypted += decipher.final('utf8');
return decrypted;
}
}