WIP peer list syncing
This commit is contained in:
parent
dbe320ab34
commit
ca30d2e87d
3 changed files with 19 additions and 20 deletions
12
lobby.gd
12
lobby.gd
|
@ -41,11 +41,13 @@ func _peer_joined(joined_peers):
|
|||
peers.add_item("%s (%s)" % [name, peerId])
|
||||
peers.set_item_metadata(peers.get_item_count() - 1, { "id": id })
|
||||
|
||||
func _peer_left(id):
|
||||
for i in range(peers.get_item_count()):
|
||||
if id == peers.get_item_metadata(i)["id"]:
|
||||
peers.remove_item(i)
|
||||
return
|
||||
func _peer_left(ids):
|
||||
for data in ids:
|
||||
var id = data["id"]
|
||||
for i in range(peers.get_item_count()):
|
||||
if id == peers.get_item_metadata(i)["id"]:
|
||||
peers.remove_item(i)
|
||||
return
|
||||
|
||||
func _on_Button_pressed():
|
||||
rpc("shift_cursor")
|
||||
|
|
23
server.ts
23
server.ts
|
@ -77,12 +77,13 @@ class Client {
|
|||
}
|
||||
}
|
||||
|
||||
clientList() {
|
||||
peerList() {
|
||||
if (!this.lobby) return;
|
||||
const netClients: { id: ID; name: string; peerId: number | null }[] = [];
|
||||
const peers: { id: ID; name: string; peerId: number | null }[] = [];
|
||||
this.lobby.clients.forEach(({ id, name, peerId }) =>
|
||||
netClients.push({ id, name, peerId })
|
||||
peers.push({ id, name, peerId })
|
||||
);
|
||||
this.send(buildMessage("peer_joined", peers));
|
||||
// TODO: chunk async?
|
||||
}
|
||||
|
||||
|
@ -179,11 +180,11 @@ class Lobby {
|
|||
}
|
||||
client.send(buildMessage("your_peer_id", client.peerId.toString()));
|
||||
this.broadcast(
|
||||
buildMessage("peer_joined", {
|
||||
buildMessage("peer_joined", [{
|
||||
id: client.id,
|
||||
name: client.name,
|
||||
peerId: client.peerId,
|
||||
}),
|
||||
}]),
|
||||
);
|
||||
console.log("Sending peer_joined...");
|
||||
client.send(
|
||||
|
@ -197,15 +198,9 @@ class Lobby {
|
|||
this.clients.set(client.id, client);
|
||||
}
|
||||
|
||||
clientList() {
|
||||
return Array.from(this.clients.values()).map(
|
||||
({ id, name, peerId }) => ({ id, name, peerId }),
|
||||
);
|
||||
}
|
||||
|
||||
removeClient({ id }: Client) {
|
||||
this.clients.delete(id);
|
||||
this.broadcast(buildMessage("peer_left", { id }));
|
||||
this.broadcast(buildMessage("peer_left", [{ id }]));
|
||||
if (id === this.hostClientId) {
|
||||
console.warn("Host left!");
|
||||
this.remove();
|
||||
|
@ -231,7 +226,7 @@ function onMessage(client: Client, ev: MessageEvent) {
|
|||
if (client.lobby == null) {
|
||||
client.send(`[info] not in a lobby`);
|
||||
} else {
|
||||
client.send(buildMessage("peer_joined", client.lobby.clientList()));
|
||||
client.peerList();
|
||||
}
|
||||
}
|
||||
if (msg.startsWith("lobby_join:")) {
|
||||
|
@ -239,7 +234,7 @@ function onMessage(client: Client, ev: MessageEvent) {
|
|||
const lobby = allLobbies.get(id);
|
||||
if (lobby) {
|
||||
client.lobbyJoin(lobby);
|
||||
client.clientList();
|
||||
// client.peerList();
|
||||
} else client.send(`[info] could not find lobby ${id}`);
|
||||
}
|
||||
if (msg.startsWith("json:")) {
|
||||
|
|
|
@ -120,7 +120,9 @@ func handle_message(data: Dictionary):
|
|||
emit_signal("peer_joined", [{"id": data["id"], "name": data["name"], "peerId": data["peerId"]}])
|
||||
else:
|
||||
emit_signal("peer_joined", data["data"])
|
||||
"peer_left": emit_signal("peer_left", data["id"])
|
||||
"peer_left":
|
||||
print("Peer Left: %s" % data)
|
||||
emit_signal("peer_left", data["data"])
|
||||
|
||||
"candidate":
|
||||
print("Candidate received - Data: %s" % JSON.print(data["data"]))
|
||||
|
|
Loading…
Reference in a new issue