Don't touch anything. It works.

This commit is contained in:
Daniel Flanagan 2021-12-02 16:09:43 -06:00
parent 292bf5ba5c
commit ed3e07cf4b
Signed by: lytedev
GPG key ID: 5B2020A0F9921EF4
3 changed files with 29 additions and 19 deletions

View file

@ -23,7 +23,7 @@ func _ready():
signaller.connect("answer_received", self, "answer_received") signaller.connect("answer_received", self, "answer_received")
signaller.connect("candidate_received", self, "candidate_received") signaller.connect("candidate_received", self, "candidate_received")
signaller.connect("lobby_joined", self, "_lobby_joined") signaller.connect("peer_id_set", self, "_peer_id_set")
# connect("lobby_sealed", self, "lobby_sealed") # connect("lobby_sealed", self, "lobby_sealed")
signaller.connect("peer_joined", self, "_peer_joined") signaller.connect("peer_joined", self, "_peer_joined")
# connect("peer_disconnected", self, "peer_disconnected") # connect("peer_disconnected", self, "peer_disconnected")
@ -38,10 +38,9 @@ func connect_to_signaller():
signaller.connect_to_websocket_signaller(multiplayer_url) signaller.connect_to_websocket_signaller(multiplayer_url)
func _create_peer(peer_id): func _create_peer(peer_id):
print("_create_peer: %d" % peer_id) # if peer_id == signaller.peer_id: return
if peer_id == signaller.peer_id: return
var peer: WebRTCPeerConnection = WebRTCPeerConnection.new() var peer: WebRTCPeerConnection = WebRTCPeerConnection.new()
print("New Net Peer %s with peer_id %d" % [peer, peer_id]) print("New Net Peer with peer_id %d" % [peer_id])
var _peer_init_results = peer.initialize({"iceServers": webrtc_ice_servers}) var _peer_init_results = peer.initialize({"iceServers": webrtc_ice_servers})
peer.connect("session_description_created", self, "_offer_created", [peer_id]) peer.connect("session_description_created", self, "_offer_created", [peer_id])
peer.connect("ice_candidate_created", self, "_new_ice_candidate", [peer_id]) peer.connect("ice_candidate_created", self, "_new_ice_candidate", [peer_id])
@ -68,8 +67,8 @@ func _offer_created(type, data, peer_id):
else: else:
signaller.send_answer(peer_id, data) signaller.send_answer(peer_id, data)
func _lobby_joined(id, peer_id): func _peer_id_set(peer_id):
print("Connected to lobby %s as peer %d" % [id, peer_id]) print("Peer ID received %s - setting up to peer..." % [peer_id])
mp.initialize(peer_id, true) mp.initialize(peer_id, true)
get_tree().network_peer = mp get_tree().network_peer = mp
@ -89,6 +88,8 @@ func offer_received(data):
if mp.has_peer(id): if mp.has_peer(id):
print("Setting offer remote description: %s" % JSON.print(data)) print("Setting offer remote description: %s" % JSON.print(data))
mp.get_peer(id).connection.set_remote_description("offer", data["offer"]) mp.get_peer(id).connection.set_remote_description("offer", data["offer"])
else:
print("Received an offer for a peer with ID %s that hasn't been added" % id)
func answer_received(data): func answer_received(data):
var id = data["peerId"] var id = data["peerId"]

View file

