-
Notifications
You must be signed in to change notification settings - Fork 5
/
robot.ts
139 lines (121 loc) · 3.98 KB
/
robot.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import { PinusWSClient, PinusWSClientEvent } from './robot/index';
const enum Route {
getServer = 'gate.gateHandler.getServer',
connectServer = 'connector.entryHandler.connectServer',
enterRoom = 'connector.entryHandler.enterRoom',
leaveRoom = 'connector.entryHandler.leaveRoom',
sendPacket = 'scene.sceneHandler.sendPacket',
openPacket = 'scene.sceneHandler.openPacket',
}
const enum EventType {
OnPacket = 'OnPacket',
OnPlayerEnter = 'OnPlayerEnter',
OnPlayerLeave = 'OnPlayerLeave',
OnPlayerOpen = 'OnPlayerOpen'
}
const packets = {};
export class Robot {
public server: any = {};
public DEBUG = true;
public token: string;
public room_id: number = 1;
public client: PinusWSClient;
constructor (host: string, port: number, token: string) {
this.token = token;
this.server.host = host;
this.server.port = port;
this.client = new PinusWSClient();
this.client.on(PinusWSClientEvent.EVENT_IO_ERROR, (event) => {
// 错误处理
console.error('error', event);
});
this.client.on(PinusWSClientEvent.EVENT_CLOSE, (event) => {
// 关闭处理
console.error('close', this.server);
});
this.client.on(PinusWSClientEvent.EVENT_HEART_BEAT_TIMEOUT, (event) => {
// 心跳timeout
console.error('heartbeat timeout', event);
});
this.client.on(PinusWSClientEvent.EVENT_KICK, (event) => {
// 踢出
console.error('kick', event);
});
}
public getServer (): void {
this.client.init(this.server, () => {
this.client.request(Route.getServer, { token: this.token }, (result) => {
console.log(this.token, ' getServer返回', JSON.stringify(result));
this.server = result.data;
this.client.disconnect();
this.connectServer();
}
);
});
}
public connectServer () {
this.client.init(this.server, () => {
this.client.request(Route.connectServer, {token: this.token}, (result) => {
this.enterRoom();
});
});
this.client.on(EventType.OnPacket, async (event) => {
try {
await this.openPacket(parseInt(event.packet.id));
}
catch (e){
if (e !== '红包已抢完' && e !== '您已经抢过该红包') {
console.error(e);
}
}
});
}
public enterRoom () {
this.client.request(Route.enterRoom, {room_id: this.room_id}, (result) => {
// 消息回调
console.log(this.token, ' enterRoom 返回', JSON.stringify(result));
if (result.data.id) {
this.packetInterval();
}
});
}
public sendPacket () {
this.client.request(Route.sendPacket, {award: 100, lei: Date.now() % 10}, (result) => {
// 消息回调
console.log(this.token, ' sendPacket 返回', JSON.stringify(result));
if (result.code !== 200){
return;
}
//sendPacket 返回 {"code":200,"message":"","data":{"award":4606.78,"turns":3,"value":"中雷","packet_award":12.66,"cost_award":-137.34}}
packets[result.data.packet.id] = result.data.packet;
});
}
public async openPacket (id) {
await new Promise((resolve, reject) => {
this.client.request(Route.openPacket, {id}, (result) => {
// 消息回调
if (result.code !== 200){
reject(result.message);
}
console.log(this.token, ' openPacket 返回', JSON.stringify(result));
resolve(result);
});
});
}
public packetInterval () {
setInterval(this.sendPacket.bind(this), 1000);
}
}
let tokens = [
'1544523092196-CrUu7Hd7fNW_dGPJwbymqAUlyg9OvLhH',
'1544523092852-Vzs2Xd0R9_brCJ_U3cknLyALx80Eny_r',
// '1544523093274-QrP3rT-Shm28fb1Cx18PIWjPiYxtBpta',
// '1544523093618-MOQrszrEF4gvQP8DdfzfKpdikQm9C0uE',
// '1544523093848-J38HagER8MG5rn85AP_G5E9McK_AYEin',
// '1544523094024-par5XmJgHPqhjZH3v2GCuBGqefULTY20',
// '1544523094302-h3X3qu09LF0WGGZZua64VMkNTR-D9nR0',
// '1544523097973-NjqZtdtg546UpgwDIVbEnNERJo2W9MFG'
];
for (let token of tokens){
(new Robot('127.0.0.1', 5100, token)).getServer();
}