-
Notifications
You must be signed in to change notification settings - Fork 73
/
Copy pathapp.js
122 lines (105 loc) · 2.9 KB
/
app.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
"use strict"
var url = require('url');
var express = require('express');
var app = express();
var server = require('http').Server(app);
var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({server: server});
var Room = require('./game/room.js');
var cookieparser = require("cookieparser");
var opts = {};
for (var key of process.argv.splice(2)) {
var keys = key.split('=');
opts[keys[0]] = keys[1];
}
server.listen(opts.port || 8030, function () {
console.log('Listening on ' + server.address().port);
});
app.use('/static', express.static('static'));
app.use('/invite', express.static('invite'));
app.use('/build', express.static('build'));
//app.use(cookieParser());
//游戏地址
app.get('/', function (req, res) {
// var UUID = req.cookies.UUID;
// if (!UUID || true) {
// UUID = Math.floor(Math.random()*2322423432);
// res.cookie('UUID',UUID, { maxAge: 90000000, httpOnly: true });
// }
res.sendFile(__dirname + '/static/index.html');
});
//游戏地址
app.get('/rooms', function (req, res) {
res.sendFile(__dirname + '/static/rooms.html');
});
//管理地址
app.get('/admin', function (req, res) {
res.sendFile(__dirname + '/static/admin.html');
});
//游戏地址
app.get('/createRoom', function (req, res) {
var type = req.query.type;
var room = Room.createRoom(type);
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end(room.id+"");
});
//获取房间列表
app.get('/roomsData', function (req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end(JSON.stringify(Room.getRoomData()));
});
var adminCode = opts.code || 'admin';
Room.setConfig(adminCode);
for (var i = 0; i < (opts.room || 1); i++) {
Room.createRoom("大乱斗", true);
}
wss.on('connection', function (ws) {
//var UUID = cookieparser.parse(ws.upgradeReq.headers.cookie).UUID;
var location = url.parse(ws.upgradeReq.url, true);
var roomID = location.query.roomID || 1;
var room = Room.findRoom(roomID);
var socket = {
emit: function (name, data) {
try {
var c = name + "$" + JSON.stringify(data || {});
ws.send(c);
} catch (e) {
console.log(e);
}
},
on: function (name, callback) {
this.listeners[name] = callback;
},
ip: ws.upgradeReq.connection.remoteAddress,
listeners: {}
}
if (!room) {
socket.emit('close', '未找到房间');
ws.close();
return;
}
//房间最多30个链接
if (room.game.clients.length > 30) {
socket.emit('close', '房间链接已满');
ws.close();
return;
}
ws.on('message', function (message) {
var $s = message.indexOf('$');
if ($s == -1) {
var name = message;
var data = {};
} else {
var name = message.substring(0, $s);
var data = JSON.parse(message.substring($s + 1));
}
socket.listeners[name] && socket.listeners[name](data);
});
ws.on('close', function () {
room.game.removeClient(socket);
socket = null;
ws = null;
room = null;
});
room.game.addClient(socket, Math.random());
});