-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathclient.js
93 lines (76 loc) · 1.91 KB
/
client.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
var socket = new io.Socket(null, { port: 8008, transports: ['websocket'] }),
sessionid = 0,
connectTimeout;
function socketInit() {
var connection = socket.connect();
connectTimeout = setTimeout(function () {
if (connection.connected === true) {
return;
}
var popup = document.getElementById('popup');
popup.innerHTML = 'Sorry, the server is probably down. Retry later';
popup.style.display = 'block';
}, 3000);
socket.on('connect', function () {
clearTimeout(connectTimeout);
sessionid = this.transport.sessionid;
me = new Player(sessionid, 'player');
mainLoop = setInterval(moveMe);
});
socket.on('message', function (message) {
switch (message.type) {
case 'position':
// Update players position
updatePosition(message.list);
ready = true;
break;
case 'playerslist':
// Create all opponents
createOpponents(message.list);
ready = true; // ready to communicate with socket server
break;
case 'new':
// New player joined
players.push(new Player(message.id, 'opponent'));
break;
case 'leave':
// Player disconnected
leave(message.id);
break;
}
});
socket.on('disconnect', function () {
document.getElementById('popup').style.display = 'block';
});
}
function sendPosition () {
if (ready) {
ready = false;
var pos = buffer.length ? buffer[0] : { x:me.x, y:me.y };
buffer.shift();
socket.send({ type:'position', id:me.id, x:pos.x, y:pos.y });
}
}
function updatePosition (data) {
var id, i, l;
for (i=0, l=players.length; i<l; i++) {
id = players[i].id;
if (id in data) {
players[i].update(data[id].x, data[id].y);
}
}
}
function createOpponents (list) {
for (var i in list) {
players.push(new Player(i, 'opponent', list[i].x, list[i].y));
}
}
function leave (id) {
for (var i=0, l=players.length; i<l; i++) {
if (id == players[i].id) {
players[i].remove();
players.splice(i, 1);
return;
}
}
}