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.

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