-
Notifications
You must be signed in to change notification settings - Fork 2
/
client.js
106 lines (104 loc) · 3 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
94
95
96
97
98
99
100
101
102
103
104
105
var app = function() {
var who = null;
var state = [];
var processing = null;
var dimmer = 240;
// called when server welcomes this client
var onWelcome = function(data) {
console.log('welcome'+data['who']);
who = data['who'];
state = data['state'];
}
// called when another client enters the world
var onEnter = function(data) {
console.log('enter'+data['who']);
state[data['who']] = data['state'];
}
// called when another client exits the world
var onExit = function(data) {
console.log('exit');
delete state[data['who']];
}
// called when move message received from the server
var onMove = function(data) {
//console.log('move');
state[data['who']]['pos'] = data['pos'];
}
// called when mouse moves inside the canvas as result of user input
var moved = function(socket, x, y) {
var whoPos = state[who]['pos'];
whoPos[0] = x;
whoPos[1] = y;
socket.send({'who':who, 'pos': whoPos});
}
// map message event type to handler
var messageHandlers = {
'welcome' : onWelcome,
'enter' : onEnter,
'exit' : onExit,
'move' : onMove
};
// primary drawing procedure
var drawProc = function() {
var p = processing;
dimmer = (200 + dimmer) * 0.5;
p.background(dimmer);
p.noFill();
for(c in state) {
var s = state[c];
var color = s['color'];
p.stroke(color[0]*255, color[1]*255, color[2]*255);
p.strokeWeight(10);
p.ellipse(s['pos'][0], s['pos'][1], 30, 30);
}
p.fill(245,10,10, 128);
p.stroke(255,0,0, 128);
p.strokeWeight(2);
p.ellipse(p.mouseX, p.mouseY, 4, 4);
};
// drawing procedure activated when server disconnects
var darkDrawProc = function() {
dimmer = (50 + dimmer) * 0.5;
processing.background(dimmer);
}
var socket = new io.Socket();
// called when client is connected to the server
socket.on('connect', function(){
console.log('connected!');
// setup processing on first message from server
var sketch = function(processing) {
// Override draw function, by default it will be called 60 times per second
processing.draw = drawProc;
processing.mouseMoved = function() {
moved(socket, processing.mouseX, processing.mouseY);
}
}
var canvas = document.getElementById("canvas1");
processing = new Processing(canvas, sketch);
processing.frameRate(30);
});
// called when server disconnects
socket.on('disconnect', function(){
console.log('disconnected');
if(processing) {
processing.draw = darkDrawProc;
}
});
// called when server sends message to this client
socket.on('message', function(data){
messageHandler = messageHandlers[data['event']];
if(messageHandler) {
messageHandler(data);
} else {
console.log('ignoring unrecognized event type: ' + data['event']);
}
});
socket.connect();
// return accessor into internals
var r = {};
r.who = who;
r.state = state;
r.socket = socket;
r.processing = processing;
return r;
}();