forked from Zahariel1942/PUBG-maphack-map
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
160 lines (155 loc) · 4.21 KB
/
index.js
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
var express = require('express');
var pako = require('pako');
var app = express();
var server = require('http').Server(app);
var io = require('socket.io').listen(server);
var bodyParser = require('body-parser');
var postToken = "94402e5ec6a02d0be460716f4b5acaf57482485c0ce86aab492d1d4876af3464"
var cacheStr = [];
//item缓存
var cacheItems = [];
var newcacheItem = [];
//Vehicle缓存
var cacheVehicle = [];
var newcacheVehicle = [];
//cache
var lastPacket = {"m":1,"s":cacheStr,"i":cacheItems,"v":cacheVehicle};
var port = 7890;
// 地图数据
var DUMPDATA = {};
// socket clients
var CLIENTS = [];
// 静态文件
app.use(express.static('static'));
//body-parser 解析json格式数据
app.use(bodyParser.json({
limit: '1mb'
}));
//此项必须在 bodyParser.json 下面,为参数编码
app.use(bodyParser.urlencoded({
extended: true
}));
//Get Post Data
app.post('/', function (req, res) {
DUMPDATA = req.body;
//console.log(DUMPDATA);
if(postToken==DUMPDATA.t)
{
DUMPDATA.t =null;
}
else
{
res.end('fail');
return;
}
res.end('confirm');
lastPacket = DUMPDATA;
if(DUMPDATA.s&&cacheStr.length!=DUMPDATA.s.length)
{
cacheStr = DUMPDATA.s;
}
else
{
DUMPDATA.s = null;
}
//物品缓存
if(DUMPDATA.i!=null)
{
newcacheItem = DUMPDATA.i.concat();
}
//标记待删除
for(var c in cacheItems)
{
cacheItems[c].f = false;
}
//判断保持的物品
for (var i in DUMPDATA.i){
for(var c in cacheItems)
{
if(cacheItems[c]!=null&&DUMPDATA.i[i]!=null)
{
if(DUMPDATA.i[i].x==cacheItems[c].x&&DUMPDATA.i[i].y==cacheItems[c].y&&DUMPDATA.i[i].n==cacheItems[c].n)
{
//存在的删除
DUMPDATA.i.splice(i,1);
cacheItems[c].f = true;
}
}
}
}
for(var c in cacheItems)
{
if(cacheItems[c].f==false)
{
DUMPDATA.i.push(cacheItems[c]);
}
}
cacheItems = null;
cacheItems = newcacheItem;
//判断Vehicle缓存
if(DUMPDATA.v!=null)
{
newcacheVehicle = DUMPDATA.v.concat();
}
else
{
DUMPDATA.v = [];
}
for(var c in cacheVehicle)
{
cacheVehicle[c].f = false;
}
for (var i in DUMPDATA.v){
for(var c in cacheVehicle)
{
if(cacheVehicle[c]!=null&&DUMPDATA.v[i]!=null)
{
if(DUMPDATA.v[i].x==cacheVehicle[c].x&&DUMPDATA.v[i].y==cacheVehicle[c].y&&DUMPDATA.v[i].n==cacheVehicle[c].n&&DUMPDATA.v[i].r==cacheVehicle[c].r&&DUMPDATA.v[i].d==cacheVehicle[c].d)
{
//存在的删除
DUMPDATA.v.splice(i,1);
cacheVehicle[c].f = true;
}
}
}
}
for(var c in cacheVehicle)
{
if(cacheVehicle[c].f==false)
{
DUMPDATA.v.push(cacheVehicle[c]);
}
}
cacheVehicle = null;
cacheVehicle = newcacheVehicle;
for (var index = 0; index < CLIENTS.length; index++) {
DUMPDATA.t = new Date().getTime();
DUMPDATA.t = DUMPDATA.t - CLIENTS[index].timeoffset;
CLIENTS[index].emit('u',DUMPDATA);
}
});
io.on('connection', function (socket) {
socket.timeoffset = 0;
socket.on('t',function(timeset){
var thisnowtime = new Date().getTime();
socket.timeoffset = thisnowtime - timeset;
})
CLIENTS.push(socket);
console.log(`a user connected IP:[${socket.conn.remoteAddress}], current users: [${CLIENTS.length}]`);
var json_str = JSON.stringify(lastPacket);
var output = pako.deflate(json_str);
socket.emit('u',output);
socket.on('disconnect', function () {
for (var index = 0; index < CLIENTS.length; index++) {
if (CLIENTS[index] === socket) {
CLIENTS.splice(index, 1);
}
}
console.log(`a user disconnect, current users: [${CLIENTS.length}]`);
});
});
server.listen(port, function () {
var host = server.address().address;
var port = server.address().port;
console.log(`server running at localhost:${port}`);
});