Skip to content

Commit 81dedc6

Browse files
authored
Add files via upload
1 parent c6618ac commit 81dedc6

File tree

2 files changed

+336
-0
lines changed

2 files changed

+336
-0
lines changed

tamuctf2018/maze/server.js

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
//Some ideas on how to run a game server taken from:
2+
//https://github.com/xicombd/phaser-multiplayer-game
3+
4+
var express = require('express');
5+
var app = express();
6+
var http = require('http').Server(app);
7+
var socket = require('socket.io')(http);
8+
9+
var Player = require('./player'); //include our player variable
10+
11+
var fs = require('fs');
12+
var path = require('path');
13+
var flag;
14+
var err;
15+
var PORT = 31337; //we are 1337 h4x0r5
16+
17+
app.use(express.static('public'));
18+
var players;
19+
20+
//Added for testability
21+
//DO NOT DELETE. If you do your test will run for significantly longer than needed.
22+
app.get('/exit', function(request, response) {
23+
console.log('exiting...')
24+
process.exit()
25+
});
26+
27+
//mostly inspired by example code given to us by TA
28+
//returns requested files
29+
app.get('/*', function(request, response){
30+
console.log('request starting...');
31+
32+
var filePath = __dirname + '/..' +request.url;
33+
if (filePath == __dirname)
34+
filePath = __dirname + '/../public/index.html';
35+
var extname = path.extname(filePath);
36+
var contentType = 'text/html';
37+
38+
switch (extname) {
39+
case '.js':
40+
contentType = 'text/javascript';
41+
break;
42+
case '.css':
43+
contentType = 'text/css';
44+
break;
45+
case '.json':
46+
contentType = 'application/json';
47+
break;
48+
case '.png':
49+
contentType = 'image/png';
50+
break;
51+
case '.jpg':
52+
contentType = 'image/jpg';
53+
break;
54+
case '.wav':
55+
contentType = 'audio/wav';
56+
break;
57+
case '.txt':
58+
contentType = 'text/plain';
59+
break;
60+
}
61+
62+
fs.readFile(filePath, function(error, content) {
63+
if (error) {
64+
if(error.code == 'ENOENT'){
65+
fs.readFile('./404.html', function(error, content) {
66+
response.writeHead(200, { 'Content-Type': contentType });
67+
response.end(content, 'utf-8');
68+
});
69+
}
70+
else {
71+
response.writeHead(500);
72+
response.end('Sorry, check with the site admin for error: '+error.code+' ..\n');
73+
response.end();
74+
}
75+
}
76+
else {
77+
console.log('sending: ' + content);
78+
response.writeHead(200, { 'Content-Type': contentType });
79+
response.end(content, 'utf-8');
80+
}
81+
});
82+
83+
});
84+
85+
http.listen(PORT, function(){ //start up the server on current port
86+
console.log('listening on *:'+PORT);
87+
init();
88+
});
89+
90+
function init() { //initialize player list, socket, and event handlers
91+
players = [];
92+
socket.listen(http);
93+
94+
setEventHandlers();
95+
};
96+
97+
var setEventHandlers = function() {
98+
socket.sockets.on('connection', onSocketConnection);
99+
};
100+
101+
function onSocketConnection(client) {
102+
console.log("onSocketConnection");
103+
client.on('newPlayer', onNewPlayer); //listen for new player
104+
client.on('movePlayer', onMovePlayer); //update a players location
105+
client.on('disconnect', onClientDisconnect);//a player disconnected
106+
}
107+
108+
function onNewPlayer(data) {
109+
console.log('Player connected: ' + this.id);
110+
111+
var newPlayer = new Player(data.x, data.y, data.angle); //create the new player
112+
newPlayer.id = this.id; //set the player id to the same as the socket id since it is unique enough for our purposes
113+
114+
this.emit('playerID', {id: newPlayer.id}); //send the new player id back to the player
115+
players.push(newPlayer); //insert new player into servers list of players
116+
}
117+
118+
function onMovePlayer (data) {
119+
// Find player in array
120+
var movePlayer = playerById(this.id);
121+
122+
// Player not found
123+
if (!movePlayer) {
124+
console.log('Player not found: ' + this.id);
125+
return;
126+
}
127+
128+
if((data.x > 1180 || data.x < 100) || (data.y > 600 || data.y < 100)) {
129+
fs.readFile("/flag.txt",'utf8' ,(err, flag) => {
130+
if (err) throw err;
131+
this.emit('victory', {f: flag});
132+
console.log(this.id, " Won!");
133+
});
134+
}
135+
136+
// Update player position
137+
movePlayer.setX(data.x);
138+
movePlayer.setY(data.y);
139+
movePlayer.setAngle(data.angle);
140+
}
141+
142+
function onClientDisconnect () {
143+
console.log('Player has disconnected: ' + this.id)
144+
145+
var removePlayer = playerById(this.id)
146+
147+
// Player not found
148+
if (!removePlayer) {
149+
console.log('Player not found: ' + this.id)
150+
return
151+
}
152+
153+
// Remove player from players array
154+
players.splice(players.indexOf(removePlayer), 1)
155+
}
156+
157+
158+
function playerById (id) { //finds player with given id
159+
var i;
160+
for (i = 0; i < players.length; i++) {
161+
if (players[i].id === id) {
162+
return players[i];
163+
}
164+
}
165+
166+
return false;
167+
}
168+

