IEnumerator LANRoomSetPlayerPropAssert(ClientLogic client1, ClientLogic client2) { LobbyRoomData room = null; //等待client2获取到房间 client2.onRoomListChange += r => { if (r.Count > 0) { room = r.First().Value; } }; //client1创建房间 yield return(client1.createOnlineRoom()); yield return(TestHelper.waitUntil(() => room != null, 5)); //client2加入房间 yield return(client2.joinRoom(room.RoomID).wait()); Assert.AreEqual(2, client1.room.playerDataList.Count); Assert.AreEqual(2, client2.room.playerDataList.Count); //client2修改自己的属性 yield return(client2.setPlayerProp("deckCount", 1)); //client1和client2都能看到这个属性更改 Assert.AreEqual(1, client1.room.playerDataList[1].propDict["deckCount"]); Assert.AreEqual(1, client2.room.playerDataList[1].propDict["deckCount"]); }
IEnumerator LANRoomSetPropAssert(ClientLogic client1, ClientLogic client2) { LobbyRoomData room = null; //等待client2获取到房间 client2.onRoomListChange += r => { if (r.Count > 0) { room = r.First().Value; } }; //client1创建房间 yield return(client1.createOnlineRoom()); yield return(TestHelper.waitUntil(() => room != null, 5)); //client2加入房间 yield return(client2.joinRoom(room.RoomID).wait()); Assert.AreEqual(2, client1.room.playerDataList.Count); Assert.AreEqual(2, client2.room.playerDataList.Count); //client1修改房间属性 yield return(client1.setRoomProp("randomSeed", 42)); //client1和client2都有这个属性 Assert.AreEqual(42, client1.room.propDict["randomSeed"]); Assert.AreEqual(42, client2.room.propDict["randomSeed"]); }
IEnumerator LANRoomQuitAssert(ClientLogic client1, ClientLogic client2) { LobbyRoomData room = null; //等待client2获取到房间 client2.onRoomListChange += r => { if (r.Count > 0) { room = r.First().Value; } }; //client1创建房间 yield return(client1.createOnlineRoom()); yield return(TestHelper.waitUntil(() => room != null, 5)); //client2加入房间 yield return(client2.joinRoom(room.RoomID).wait()); Assert.AreEqual(2, client1.room.playerDataList.Count); Assert.AreEqual(2, client2.room.playerDataList.Count); //client2退出房间 yield return(client2.quitRoom().wait()); Assert.Null(client2.room); yield return(new WaitForSeconds(0.5f)); // 要等一下才会退出 Assert.AreEqual(1, client1.room.playerDataList.Count); }
IEnumerator LANRoomJoinAssert(ClientLogic client1, ClientLogic client2) { LobbyRoomData room = null; //等待client2获取到房间 client2.onRoomListChange += r => { if (r.Count > 0) { room = r.First().Value; } };; //client1创建房间 yield return(client1.createOnlineRoom()); yield return(TestHelper.waitUntil(() => room != null, 5)); //client2加入房间 yield return(client2.joinRoom(room.RoomID).wait()); var roomData = client2.room; Assert.AreEqual(client1.room.playerDataList[0].id, client1.room.ownerId); Assert.AreEqual(2, client1.room.playerDataList.Count); Assert.AreEqual(RoomPlayerType.human, client1.room.playerDataList[0].type); Assert.AreEqual(RoomPlayerType.human, client1.room.playerDataList[1].type); Assert.AreEqual(client2.room.playerDataList[0].id, client2.room.ownerId); Assert.AreEqual(2, client2.room.playerDataList.Count); Assert.AreEqual(RoomPlayerType.human, client2.room.playerDataList[0].type); Assert.AreEqual(RoomPlayerType.human, client2.room.playerDataList[1].type); Assert.AreEqual(client1.room.ownerId, client2.room.ownerId); Assert.AreEqual(client1.room.playerDataList[0].id, client2.room.playerDataList[0].id); Assert.AreEqual(client1.room.playerDataList[1].id, client2.room.playerDataList[1].id); }
void ILANRPCMethodClient.updateDiscoverRoom(LobbyRoomData roomData) { log?.logTrace(name + "收到更新房间消息"); roomData.SetIP(unconnectedInvokeIP.Address.ToString()); _lanRooms[roomData.RoomID] = roomData; OnRoomListUpdate?.Invoke(_lanRooms); }
void ILANRPCMethodClient.addDiscoverRoom(LobbyRoomData room) { log?.logTrace($"收到 {unconnectedInvokeIP} 创建/发送房间消息,房间: {room}"); room.SetIP(unconnectedInvokeIP.Address.ToString()); _lanRooms[room.RoomID] = room; OnRoomListUpdate?.Invoke(_lanRooms); }
public override Task <RoomData> CreateRoom() { log?.log(name + "创建房间"); _hostRoomData = new RoomData(Guid.NewGuid().ToString()); _hostRoomData.playerDataList.Add(_playerData); _hostRoomData.ownerId = _playerData.id; _roomInfo = new LobbyRoomData("127.0.0.1", Port, _hostRoomData.ID, _playerData.id); invokeBroadcast(nameof(ILANRPCMethodClient.addDiscoverRoom), _roomInfo); return(Task.FromResult(_hostRoomData)); }
/// <summary> /// 更新房间信息 /// </summary> /// <param name="newInfo"></param> /// <returns></returns> public override Task AlterRoomInfo(LobbyRoomData newInfo) { // 更新房间信息 _roomInfo.OwnerId = newInfo.OwnerId; _roomInfo.MaxPlayerCount = newInfo.MaxPlayerCount; _hostRoomData.maxPlayerCount = newInfo.MaxPlayerCount; invokeBroadcast(nameof(ILANRPCMethodClient.addDiscoverRoom), _roomInfo); return(Task.CompletedTask); }
IEnumerator LANRoomCreateAssert(ClientLogic client1, ClientLogic client2) { LobbyRoomData room = null; client2.onRoomListChange += r => { if (r.Count > 0) { room = r.First().Value; } }; //客户端创建房间,并且广播新增房间信息 yield return(client1.createOnlineRoom().wait()); //client2应该会收到创建房间信息 yield return(TestHelper.waitUntil(() => room != null, 5)); Assert.NotNull(room); }
/// <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 abstract Task AlterRoomInfo(LobbyRoomData newInfo);
/// <summary> /// 修改房间信息 /// 暂时没有能够修改的房间信息,也没有对应的服务器接口,先不实现 /// </summary> /// <param name="changedInfo"></param> /// <returns></returns> public override Task AlterRoomInfo(LobbyRoomData changedInfo) { throw new NotImplementedException(); }