示例#1
0
        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"]);
        }
示例#2
0
        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"]);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#9
0
        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();
 }