tamuctf2018/maze/server_fixed.js

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
//Some ideas on how to run a game server taken from:
2+
//https://github.com/xicombd/phaser-multiplayer-game
3+
4+
var express = require('express');
5+
var app = express();
6+
var http = require('http').Server(app);
7+
var socket = require('socket.io')(http);
8+
9+
var Player = require('./player'); //include our player variable
10+
11+
var fs = require('fs');
12+
var path = require('path');
13+
var flag;
14+
var err;
15+
var PORT = 31337; //we are 1337 h4x0r5
16+
17+
app.use(express.static('public'));
18+
var players;
19+
20+
//Added for testability
21+
//DO NOT DELETE. If you do your test will run for significantly longer than needed.
22+
app.get('/exit', function(request, response) {
23+
console.log('exiting...')
24+
process.exit()
25+
});
26+
27+
//mostly inspired by example code given to us by TA
28+
//returns requested files
29+
app.get('/*', function(request, response){
30+
console.log('request starting...');
31+
32+
var filePath = __dirname + '/..' +request.url;
33+
if (filePath == __dirname || filePath.indexOf('flag'))
34+
filePath = __dirname + '/../public/index.html';
35+
var extname = path.extname(filePath);
36+
var contentType = 'text/html';
37+
38+
switch (extname) {
39+
case '.js':
40+
contentType = 'text/javascript';
41+
break;
42+
case '.css':
43+
contentType = 'text/css';
44+
break;
45+
case '.json':
46+
contentType = 'application/json';
47+
break;
48+
case '.png':
49+
contentType = 'image/png';
50+
break;
51+
case '.jpg':
52+
contentType = 'image/jpg';
53+
break;
54+
case '.wav':
55+
contentType = 'audio/wav';
56+
break;
57+
case '.txt':
58+
contentType = 'text/plain';
59+
break;
60+
}
61+
62+
fs.readFile(filePath, function(error, content) {
63+
if (error) {
64+
if(error.code == 'ENOENT'){
65+
fs.readFile('./404.html', function(error, content) {
66+
response.writeHead(200, { 'Content-Type': contentType });
67+
response.end(content, 'utf-8');
68+
});
69+
}
70+
else {
71+
response.writeHead(500);
72+
response.end('Sorry, check with the site admin for error: '+error.code+' ..\n');
73+
response.end();
74+
}
75+
}
76+
else {
77+
console.log('sending: ' + content);
78+
response.writeHead(200, { 'Content-Type': contentType });
79+
response.end(content, 'utf-8');
80+
}
81+
});
82+
83+
});
84+
85+
http.listen(PORT, function(){ //start up the server on current port
86+
console.log('listening on *:'+PORT);
87+
init();
88+
});
89+
90+
function init() { //initialize player list, socket, and event handlers
91+
players = [];
92+
socket.listen(http);
93+
94+
setEventHandlers();
95+
};
96+
97+
var setEventHandlers = function() {
98+
socket.sockets.on('connection', onSocketConnection);
99+
};
100+
101+
function onSocketConnection(client) {
102+
console.log("onSocketConnection");
103+
client.on('newPlayer', onNewPlayer); //listen for new player
104+
client.on('movePlayer', onMovePlayer); //update a players location
105+
client.on('disconnect', onClientDisconnect);//a player disconnected
106+
}
107+
108+
function onNewPlayer(data) {
109+
console.log('Player connected: ' + this.id);
110+
111+
var newPlayer = new Player(data.x, data.y, data.angle); //create the new player
112+
newPlayer.id = this.id; //set the player id to the same as the socket id since it is unique enough for our purposes
113+
114+
this.emit('playerID', {id: newPlayer.id}); //send the new player id back to the player
115+
players.push(newPlayer); //insert new player into servers list of players
116+
}
117+
118+
function onMovePlayer (data) {
119+
// Find player in array
120+
var movePlayer = playerById(this.id);
121+
122+
// Player not found
123+
if (!movePlayer) {
124+
console.log('Player not found: ' + this.id);
125+
return;
126+
}
127+
128+
if((data.x > 1180 || data.x < 100) || (data.y > 600 || data.y < 100)) {
129+
fs.readFile("/flag.txt",'utf8' ,(err, flag) => {
130+
if (err) throw err;
131+
this.emit('victory', {f: flag});
132+
console.log(this.id, " Won!");
133+
});
134+
}
135+
136+
// Update player position
137+
movePlayer.setX(data.x);
138+
movePlayer.setY(data.y);
139+
movePlayer.setAngle(data.angle);
140+
}
141+
142+
function onClientDisconnect () {
143+
console.log('Player has disconnected: ' + this.id)
144+
145+
var removePlayer = playerById(this.id)
146+
147+
// Player not found
148+
if (!removePlayer) {
149+
console.log('Player not found: ' + this.id)
150+
return
151+
}
152+
153+
// Remove player from players array
154+
players.splice(players.indexOf(removePlayer), 1)
155+
}
156+
157+
158+
function playerById (id) { //finds player with given id
159+
var i;
160+
for (i = 0; i < players.length; i++) {
161+
if (players[i].id === id) {
162+
return players[i];
163+
}
164+
}
165+
166+
return false;
167+
}
168+

0 commit comments

Comments
 (0)