A React/Express online multiplayer Tombola client/server combo.
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.
 
 
 
 

70 lines
2.5 KiB

/// <reference path="./index.d.ts" />
import express from 'express';
import path from 'path';
import http from 'http';
import socketio from 'socket.io';
import randomstring from "randomstring";
// import routes from './routes';
import { chooseCartella, choseAllCartelle, createRoom, extractNumber, joinRoom, pleaseGiveMeCartelle, ready, startGame, unchooseCartella, updatePlayers } from './routines/rooms';
import cartelle from './cartelle';
import {
stripIndents
} from "common-tags";
import ip from "ip";
import { ClientEventNames } from "../common/events";
import { config } from "dotenv";
import { join } from 'path';
config({
path: join(__dirname, "..", "..", ".env")
});
const app = express();
app.use(express.json());
app.use(express.urlencoded());
app.use(express.static(path.join(__dirname, '..', '..', 'build')));
// app.use(routes);
// 404 route
app.get("*", (req, res) => res.sendFile(path.join(__dirname, '..', '..', 'build', 'index.html')));
const server = http.createServer(app);
const io = new socketio.Server(server, {
cors: {
origin: process.env.DOMAIN,
methods: ["GET", "POST"]
}
});
io.on("connection", (socket: socketio.Socket) => {
const ID = randomstring.generate();
socket.emit("ID", ID)
console.log("client connected:", ID);
socket.on("disconnect", () => console.log(`client disconnected: ${ID}`));
socket.on("createRoom", createRoom.bind(null, socket, ID));
socket.on("joinRoom", joinRoom.bind(null, socket, ID));
socket.on("playersUpdate", updatePlayers.bind(null, socket, ID));
socket.on("extractNumber", extractNumber.bind(null, socket, ID));
socket.on("chooseCartella", chooseCartella.bind(null, socket, ID));
socket.on("unchooseCartella", unchooseCartella.bind(null, socket, ID));
socket.on("startGame", startGame.bind(null, socket, ID));
socket.on("choseAllCartelle", choseAllCartelle.bind(null, socket, ID));
socket.on(ClientEventNames.PleaseGiveMeCartelle, pleaseGiveMeCartelle.bind(null, socket, ID));
socket.on(ClientEventNames.GiveAllCartelle, () => {
socket.emit(ClientEventNames.GiveAllCartelle, cartelle);
});
socket.on(ClientEventNames.Ready, ready.bind(null, socket, ID));
})
const PORT = process.env.PORT || 8080;
server.listen(PORT, () => {
console.log(stripIndents`
Listening on port ${PORT}.
Localhost server: http://localhost:${PORT}
Local net server: https://${ip.address()}:${PORT}
Configured domain: ${process.env.DOMAIN}
`)
});