Kopie van https://gitlab.com/studieverenigingvia/ict/centurion met een paar aanpassingen
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
centurion/backend/src/index.ts

187 lines
4.9 KiB

import express from "express";
import { Server } from "socket.io";
import path from "path";
import Service from "./Service";
import { RoomOptions } from "./Room";
// process.on('SIGINT', () => process.exit());
// process.on('SIGTERM', () => process.exit());
const HOST = "0.0.0.0";
const PORT = 3001;
const app = express();
const httpServer = app.listen(PORT, HOST, () =>
console.log(`Centurion listening on port ${PORT}!`)
);
app.use(express.static(path.join(__dirname, "../public")));
const io = new Server(httpServer);
const service = new Service();
app.get("/state", (req, res) => {
return res.json(service.rooms.map((r) => r.serialize()));
});
io.on("connection", (socket) => {
socket.on("disconnect", async () => {
await service.onSocketDisconnect(socket);
});
socket.on("ping", () => {
socket.emit("pong");
});
socket.on("time_sync", (requestId: number, clientTime: number) => {
if (!Number.isSafeInteger(requestId)) return;
if (!Number.isSafeInteger(clientTime)) return;
service.onTimeSync(socket, requestId, clientTime);
});
socket.on("room_options", (options: RoomOptions) => {
if (!options) return;
if (!options.timelineName || typeof options.timelineName !== "string")
return;
if (!Number.isSafeInteger(options.seekTime)) return;
service.onSetRoomOptions(socket, options);
});
socket.on("request_start", () => {
service.onRequestStart(socket);
});
socket.on(
"request_join",
async (roomId: number, callback: (err?: string, res?: boolean) => void) => {
if (!Number.isSafeInteger(roomId)) {
return callback("Invalid roomId.");
}
if (!service.hasRoomId(roomId)) {
// cannot join a room that does not exist.
return callback(undefined, false);
}
try {
const didJoinRoom = await service.onRequestJoin(socket, roomId);
callback(undefined, didJoinRoom);
} catch (e) {
callback(e instanceof Error ? e.message : "Unknown error.");
}
}
);
socket.on("request_set_ready", () => {
service.onRequestSetReady(socket);
});
socket.on("request_join_random", async () => {
await service.onRequestJoinRandom(socket);
});
socket.on(
"submit_ticker_message",
(message?: unknown, callback?: (res?: null, err?: string) => void) => {
if (typeof message !== "string") {
return callback && callback(null, "Invalid message.");
}
if (message.length > 192) {
// perfect voor het Wilhelmus
return callback && callback(null, "Message too long.");
}
try {
service.submitTickerMessage(socket, message);
return callback && callback();
} catch (e) {
console.error(e);
return (
callback &&
callback(null, e instanceof Error ? e.message : "Unknown error")
);
}
}
);
service.onSocketConnect(socket);
// if (name == 'request_join') {
// let roomId = params && params['roomId'];
// if (!Number.isSafeInteger(roomId)) {
// call.error('Invalid room id');
// return;
// }
// if (!service.hasRoomId(roomId)) {
// call.respond(false);
// return;
// }
// if (service.onRequestJoin(socket, roomId)) {
// call.respond(true);
// } else {
// call.respond(false);
// }
// }
/*socket.on('join_room', (roomId, callback) => {
if (!callback || typeof callback !== 'function') {
console.error("Join: Callback not a function.");
return
}
if (!roomId) {
return callback('no_room_id_given');
}
if (!Number.isSafeInteger(+roomId)) {
return callback('room_id_not_integer');
}
console.log(`${socketId} wants to join '${roomId}'.`);
// Leave current room first
let currentRoom = service.getUserRoom(socketId);
if (currentRoom) {
socket.leave(currentRoom.name);
service.leaveRoom(socketId);
}
const room = service.joinRoom(socketId, roomId);
socket.join(room.name);
sendRoom(socket, room);
});
socket.on('room_info', callback => {
if (!callback || typeof callback !== 'function') {
console.error("Room info: Callback not a function.");
return
}
const room = service.getUserRoom(socketId);
sendRoom(socket, room);
});
socket.on('request_start', (time = null) => {
console.log('request start', socket.rooms);
const room = service.getUserRoom(socketId);
if (!room.isLeader(socketId)) {
console.warn("Non leader tried to start.");
return;
}
room.run(io);
sendRoom(io.to(room.name.toString()), room);
if (typeof time === 'number' && time) {
console.log("Starting at", time);
room.seek(io, time);
}
});*/
});