/// <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); }
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); } }