added socketio connection

This commit is contained in:
Wenszel 2022-05-28 20:09:46 +02:00
parent 068cb70c0c
commit f24bbf2daf
8 changed files with 443 additions and 22963 deletions

View File

@ -1 +0,0 @@
HOST=smaga-wiktor-ludo.herokuapp.com

1152
backend/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -7,6 +7,7 @@
"cors": "^2.8.5",
"express": "^4.17.1",
"express-session": "^1.17.1",
"mongoose": "^5.12.0"
"mongoose": "^5.12.0",
"socket.io": "^4.5.1"
}
}

View File

@ -1,59 +1,68 @@
const express = require("express");
const cors = require('cors');
const cookieParser = require('cookie-parser')
const session = require('express-session')
const cors = require("cors");
const cookieParser = require("cookie-parser");
const session = require("express-session");
const app = express();
app.use(cookieParser());
app.use(express.urlencoded({
extended: true
}));
app.use(
express.urlencoded({
extended: true,
})
);
app.use(express.json());
app.set('trust proxy', 1)
app.use(cors({
origin: [
'http://localhost:5000',
'https://localhost:5000',
'http://localhost:3001',
],
credentials: true,
}))
const PORT = process.env.PORT;
app.set("trust proxy", 1);
app.use(
cors({
origin: [
"http://localhost:5000",
"https://localhost:5000",
"http://localhost:3001",
"http://localhost:3000",
],
credentials: true,
})
);
const PORT = 5000;
//DATABASE CONFIG
const mongoose = require("mongoose");
mongoose.set('useFindAndModify', false);
//const CONNECTION_URI = require("./credentials.js").MONGODB_URL;
mongoose.set("useFindAndModify", false);
const CONNECTION_URI = require("./credentials.js");
mongoose.connect(process.env.MONGODB_URL, {
mongoose
.connect(CONNECTION_URI, {
useNewUrlParser: true,
useUnifiedTopology: true
useUnifiedTopology: true,
})
.then(() => {
console.log('MongoDB Connected…');
console.log("MongoDB Connected…");
})
.catch(err => console.error(err));
.catch((err) => console.error(err));
//SESSION CONFIG]
var MongoDBStore = require('connect-mongodb-session')(session);
var MongoDBStore = require("connect-mongodb-session")(session);
var store = new MongoDBStore({
uri: process.env.MONGODB_URL,
collection: 'sessions'
uri: CONNECTION_URI,
collection: "sessions",
});
app.use(session({
secret: 'lalala',
resave: true,
saveUninitialized: false,
store: store,
cookie: {
httpOnly: false,
secure: false,},
}));
app.use(
session({
secret: "lalala",
resave: true,
saveUninitialized: false,
store: store,
cookie: {
httpOnly: false,
secure: false,
},
})
);
if (process.env.NODE_ENV === 'production') {
app.use(express.static('/app/build'))
app.get('/', (req, res) => {
res.sendFile('/app/build/index.html')
if (process.env.NODE_ENV === "production") {
app.use(express.static("/app/build"));
app.get("/", (req, res) => {
res.sendFile("/app/build/index.html");
});
}
@ -62,10 +71,19 @@ const roomRoutes = require("./routes/room");
const playerRoutes = require("./routes/player");
const gameRoutes = require("./routes/game");
app.use('/player', playerRoutes);
app.use('/room', roomRoutes);
app.use('/game', gameRoutes)
app.use("/player", playerRoutes);
app.use("/room", roomRoutes);
app.use("/game", gameRoutes);
app.listen(PORT, ()=>{
console.log("Server runs on port "+PORT);
const server = app.listen(PORT, () => {
console.log("Server runs on port " + PORT);
});
const socket = require("socket.io");
const io = socket(server, {
cors: {
origin: "http://localhost:3000",
},
});
io.on("connection", () => {
console.log("a user connected");
});

22047
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -13,10 +13,12 @@
"react-dom": "^17.0.1",
"react-router-dom": "^5.2.0",
"react-scripts": "4.0.3",
"socket.io": "^4.5.1",
"socket.io-client": "^4.5.1",
"web-vitals": "^1.1.0"
},
"scripts": {
"start": "node backend/server.js",
"start": "react-scripts start",
"build": "react-scripts build",
"heroku-postbuild": "cd backend && npm install && cd .. && npm install && npm run build",
"test": "react-scripts test",
@ -30,7 +32,7 @@
},
"engines": {
"node": "10.16.0"
},
},
"browserslist": {
"production": [
">0.2%",

View File

@ -1 +0,0 @@
worker: node backend/server.js

View File

@ -1,11 +1,16 @@
import React, { useEffect, useState, createContext } from 'react';
import axios from 'axios';
import React, { useEffect, useState, createContext } from "react";
import axios from "axios";
import { io } from "socket.io-client";
import { Beforeunload } from "react-beforeunload";
import {
BrowserRouter as Router,
Route,
Redirect,
Switch,
} from "react-router-dom";
import { Beforeunload } from 'react-beforeunload';
import { BrowserRouter as Router , Route , Redirect, Switch } from 'react-router-dom';
import Gameboard from './components/Gameboard'
import NameInput from './components/NameInput';
import Gameboard from "./components/Gameboard";
import NameInput from "./components/NameInput";
export const PlayerDataContext = createContext();
@ -14,52 +19,57 @@ function App() {
const [redirect, setRedirect] = useState();
useEffect(() => {
axios.get('/player', {
withCredentials:true,
})
.then(response => {
setPlayerData(response.data)
response.data.roomId!=null ? setRedirect(true) : setRedirect(false);
});
},[]);
const socket = io("http://localhost:5000");
socket.on("connect", () => console.log(socket.id));
axios
.get("/player", {
withCredentials: true,
})
.then((response) => {
setPlayerData(response.data);
response.data.roomId != null ? setRedirect(true) : setRedirect(false);
});
}, []);
const handleExit = e => {
const handleExit = (e) => {
e.preventDefault();
window.addEventListener('unload', () => {
axios.post('/player/exit', {withCredentials:true, })
window.addEventListener("unload", () => {
axios.post("/player/exit", { withCredentials: true });
});
}
};
const idCallback = () => {
axios.get('/player/', {
withCredentials:true,
})
.then(response => {
setPlayerData(response.data);
console.log(response.data);
setRedirect(true);
})
}
axios
.get("/player/", {
withCredentials: true,
})
.then((response) => {
setPlayerData(response.data);
console.log(response.data);
setRedirect(true);
});
};
return (
<Router>
{redirect ? <Redirect to="/game"/> : <Redirect to="/login"/>}
{redirect ? <Redirect to="/game" /> : <Redirect to="/login" />}
<Switch>
<Route exact path = "/">
<Route exact path="/">
LOADING...
</Route>
<Route path="/login">
<NameInput idCallback = {idCallback}/>
</Route>
<Route path="/game">
{playerData ?
<Route path="/login">
<NameInput idCallback={idCallback} />
</Route>
<Route path="/game">
{playerData ? (
<Beforeunload onBeforeunload={handleExit}>
<PlayerDataContext.Provider value={playerData}>
<Gameboard/>
<Gameboard />
</PlayerDataContext.Provider>
</Beforeunload> : null}
</Route>
</Switch>
</Beforeunload>
) : null}
</Route>
</Switch>
</Router>
);
}