-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
96 lines (87 loc) · 3.55 KB
/
server.js
File metadata and controls
96 lines (87 loc) · 3.55 KB
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
//Добавляем модули
var clients = [], signs = [], objects = null;
var mmorpg = new MMORPG();
var WebSocketServer = require('ws').Server, socket = new WebSocketServer({port: 9998});
var express = require('express');
var app = express();
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb://kr0n4ik:123456@ds155418.mlab.com:55418/game', function (err, db) {
if (err) {throw err}
objects = db.collection('objects');
});
//Запускаем HTTP сервер
app.get('/', function(req, res) {
res.sendfile('nodejs/index.html');
});
app.use(express.static(__dirname + '/client'));
app.listen(80);
socket.on("connection", function(server, req) {
var sign = req.headers['sec-websocket-key'];
signs[sign] = sign;
clients[sign] = server;
console.log("Подключился клиент: " + sign);
server.on("message", function(message) {
var sign = req.headers['sec-websocket-key'];
try {
var json = JSON.parse(message);
console.log(json);
switch (json.code) {
case "AUTH_SESSION": mmorpg.auth_session(sign, json); break;
case "MOVE_START_FORWARD": mmorpg.move_start_forward(sign, json); break;
case "MOVE_START_BACKWARD": mmorpg.move_start_backward(sign, json); break;
case "MOVE_START_TURN_LEFT": mmorpg.move_start_turn_left(sign, json); break;
case "MOVE_START_TURN_RIGHT": mmorpg.move_start_turn_right(sign, json); break;
case "MOVE_STOP_TURN": mmorpg.move_stop_turn(sign, json); break;
case "MOVE_STOP": mmorpg.move_stop(sign, json); break;
}
} catch(e) {
console.log("Ошибка в try/catche" + e);
}
});
server.on("close", function close() {
var sign = req.headers['sec-websocket-key'];
try {
var uid = signs[sign];
delete(signs[sign]);
delete(clients[uid]);
console.log("Отключился клиент: " + sign);
} catch(e) {
console.log("Ошибка в try/catche" + e);
}
})
});
console.log("Сервер игры стартовал");
function MMORPG(){
}
MMORPG.prototype.auth_session = function(sign, json) {
clients[signs[sign]].send(JSON.stringify({code:"AUTH_RESPONSE", id:"59da2c47734d1d18c95cd930"}));
objects.find({}).toArray(function(error, list) {
if (list != null && error == null) {
clients[signs[sign]].send(JSON.stringify({code:"UPDATE_OBJECT", items: list}));
}
});
}
MMORPG.prototype.move_start_forward = function(sign, json) {
for (var i in clients)
clients[i].send(JSON.stringify({code:"UPDATE_OBJECT", items:[{_id:"59da2c47734d1d18c95cd930", move: "MOVE_START_FORWARD"}]}));
}
MMORPG.prototype.move_start_backward = function(sign, json) {
for (var i in clients)
clients[i].send(JSON.stringify({code:"UPDATE_OBJECT", items:[{_id:"59da2c47734d1d18c95cd930", move: "MOVE_START_BACKWARD"}]}));
}
MMORPG.prototype.move_start_turn_right = function(sign, json) {
for (var i in clients)
clients[i].send(JSON.stringify({code:"UPDATE_OBJECT", items:[{_id:"59da2c47734d1d18c95cd930", turn: "MOVE_START_TURN_RIGHT"}]}));
}
MMORPG.prototype.move_start_turn_left = function(sign, json) {
for (var i in clients)
clients[i].send(JSON.stringify({code:"UPDATE_OBJECT", items:[{_id:"59da2c47734d1d18c95cd930", turn: "MOVE_START_TURN_LEFT"}]}));
}
MMORPG.prototype.move_stop = function(sign, json) {
for (var i in clients)
clients[i].send(JSON.stringify({code:"UPDATE_OBJECT", items:[{_id:"59da2c47734d1d18c95cd930", move: "MOVE_STOP"}]}));
}
MMORPG.prototype.move_stop_turn = function(sign, json) {
for (var i in clients)
clients[i].send(JSON.stringify({code:"UPDATE_OBJECT", items:[{_id:"59da2c47734d1d18c95cd930", turn: "MOVE_STOP_TURN"}]}));
}