예제 #1
0
        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);
            }
        }
예제 #2
0
        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);
            }
        }