Audio is working
Signed-off-by: James Ketrenos <james_eikona@ketrenos.com>
This commit is contained in:
parent
211d03548d
commit
689b498f6b
@ -1,6 +1,5 @@
|
|||||||
body {
|
body {
|
||||||
font-family: 'Droid Sans', 'Arial Narrow', Arial, sans-serif;
|
font-family: 'Droid Sans', 'Arial Narrow', Arial, sans-serif;
|
||||||
background-color: black;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#root {
|
#root {
|
||||||
|
@ -13,10 +13,10 @@ import history from "./history.js";
|
|||||||
import { GlobalContext } from "./GlobalContext.js";
|
import { GlobalContext } from "./GlobalContext.js";
|
||||||
import { PingPong } from "./PingPong.js";
|
import { PingPong } from "./PingPong.js";
|
||||||
import { PlayerList } from "./PlayerList.js";
|
import { PlayerList } from "./PlayerList.js";
|
||||||
import { PlayerName } from "./PlayerName.js";
|
|
||||||
import { Chat } from "./Chat.js";
|
import { Chat } from "./Chat.js";
|
||||||
import { MediaAgent } from "./MediaControl.js";
|
import { MediaAgent } from "./MediaControl.js";
|
||||||
import { Board } from "./Board.js";
|
import { Board } from "./Board.js";
|
||||||
|
import { Actions } from "./Actions.js";
|
||||||
|
|
||||||
import "./App.css";
|
import "./App.css";
|
||||||
|
|
||||||
@ -193,18 +193,19 @@ const Table = () => {
|
|||||||
|
|
||||||
console.log(`Loaded: ${loaded}`);
|
console.log(`Loaded: ${loaded}`);
|
||||||
|
|
||||||
return <GlobalContext.Provider value={{ ws, name, gameId, peers, setPeers }}>
|
return <GlobalContext.Provider value={{
|
||||||
|
ws, name, gameId, peers, setPeers }}>
|
||||||
<MediaAgent/>
|
<MediaAgent/>
|
||||||
<PingPong/>
|
<PingPong/>
|
||||||
<div className="Table">
|
<div className="Table">
|
||||||
<div className="Game">
|
<div className="Game">
|
||||||
<Board/>
|
<Board/>
|
||||||
<div className="Pieces"/>
|
<div className="Hand">todo: player's hand</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="Sidebar">
|
<div className="Sidebar">
|
||||||
{ loaded && name === "" && <PlayerName/> }
|
|
||||||
{ name !== "" && <PlayerList/> }
|
{ name !== "" && <PlayerList/> }
|
||||||
{ name !== "" && <Chat/> }
|
{ name !== "" && <Chat/> }
|
||||||
|
{ loaded && <Actions/> }
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</GlobalContext.Provider>;
|
</GlobalContext.Provider>;
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
padding: 0.5em;
|
padding: 0.5em;
|
||||||
position: relative;
|
position: relative;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
margin: 0.25rem 0.25rem 0.25rem 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ChatList {
|
.ChatList {
|
||||||
|
@ -304,7 +304,7 @@ const MediaAgent = () => {
|
|||||||
}, [peers, name, setPeers, stream]);
|
}, [peers, name, setPeers, stream]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!ws) {
|
if (!ws || !name) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -338,7 +338,7 @@ const MediaAgent = () => {
|
|||||||
console.error(error);
|
console.error(error);
|
||||||
console.log("Access denied for audio/video");
|
console.log("Access denied for audio/video");
|
||||||
});
|
});
|
||||||
}, [ws, setStream]);
|
}, [ws, setStream, name]);
|
||||||
|
|
||||||
if (!ws) {
|
if (!ws) {
|
||||||
return <></>;
|
return <></>;
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
padding: 0.5em;
|
padding: 0.5em;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
margin: 0.25rem 0.25rem 0.25rem 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.PlayerList .Name {
|
.PlayerList .Name {
|
||||||
@ -33,6 +34,11 @@
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin: 0.25rem;
|
margin: 0.25rem;
|
||||||
|
padding: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.PlayerList .Unselected .Self {
|
||||||
|
background-color: rgba(255, 255, 0, 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
.PlayerList .PlayerSelector .PlayerColor {
|
.PlayerList .PlayerSelector .PlayerColor {
|
||||||
|
@ -18,10 +18,10 @@ const PlayerList = () => {
|
|||||||
const data = JSON.parse(event.data);
|
const data = JSON.parse(event.data);
|
||||||
switch (data.type) {
|
switch (data.type) {
|
||||||
case 'game-update':
|
case 'game-update':
|
||||||
if (data.update.unselected) {
|
if ('unselected' in data.update) {
|
||||||
setUneslected(data.update.unselected);
|
setUneslected(data.update.unselected);
|
||||||
}
|
}
|
||||||
if (data.update.players) {
|
if ('players' in data.update) {
|
||||||
let found = false;
|
let found = false;
|
||||||
for (let key in data.update.players) {
|
for (let key in data.update.players) {
|
||||||
if (data.update.players[key].name === name) {
|
if (data.update.players[key].name === name) {
|
||||||
@ -35,7 +35,7 @@ const PlayerList = () => {
|
|||||||
}
|
}
|
||||||
setPlayers(data.update.players);
|
setPlayers(data.update.players);
|
||||||
}
|
}
|
||||||
if (data.update.state) {
|
if ('state' in data.update && data.update.state !== state) {
|
||||||
setState(data.update.state);
|
setState(data.update.state);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -100,7 +100,7 @@ const PlayerList = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const waiting = unselected.map((player) => {
|
const waiting = unselected.map((player) => {
|
||||||
return <div key={player}>
|
return <div className={player === name ? 'Self' : ''} key={player}>
|
||||||
<div>{ player }</div>
|
<div>{ player }</div>
|
||||||
<MediaControl peer={player} isSelf={name === player}/>
|
<MediaControl peer={player} isSelf={name === player}/>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,61 +1,19 @@
|
|||||||
import React, { useState, useEffect, useContext, useRef } from "react";
|
import React, { useState, useEffect, useContext, useRef } from "react";
|
||||||
import "./PlayerName.css";
|
import "./PlayerName.css";
|
||||||
import Paper from '@material-ui/core/Paper';
|
|
||||||
import TextField from '@material-ui/core/TextField';
|
import TextField from '@material-ui/core/TextField';
|
||||||
import Button from '@material-ui/core/Button';
|
import Button from '@material-ui/core/Button';
|
||||||
|
|
||||||
import { GlobalContext } from "./GlobalContext.js";
|
const PlayerName = ({ name, setName }) => {
|
||||||
|
const [edit, setEdit] = useState(name);
|
||||||
const PlayerName = () => {
|
|
||||||
const global = useContext(GlobalContext);
|
|
||||||
const [name, setName] = useState(global.name ? global.name : "");
|
|
||||||
const [error, setError] = useState("");
|
|
||||||
|
|
||||||
const onWsMessage = (event) => {
|
|
||||||
const data = JSON.parse(event.data);
|
|
||||||
switch (data.type) {
|
|
||||||
case 'game-update':
|
|
||||||
if ('name' in data.update && data.update.name !== name) {
|
|
||||||
setName(data.update.name);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'player-name':
|
|
||||||
if ('error' in data) {
|
|
||||||
setError(data.error);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const refWsMessage = useRef(onWsMessage);
|
|
||||||
|
|
||||||
useEffect(() => { refWsMessage.current = onWsMessage; });
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (!global.ws) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const cbMessage = e => refWsMessage.current(e);
|
|
||||||
global.ws.addEventListener('message', cbMessage);
|
|
||||||
return () => {
|
|
||||||
global.ws.removeEventListener('message', cbMessage);
|
|
||||||
}
|
|
||||||
}, [global.ws, refWsMessage]);
|
|
||||||
|
|
||||||
const sendName = () => {
|
const sendName = () => {
|
||||||
if (name !== global.name && name !== "") {
|
if (edit !== name) {
|
||||||
if (error) {
|
setName(edit);
|
||||||
setError("");
|
|
||||||
}
|
|
||||||
global.ws.send(JSON.stringify({ type: 'player-name', name }));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const nameChange = (event) => {
|
const nameChange = (event) => {
|
||||||
setName(event.target.value);
|
setEdit(event.target.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
const nameKeyPress = (event) => {
|
const nameKeyPress = (event) => {
|
||||||
@ -65,17 +23,16 @@ const PlayerName = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Paper className="PlayerName">
|
<div className="PlayerName">
|
||||||
{ error !== "" && <div>Error: {error}</div> }
|
|
||||||
<TextField className="nameInput"
|
<TextField className="nameInput"
|
||||||
onChange={nameChange}
|
onChange={nameChange}
|
||||||
onKeyPress={nameKeyPress}
|
onKeyPress={nameKeyPress}
|
||||||
label="Enter your name"
|
label="Enter your name"
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={name}
|
value={edit}
|
||||||
/>
|
/>
|
||||||
<Button onClick={() => sendName()}>Set</Button>
|
<Button onClick={sendName}>Set</Button>
|
||||||
</Paper>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -483,7 +483,8 @@ const getSession = (game, reqSession) => {
|
|||||||
name: undefined,
|
name: undefined,
|
||||||
color: undefined,
|
color: undefined,
|
||||||
player: undefined,
|
player: undefined,
|
||||||
lastActive: Date.now()
|
lastActive: Date.now(),
|
||||||
|
live: true
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -508,7 +509,9 @@ const getSession = (game, reqSession) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
session.lastActive = Date.now();
|
session.lastActive = Date.now();
|
||||||
|
session.live = true;
|
||||||
if (session.player) {
|
if (session.player) {
|
||||||
|
session.player.live = true;
|
||||||
session.player.lastActive = session.lastActive;
|
session.player.lastActive = session.lastActive;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -847,7 +850,7 @@ const setPlayerName = (game, session, name) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let message;
|
let message, hasAudio = false;
|
||||||
|
|
||||||
if (!session.name) {
|
if (!session.name) {
|
||||||
message = `A new player has entered the lobby as ${name}.`;
|
message = `A new player has entered the lobby as ${name}.`;
|
||||||
@ -860,7 +863,8 @@ const setPlayerName = (game, session, name) => {
|
|||||||
message = `${name} has rejoined the lobby.`;
|
message = `${name} has rejoined the lobby.`;
|
||||||
}
|
}
|
||||||
session.name = name;
|
session.name = name;
|
||||||
if (session.ws && id in audio) {
|
if (session.ws && (id in audio) && session.name in audio[id]) {
|
||||||
|
hasAudio = true;
|
||||||
part(audio[id], session, game.id);
|
part(audio[id], session, game.id);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -874,14 +878,27 @@ const setPlayerName = (game, session, name) => {
|
|||||||
|
|
||||||
if (!session.color) {
|
if (!session.color) {
|
||||||
console.log(`Adding ${session.name} to the unselected`);
|
console.log(`Adding ${session.name} to the unselected`);
|
||||||
game.unselected.push(session);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (session.ws) {
|
if (session.ws && hasAudio) {
|
||||||
join(audio[id], session, game.id);
|
join(audio[id], session, game.id);
|
||||||
}
|
}
|
||||||
console.log(message);
|
console.log(message);
|
||||||
addChatMessage(game, null, message);
|
addChatMessage(game, null, message);
|
||||||
|
|
||||||
|
session.live = true;
|
||||||
|
if (session.player) {
|
||||||
|
session.player.live = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Rebuild the unselected list */
|
||||||
|
game.unselected = [];
|
||||||
|
for (let id in game.sessions) {
|
||||||
|
if (!game.sessions[id].color && game.sessions[id].name) {
|
||||||
|
game.unselected.push(game.sessions[id]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -957,6 +974,8 @@ const setPlayerColor = (game, session, color) => {
|
|||||||
session.player.status = `Active`;
|
session.player.status = `Active`;
|
||||||
session.player.lastActive = Date.now();
|
session.player.lastActive = Date.now();
|
||||||
session.color = color;
|
session.color = color;
|
||||||
|
session.live = true;
|
||||||
|
session.player.live = true;
|
||||||
game.players[color].name = session.name;
|
game.players[color].name = session.name;
|
||||||
|
|
||||||
/* Rebuild the unselected list */
|
/* Rebuild the unselected list */
|
||||||
@ -2896,7 +2915,7 @@ const departLobby = (game, session, color) => {
|
|||||||
update.unselected = getFilteredUnselected(game);
|
update.unselected = getFilteredUnselected(game);
|
||||||
|
|
||||||
if (session.player) {
|
if (session.player) {
|
||||||
session.player.live = true;
|
session.player.live = false;
|
||||||
update.players = game.players;
|
update.players = game.players;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3524,6 +3543,7 @@ const filterGameForPlayer = (game, session) => {
|
|||||||
reducedGame.unselected = getFilteredUnselected(game);
|
reducedGame.unselected = getFilteredUnselected(game);
|
||||||
|
|
||||||
return Object.assign(reducedGame, {
|
return Object.assign(reducedGame, {
|
||||||
|
live: true,
|
||||||
timestamp: Date.now(),
|
timestamp: Date.now(),
|
||||||
status: session.error ? session.error : "success",
|
status: session.error ? session.error : "success",
|
||||||
name: session.name,
|
name: session.name,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user