/// <summary>
        /// 成功连接上主机后的后续操作
        /// </summary>
        /// <param name="joinRoomOperation"></param>
        /// <returns></returns>
        async Task confirmJoin(JoinRoomOperation joinRoomOperation)
        {
            cachedRoomData = await invoke <RoomData>(nameof(IRoomRPCMethodHost.requestJoinRoom), GetSelfPlayerData());

            onConfirmJoinAck?.Invoke(cachedRoomData);
            completeOperation(joinRoomOperation, cachedRoomData);
        }
        public Task <RoomData> JoinRoom(string addr, int port)
        {
            if (opList.Any(o => o is JoinRoomOperation))
            {
                throw new InvalidOperationException("客户端已经在执行连接操作");
            }

            string msg = name + "连接" + addr + ":" + port;

            log?.log(msg);
            //发送链接请求
            NetDataWriter writer = new NetDataWriter();

            writer.Put((int)PacketType.joinRequest);
            writer.Put(_playerData.ToJson());
            var peer = net.Connect(addr, port, writer);

            //peer为null表示已经有一个操作在进行了
            if (peer == null)
            {
                throw new InvalidOperationException("客户端已经在执行连接操作");
            }
            else
            {
                hostPeer = peer;
                JoinRoomOperation operation = new JoinRoomOperation();
                startOperation(operation, () =>
                {
                    log?.log(msg + "超时");
                });
                return(operation.task);
            }
        }
    public void OnJoinClick()
    {
        JoinRoomOperation jrop = new JoinRoomOperation (ChooseGameUI.selectedRoom);

        //jrop.password
        jrop.SetPassword(gamePasswordInputField.text);

        if (ChooseGameUI.spectator) {
            jrop.JoinAsSpectator ();
        }

        gdRt.SendOp (jrop);
    }
        /// <summary>
        /// 加入房间
        /// </summary>
        /// <param name="roomInfo"></param>
        /// <returns></returns>
        private Task <RoomData> joinRoom(LobbyRoomData roomInfo)
        {
            var writer = new NetDataWriter();

            GetSelfPlayerData(); // 更新缓存的player数据

            writer.Put(roomInfo.RoomID);
            writer.Put(serverClient.UserSession);
            writer.Put(localPlayer.ToJson());
            writer.Put(localPlayer.id);
            log.logTrace($"尝试以 {localPlayer.id}: {serverClient.UserSession} 连接");

            hostPeer = net.Connect(roomInfo.IP, roomInfo.Port, writer);
            JoinRoomOperation op = new JoinRoomOperation();

            startOperation(op, () =>
            {
                log?.logWarn($"连接到 {roomInfo} 响应超时。");
            });
            return(op.task);
        }
예제 #5
0
    public void OnSelectRoomClick(BaseEventData data)
    {
        GamedoniaRT gd = GamedoniaRT.SharedInstance ();

        //Debug.Log ("Room Name Clicked: " + eventSystem.currentSelectedGameObject.name);
        Text roomLabel = eventSystem.currentSelectedGameObject.GetComponent<Text> ();
        string roomName = roomLabel.text.Substring (0, roomLabel.text.IndexOf ("("));

        ChooseGameUI.selectedRoom = roomName;
        ChooseGameUI.spectator = spectatorToggle.isOn;

        Room room = gd.roomsManager.GetRoomByName (roomName);

        if (room.IsPasswordProtected ()) {

            Application.LoadLevel("EnterRoomPasswordGD");

        } else {

            JoinRoomOperation jrop = new JoinRoomOperation (roomName);

            if (spectatorToggle.isOn) {
                jrop.JoinAsSpectator ();
            }

            gd.SendOp (jrop);

        }
    }