-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
110 lines (94 loc) · 2.7 KB
/
app.js
File metadata and controls
110 lines (94 loc) · 2.7 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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
// Setup basic express server
const fetch = require('node-fetch');
const express = require('express');
const cors = require('cors');
const cookieParser = require('cookie-parser');
const app = express();
const http = require('http').createServer(app);
const io = require('socket.io')(http);
const port = process.env.PORT || 7374;
require('dotenv').config();
// Imports from other files
const Room = require('./src/Room');
var corsOptions = {
origin: function (origin, callback) {
callback(null, true)
}
}
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*"); // update to match the domain you will make the request from
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
// Routing
/*
app.use(express.static(__dirname + '/public'))
.use(cors(corsOptions))
.use(cookieParser());
*/
app.get('/', function (req, res) {
res.send('<b>onQueue Server</b>');
});
// HTTP server listen
http.listen(port, function(){
console.log('Server listening at port %d', port);
});
// Fired upon connection with client
io.on('connection', function(socket) {
console.log('User connected.');
// Handle creating a room
socket.on('create room', function(data) {
console.log('Socket event "create room" called.');
const res = Room.createRoom(socket, data);
socket.emit('event', res[1]);
});
// Handle joining a room
socket.on('join room', function(data) {
console.log('Socket event "join room" called.');
res = Room.joinRoom(socket, data);
socket.emit('update', {
type: 'room',
room: res
});
});
// Handle room commands
socket.on('command', function(data) {
let roomID = '';
Object.values(socket.rooms).forEach(value => {
if (value[0] !== socket.id) {
roomID = value;
}
});
console.log(roomID);
io.in(roomID).emit('command', data);
});
//Handle state updates
socket.on('update', function(data) {
let roomID = '';
Room.handleEvent(socket, data);
Object.values(socket.rooms).forEach(value => {
if (value[0] !== socket.id) {
roomID = value;
}
});
io.in(roomID).emit('update', data);
});
socket.on('rooms', function() {
socket.emit('rooms', Room.handleInfo());
});
socket.on('search', function(data) {
console.log('Socket event "search" called.');
Room.handleSearch(socket, data.query).then(data => {
socket.emit('search', data);
});
});
// TODO: Handle disconnect
socket.on('disconnect', function(){
Room.leaveRoom(socket);
console.log('User disconnected');
});
});
// HTML file for testing
// app.get("/", (req, res) => {
// res.sendFile(__dirname + '/index.html');
// });