-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTestServer.js
executable file
·126 lines (121 loc) · 3.17 KB
/
TestServer.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
var version;
var log = {
verbose:false,
out:function(a,b) {
var doLog = true;
//properties[0] = 'verbose'
if(typeof b == 'object' && b.properties[0] && !log.verbose) {
doLog = false;
}
if(doLog) console.log(a);
}
};
var def = {
'js':'application/javascript',
'html':'text/html',
'png':'image/png',
'jpg':'image/jpeg',
'jpeg':'image/jpeg',
'css':'text/css',
'ico':'image/x-ico',
'txt':'text/plain',
'gif':'image/gif'
};
var rlevts = {};
var readline = require('readline').createInterface({
input:process.stdin,
output:process.stdout
}).on('line',function(input) {
for(var i in rlevts) {
rlevts[i].forEach(function(item) {
item.call(this,input);
});
}
});
var exec = require('child_process').exec;
exec('git rev-parse HEAD',function(err,stdout,stderr) {
if(err) {
console.log('There was an error fetching git version data');
version = 'by Juan Vallejo';
return;
}
version = stdout;
});
var fs = require('fs'),app = require('http').createServer(function(req,res) {
var url = req.url == '/' ? '/index.html' : req.url;
var ext = req.url.split('.');
ext = ext[ext.length-1];
if(url.match(/^\/(tests)(\/)/gi)) {
var urlend = url.split('/');
urlend = urlend[urlend.length-1];
if(urlend.match(/^[1-9]+$/gi)) {
fs.readdir(__dirname+'/tests/',function(err,files) {
var validFiles = [];
files.forEach(function(file) {
if(!file.match(/^(\.)(.*)/gi)) {
validFiles.push(file);
}
});
route('/tests/'+validFiles[urlend-1]);
})
} else {
route(url);
}
} else {
route(url);
}
function route(path) {
var ext = path.split('.');
ext = ext[ext.length-1];
fs.readFile(__dirname+path,function(err,data) {
if(err) {
res.writeHead(404);
return res.end("File Not Found.");
}
res.writeHead(200,{'Content-Type':def[ext]});
res.end(data);
});
};
}).listen(8000);
var playerdata = {};
require('socket.io').listen(app,{log:false}).on('connection',function(client) {
log.out('client '+client.id+' connected');
rlevts[client.id] = [];
rlevts[client.id].push(function(input) {
if(input == '-r') {
client.emit('command',{command:'refresh'});
} else if(input == '-v') {
log.verbose = true;
}
});
client.emit('welcome',{id:client.id,playerdata:playerdata,version:version});
client.on('playerregister',function(data) {
log.out('registering client '+data.id);
playerdata[data.id] = data;
client.emit('playerregister',data);
});
client.on('playerdata',function(data) {
log.out('client '+client.id+' sent player data');
client.broadcast.emit('playerdata',data);
});
client.on('playerupdate',function(data) {
log.out('client '+data.id+' has requested update',{properties:[1]});
playerdata[data.id] = data.playerdata;
client.broadcast.emit('playerupdate',data);
});
client.on('disconnect',function() {
log.out('client '+client.id+' disconnected');
client.broadcast.emit('playerdisconnect',{id:client.id});
delete playerdata[client.id];
delete rlevts[client.id];
});
client.on('chatmessage',function(data) {
var message = data.message.join('');
var data = {
message:message,
sender:data.sender
};
client.emit('chatmessage',data);
client.broadcast.emit('chatmessage',data);
});
});