public static async UniTask <bool> JoinRoomAsync(string roomid, bool isconnect = true, bool beforedisconnect = true) { var req = new JoinRoomRequest { peerid = UniP2PManager.MyPeerID, roomid = roomid, ip = IPEndPointParser.ToString(UniP2PManager.GetEnableIPEndPoint()), localport = UniP2PManager.PrivateIPEndPoint.Port }; req.SetHash(); var result = await HttpClient.Post(GetURIGamekey(UniP2PManager.MatchingSettings.MatchingServerURI) + "/rooms/join", JsonUtility.ToJson(req)); if (result.StatusCode == 200) { var room = JsonUtility.FromJson <JoinRoomResponse>(result.Text); CurrentRoomID = roomid; CurrentToken = room.token; if (isconnect) { if (beforedisconnect) { await UniP2PManager.DisConnectAllPeerAsync(); } foreach (var peer in room.peers) { if (peer.id == UniP2PManager.MyPeerID) { continue; } await UniP2PManager.SendEmptyPacketAsync(IPEndPointParser.Parse(peer.ip)); await UniTask.Delay(100); await UniP2PManager.ConnectPeerAsync(IPEndPointParser.Parse(peer.ip), peer.id, (int)peer.localport); } } return(true); } else { Debug.Debugger.Warning("[SimpleMatchingClient] JoinRoomAsync StatusCode:" + result.StatusCode + ":" + JsonUtility.ToJson(req)); return(false); } }
public static async UniTask <bool> JoinRandomRoomAsync(bool isconnect = true, bool beforedisconnect = true) { var req = new JoinRandomRoomRequest { peerid = UniP2PManager.MyPeerID, ip = IPEndPointParser.ToString(UniP2PManager.GetEnableIPEndPoint()) }; req.SetHash(); var result = await HttpClient.Post(GetURIGamekey(UniP2PManager.MatchingSettings.MatchingServerURI) + "/rooms/joinrandom", JsonUtility.ToJson(req)); if (result.StatusCode == 200) { var room = JsonUtility.FromJson <JoinRandomRoomResponse>(result.Text); CurrentRoomID = room.roomid; CurrentToken = room.token; if (isconnect) { if (beforedisconnect) { await UniP2PManager.DisConnectAllPeerAsync(); } List <UniTask <Peer> > tasks = new List <UniTask <Peer> >(); foreach (var peer in room.peers) { if (peer.id != UniP2PManager.MyPeerID) { var task = UniP2PManager.ConnectPeerAsync(IPEndPointParser.Parse(peer.ip), peer.id); tasks.Add(task); } } await UniTask.WhenAll(tasks); } return(true); } else { Debug.Debugger.Warning("[SimpleMatchingClient] JoinRandomRoomAsync StatusCode:" + result.StatusCode + ":" + JsonUtility.ToJson(req)); return(false); } }