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.

69 lines
2.5 KiB

3 years ago
3 years ago
3 years ago
3 years ago
  1. /// <reference path="./index.d.ts" />
  2. import express from 'express';
  3. import path from 'path';
  4. import http from 'http';
  5. import socketio from 'socket.io';
  6. import randomstring from "randomstring";
  7. // import routes from './routes';
  8. import { chooseCartella, choseAllCartelle, createRoom, extractNumber, joinRoom, pleaseGiveMeCartelle, ready, startGame, unchooseCartella, updatePlayers } from './routines/rooms';
  9. import cartelle from './cartelle';
  10. import {
  11. stripIndents
  12. } from "common-tags";
  13. import ip from "ip";
  14. import { ClientEventNames } from "../common/events";
  15. import { config } from "dotenv";
  16. import { join } from 'path';
  17. config({
  18. path: join(__dirname, "..", "..", ".env")
  19. });
  20. const app = express();
  21. app.use(express.json());
  22. app.use(express.urlencoded());
  23. app.use(express.static(path.join(__dirname, '..', '..', 'build')));
  24. // app.use(routes);
  25. // 404 route
  26. app.get("*", (req, res) => res.sendFile(path.join(__dirname, '..', '..', 'build', 'index.html')));
  27. const server = http.createServer(app);
  28. const io = new socketio.Server(server, {
  29. cors: {
  30. origin: process.env.DOMAIN,
  31. methods: ["GET", "POST"]
  32. }
  33. });
  34. io.on("connection", (socket: socketio.Socket) => {
  35. const ID = randomstring.generate();
  36. socket.emit("ID", ID)
  37. console.log("client connected:", ID);
  38. socket.on("disconnect", () => console.log(`client disconnected: ${ID}`));
  39. socket.on("createRoom", createRoom.bind(null, socket, ID));
  40. socket.on("joinRoom", joinRoom.bind(null, socket, ID));
  41. socket.on("playersUpdate", updatePlayers.bind(null, socket, ID));
  42. socket.on("extractNumber", extractNumber.bind(null, socket, ID));
  43. socket.on("chooseCartella", chooseCartella.bind(null, socket, ID));
  44. socket.on("unchooseCartella", unchooseCartella.bind(null, socket, ID));
  45. socket.on("startGame", startGame.bind(null, socket, ID));
  46. socket.on("choseAllCartelle", choseAllCartelle.bind(null, socket, ID));
  47. socket.on(ClientEventNames.PleaseGiveMeCartelle, pleaseGiveMeCartelle.bind(null, socket, ID));
  48. socket.on(ClientEventNames.GiveAllCartelle, () => {
  49. socket.emit(ClientEventNames.GiveAllCartelle, cartelle);
  50. });
  51. socket.on(ClientEventNames.Ready, ready.bind(null, socket, ID));
  52. })
  53. const PORT = process.env.PORT || 8080;
  54. server.listen(PORT, () => {
  55. console.log(stripIndents`
  56. Listening on port ${PORT}.
  57. Localhost server: http://localhost:${PORT}
  58. Local net server: https://${ip.address()}:${PORT}
  59. Configured domain: ${process.env.DOMAIN}
  60. `)
  61. });