From ef8c54c1956b887f782ca5bf2d0f43a7c68f8d6b Mon Sep 17 00:00:00 2001 From: RandomityGuy <31925790+RandomityGuy@users.noreply.github.com> Date: Sun, 29 Mar 2026 15:05:16 +0100 Subject: [PATCH] add proper turn server support --- src/net/MasterServerClient.hx | 17 ++++++++++++++--- src/net/Net.hx | 29 ++++++++++++++++++++++++----- 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/src/net/MasterServerClient.hx b/src/net/MasterServerClient.hx index d2fed971..3d806309 100644 --- a/src/net/MasterServerClient.hx +++ b/src/net/MasterServerClient.hx @@ -25,7 +25,7 @@ class MasterServerClient { #if js static var serverIp = "wss://mbpmaster.randomityguy.me:8443"; #else - static var serverIp = "ws://89.58.58.191:8084"; + static var serverIp = "ws://51.75.65.148:8084"; #end public static var instance:MasterServerClient; @@ -194,6 +194,14 @@ class MasterServerClient { } } + public static function requestTurnCredentials() { + if (instance != null && instance.open) { + instance.queueMessage(Json.stringify({ + type: "turn_credentials" + })); + } + } + function queueMessage(m:String) { #if hl toSend.add(m); @@ -306,8 +314,11 @@ class MasterServerClient { } } } - if (conts.type == "turnserver") { - Net.turnServer = conts.server; // Turn server! + if (conts.type == "turn_credentials") { + Net.turnServers = conts.turn_servers; + if (@:privateAccess Net.onTurnServersReceived != null) { + @:privateAccess Net.onTurnServersReceived(); + } } } } diff --git a/src/net/Net.hx b/src/net/Net.hx index 419bc555..04923aa3 100644 --- a/src/net/Net.hx +++ b/src/net/Net.hx @@ -106,7 +106,9 @@ class Net { static var stunServers = ["stun:stun.l.google.com:19302"]; - public static var turnServer:String = ""; + public static var turnServers:Array = []; + + static var onTurnServersReceived:Null<() -> Void> = null; public static function hostServer(name:String, description:String, maxPlayers:Int, password:String, onHosted:() -> Void) { serverInfo = new ServerInfo(name, Settings.highscoreName, description, 1, maxPlayers, password, "LOBBY", getPlatform()); @@ -128,8 +130,16 @@ class Net { }); } - public static function addClientFromSdp(sdpString:String, onFinishSdp:String->Void) { - var peer = new RTCPeerConnection(stunServers, "0.0.0.0"); + public static function addClientFromSdp(sdpString:String, onFinishSdp:String->Void, turnTried:Bool = false) { + if (Net.turnServers.length == 0 && !turnTried) { + MasterServerClient.requestTurnCredentials(); + Net.onTurnServersReceived = () -> { + Net.onTurnServersReceived = null; + addClientFromSdp(sdpString, onFinishSdp, true); + }; + return; + } + var peer = new RTCPeerConnection(stunServers.concat(Net.turnServers), "0.0.0.0"); var sdpObj = Json.parse(sdpString); peer.setRemoteDescription(sdpObj.sdp, sdpObj.type); addClient(peer, onFinishSdp); @@ -212,9 +222,18 @@ class Net { clientIdMap[id] = ghost; } - public static function joinServer(serverName:String, password:String, connectedCb:() -> Void) { + public static function joinServer(serverName:String, password:String, connectedCb:() -> Void, turnTried:Bool = false) { MasterServerClient.connectToMasterServer(() -> { - client = new RTCPeerConnection(stunServers, "0.0.0.0"); + if (Net.turnServers.length == 0 && !turnTried) { + MasterServerClient.requestTurnCredentials(); + Net.onTurnServersReceived = () -> { + Net.onTurnServersReceived = null; + joinServer(serverName, password, connectedCb, true); + }; + return; + } + + client = new RTCPeerConnection(stunServers.concat(Net.turnServers), "0.0.0.0"); var candidates = []; var closing = false;