Player sorting is correct -- disconnects with removePeer are not
Signed-off-by: James Ketrenos <james_eikona@ketrenos.com>
This commit is contained in:
parent
b1aeaffc59
commit
238c4edff1
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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>
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -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': {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user