@ -185,7 +185,7 @@ class Lobby {
}), }),
); );
this.clients.forEach((c) => this.clients.forEach((c) =>
c.send(buildMessage("peer_joined", { client.send(buildMessage("peer_joined", {
id: c.id, id: c.id,
name: c.name, name: c.name,
peerId: c.peerId, peerId: c.peerId,
@ -217,7 +217,6 @@ function onMessage(client: Client, ev: MessageEvent) {
if (ev.data === "lobby_create") client.lobbyCreate(); if (ev.data === "lobby_create") client.lobbyCreate();
if (ev.data === "lobby_leave") client.lobbyLeave(); if (ev.data === "lobby_leave") client.lobbyLeave();
if (ev.data === "request_lobby_list") client.lobbyList(); if (ev.data === "request_lobby_list") client.lobbyList();
if (ev.data === "request_peer_list") client.clientList();
if (ev.data.startsWith("lobby_join:")) { if (ev.data.startsWith("lobby_join:")) {
const id = ev.data.substr(11); const id = ev.data.substr(11);
const lobby = allLobbies.get(id); const lobby = allLobbies.get(id);
@ -233,15 +232,16 @@ function onMessage(client: Client, ev: MessageEvent) {
if (typeof data.data === "object") { if (typeof data.data === "object") {
const subdata = data.data; const subdata = data.data;
if (typeof subdata["peerId"] === "number") { if (typeof subdata["peerId"] === "number") {
const peerId: number = subdata["peerId"]; const destPeerId: number = subdata["peerId"];
// const payload = Object.assign({}, data);
// payload.data.peerId = client.peerId;
for (const iClient of client.lobby?.clients.values() || []) { for (const iClient of client.lobby?.clients.values() || []) {
if (iClient.peerId == peerId) { if (iClient.peerId == destPeerId) {
const payload = Object.assign({}, data);
const srcPeerId = client.peerId;
payload.data.peerId = srcPeerId;
console.log( console.log(
`Forwarding WebRTC Negotiation Message from peer ${client.peerId} to peer ${peerId}...`, `Forwarding WebRTC Negotiation Message from peer ${srcPeerId} to peer ${destPeerId}...`,
); );
iClient.send(ev.data); iClient.send(payload);
break; break;
} }
} }

View file

@ -15,6 +15,8 @@ signal peer_left(id)
signal candidate_received(data) signal candidate_received(data)
signal offer_received(data) signal offer_received(data)
signal answer_received(data) signal answer_received(data)
signal client_id_set(client_id)
signal peer_id_set(peer_id)
signal websocket_connected signal websocket_connected
signal websocket_disconnected signal websocket_disconnected
@ -74,7 +76,6 @@ func _send(s: String):
func _parse_msg(): func _parse_msg():
var msg: String = ws.get_peer(1).get_packet().get_string_from_utf8() var msg: String = ws.get_peer(1).get_packet().get_string_from_utf8()
print("Signaller received message: %s" % msg)
if msg.begins_with("json:"): if msg.begins_with("json:"):
var data = JSON.parse(msg.substr(5)) var data = JSON.parse(msg.substr(5))
if data.error == OK: if data.error == OK:
@ -84,10 +85,17 @@ func _parse_msg():
func handle_message(data: Dictionary): func handle_message(data: Dictionary):
match data["type"]: match data["type"]:
"your_id": client_id = data["data"] "your_id":
"your_peer_id": peer_id = data["data"] client_id = data["data"]
emit_signal("client_id_set", client_id)
"your_peer_id":
peer_id = int(data["data"])
emit_signal("peer_id_set", peer_id)
"lobby_list": emit_signal("lobby_new", data["data"])
"lobby_new": emit_signal("lobby_new", [{"id": data["id"], "name": data["name"]}]) "lobby_new": emit_signal("lobby_new", [{"id": data["id"], "name": data["name"]}])
"lobby_delete": emit_signal("lobby_delete", data["id"]) "lobby_delete": emit_signal("lobby_delete", data["id"])
"lobby_joined": "lobby_joined":
lobby_id = data["id"] lobby_id = data["id"]
peer_id = data["peerId"] peer_id = data["peerId"]
@ -95,10 +103,10 @@ func handle_message(data: Dictionary):
"lobby_left": "lobby_left":
lobby_id = null lobby_id = null
emit_signal("lobby_left", data["id"]) emit_signal("lobby_left", data["id"])
"lobby_list": emit_signal("lobby_new", data["data"])
"peer_list": emit_signal("peer_joined", data["data"])
"peer_joined": emit_signal("peer_joined", [{"id": data["id"], "name": data["name"], "peerId": data["peerId"]}]) "peer_joined": emit_signal("peer_joined", [{"id": data["id"], "name": data["name"], "peerId": data["peerId"]}])
"peer_left": emit_signal("peer_left", data["id"]) "peer_left": emit_signal("peer_left", data["id"])
"candidate": "candidate":
print("Candidate received - Data: %s" % JSON.print(data["data"])) print("Candidate received - Data: %s" % JSON.print(data["data"]))
emit_signal("candidate_received", data["data"]) emit_signal("candidate_received", data["data"])
@ -108,6 +116,7 @@ func handle_message(data: Dictionary):
"answer": "answer":
print("Answer received - Data: %s" % JSON.print(data["data"])) print("Answer received - Data: %s" % JSON.print(data["data"]))
emit_signal("answer_received", data["data"]) emit_signal("answer_received", data["data"])
_: print("Unhandled Message - Data: %s" % JSON.print(data)) _: print("Unhandled Message - Data: %s" % JSON.print(data))
func send_candidate(peerId, mid, index, sdp) -> int: func send_candidate(peerId, mid, index, sdp) -> int: