coordinating shared state

This commit is contained in:
2022-06-04 13:44:49 -05:00
parent 44a2db47bc
commit 603e75aafc
5 changed files with 63 additions and 14 deletions

View File

@@ -1,31 +1,51 @@
import { useState, useEffect } from 'react' import { useState, useEffect } from 'react'
import logo from './logo.svg'
import io from 'socket.io-client' import io from 'socket.io-client'
// import './App.css'
import PlayerCard from './components/PlayerCard';
import "./styles.css";
function App() { function App() {
const [socket, setSocket] = useState(); const [socket, setSocket] = useState();
const [state, setState] = useState({
socket: null,
players: null,
id: null,
})
useEffect(() => { useEffect(() => {
const newSocket = io("http://localhost:8000"); const newSocket = io("http://localhost:8000");
setSocket(newSocket); setState({...state, socket: newSocket});
return () => newSocket.close(); return () => newSocket.close();
}, [setSocket]); }, []);
useEffect(() => { useEffect(() => {
if (!socket) return; if (state.socket) {
socket.on('connection', (data) => { state.socket.on('connect', (data) => {
console.log('connected!' + data); console.log("connection to Express successful!");
}) console.log(data);
}, [socket]);
setState({
...state,
id: state.socket.id,
players: data
});
// state.socket.emit('connect', null);
})
}
}, [state.socket]);
return ( return (
<div className="App"> <div className="App">
<header className="App-header"> <h1>Hello Vite + React!</h1>
<img src={logo} className="App-logo" alt="logo" /> {<h2>Your socket ID is: {state.id || ''}</h2>}
<p>Hello Vite + React!</p> {<h3>Active players: {state.players || ''}</h3>}
</header>
<div className="players">
<PlayerCard name="Me" votes={null} />
</div>
</div> </div>
) )
} }

View File

View File

@@ -0,0 +1,7 @@
export default function PlayerCard({ name, votes }) {
return (
<>
<h1>Name: {name}</h1>
</>
)
}

7
client/src/styles.css Normal file
View File

@@ -0,0 +1,7 @@
.App {
display: flex;
flex-direction: column;
align-items: center;
background-color: lightgray;
height: max(900px, 100vh);
}

View File

@@ -13,12 +13,27 @@ const io = socketIO(server, {
} }
}); });
let players = [];
server.listen(8000, (err) => { server.listen(8000, (err) => {
if (err) console.log(err); if (err) console.log(err);
console.log("Listening on 8000"); console.log("Listening on 8000");
io.on('connection', (socket) => { io.on('connection', (socket) => {
if (players.length === 0) players.push(socket.id);
console.log('new client connected.'); console.log('new client connected.');
socket.emit('connection', 'data'); console.log(`players: ${players}`);
console.log('');
socket.emit('connection', players);
socket.on('disconnect', () => {
let found = players.indexOf(socket.id);
players = players.splice(found, 0, '');
console.log(`player ${socket.id} disconnected`);
console.log(`players: ${players}`);
console.log('');
})
}); });
}) })