1
0

Player sorting is correct -- disconnects with removePeer are not

Signed-off-by: James Ketrenos <james_eikona@ketrenos.com>
This commit is contained in:
James Ketrenos 2022-03-16 07:58:21 -07:00
parent b1aeaffc59
commit 238c4edff1
3 changed files with 53 additions and 24 deletions

View File

@ -221,7 +221,7 @@ const MediaAgent = ({setPeers}) => {
console.log(`media-agent - removePeer - Signaling server said to remove peer ${peer_id}`); console.log(`media-agent - removePeer - Signaling server said to remove peer ${peer_id}`);
if (peer_id in peers) { if (peer_id in peers) {
if (peers[peer_id].connection) { if (peers[peer_id].connection) {
peers[peer_id].connnection.close(); peers[peer_id].connection.close();
} }
} }

View File

@ -90,32 +90,60 @@ const PlayerList = () => {
for (let key in players) { for (let key in players) {
sortedPlayers.push(players[key]); sortedPlayers.push(players[key]);
} }
sortedPlayers.sort((A, B) => {
if (A.color === color) { const sortPlayers = (A, B) => {
/* active player first */
if (A.name === name) {
return -1; return -1;
} }
if (B.color === color) { if (B.name === name) {
return +1; return +1;
} }
/* Sort active players first */
if (A.name && !B.name) {
return -1;
}
if (B.name && !A.name) {
return +1;
}
/* Ohterwise, sort by color */
return A.color.localeCompare(B.color); return A.color.localeCompare(B.color);
};
sortedPlayers.sort(sortPlayers);
/* Array of just names... */
unselected.sort((A, B) => {
/* active player first */
if (A === name) {
return -1;
}
if (B === name) {
return +1;
}
/* Then sort alphabetically */
return A.localeCompare(B);
}); });
sortedPlayers.forEach(item => { sortedPlayers.forEach(player => {
const name = item.name; const name = player.name;
const selectable = inLobby && (item.status === 'Not active' || color === item.color); const selectable = inLobby && (player.status === 'Not active' || color === player.color);
playerElements.push( playerElements.push(
<div <div
data-selectable={selectable} data-selectable={selectable}
data-selected={item.color === color} data-selected={player.color === color}
className="PlayerEntry" className="PlayerEntry"
onClick={() => { inLobby && selectable && toggleSelected(item.color) }} onClick={() => { inLobby && selectable && toggleSelected(player.color) }}
key={`player-${item.color}`}> key={`player-${player.color}`}>
<div> <div>
<PlayerColor color={item.color}/> <PlayerColor color={player.color}/>
<div className="Name">{name ? name : 'Available' }</div> <div className="Name">{name ? name : 'Available' }</div>
{ name && !item.live && <div className="NoNetwork"></div> } { name && !player.live && <div className="NoNetwork"></div> }
</div> </div>
{ name && item.live && <MediaControl peer={peers[name]} isSelf={item.color === color}/> } { name && player.live && <MediaControl peer={peers[name]}
isSelf={player.color === color}/> }
{ !name && <div></div> } { !name && <div></div> }
</div> </div>
); );
@ -124,7 +152,7 @@ const PlayerList = () => {
const waiting = unselected.map((player) => { const waiting = unselected.map((player) => {
return <div className={player === name ? 'Self' : ''} key={player}> return <div className={player === name ? 'Self' : ''} key={player}>
<div>{ player }</div> <div>{ player }</div>
<MediaControl peer={peers[name]} isSelf={name === player}/> <MediaControl peer={peers[player]} isSelf={name === player}/>
</div> </div>
}); });

View File

@ -834,12 +834,12 @@ const setPlayerName = (game, session, name) => {
if (session.ws && (game.id in audio) if (session.ws && (game.id in audio)
&& session.name in audio[game.id]) { && session.name in audio[game.id]) {
hasAudio = true; hasAudio = true;
part(audio[game.id], session, game.id); part(audio[game.id], session);
} }
} else { } else {
message = `${session.name} has changed their name to ${name}.`; message = `${session.name} has changed their name to ${name}.`;
if (session.ws && game.id in audio) { if (session.ws && game.id in audio) {
part(audio[game.id], session, game.id); part(audio[game.id], session);
} }
} }
} }
@ -856,7 +856,7 @@ const setPlayerName = (game, session, name) => {
} }
if (session.ws && hasAudio) { if (session.ws && hasAudio) {
join(audio[game.id], session, game.id); join(audio[game.id], session);
} }
console.log(`${info}: ${message}`); console.log(`${info}: ${message}`);
addChatMessage(game, null, message); addChatMessage(game, null, message);
@ -2945,7 +2945,7 @@ const resetDisconnectCheck = (game, req) => {
//req.disconnectCheck = setTimeout(() => { wsInactive(game, req) }, 20000); //req.disconnectCheck = setTimeout(() => { wsInactive(game, req) }, 20000);
} }
const join = (peers, session, id) => { const join = (peers, session) => {
const ws = session.ws; const ws = session.ws;
if (!session.name) { if (!session.name) {
@ -2977,7 +2977,7 @@ const join = (peers, session, id) => {
peers[session.name] = ws; peers[session.name] = ws;
}; };
const part = (peers, session, id) => { const part = (peers, session) => {
const ws = session.ws; const ws = session.ws;
if (!session.name) { if (!session.name) {
@ -3000,11 +3000,11 @@ const part = (peers, session, id) => {
for (let peer in peers) { for (let peer in peers) {
peers[peer].send(JSON.stringify({ peers[peer].send(JSON.stringify({
type: 'removePeer', type: 'removePeer',
data: {'peer_id': peer} data: {'peer_id': session.name}
})); }));
ws.send(JSON.stringify({ ws.send(JSON.stringify({
type: 'removePeer', type: 'removePeer',
data: {'peer_id': peer} data: {'peer_id': session.name}
})); }));
} }
}; };
@ -3074,6 +3074,7 @@ const departLobby = (game, session, color) => {
sendUpdateToPlayers(game, update); sendUpdateToPlayers(game, update);
} }
const all = `[ all ]`; const all = `[ all ]`;
const info = `[ info ]`; const info = `[ info ]`;
const todo = `[ todo ]`; const todo = `[ todo ]`;
@ -3421,7 +3422,7 @@ router.ws("/ws/:id", async (ws, req) => {
if (session.ws) { if (session.ws) {
/* Cleanup any voice channels */ /* Cleanup any voice channels */
if (id in audio) { if (id in audio) {
part(audio[id], session, id); part(audio[id], session);
} }
session.ws.close(); session.ws.close();
session.ws = undefined; session.ws = undefined;
@ -3456,11 +3457,11 @@ router.ws("/ws/:id", async (ws, req) => {
switch (data.type) { switch (data.type) {
case 'join': case 'join':
join(audio[id], session, id); join(audio[id], session);
break; break;
case 'part': case 'part':
part(audio[id], session, id); part(audio[id], session);
break; break;
case 'relayICECandidate': { case 'relayICECandidate': {