public void SyncTabletop(bool isLocked, List <PlayerEntity> players, string gmUID, bool isHidden, List <Image> images)
 {
     Tabletop.RoomCode      = RoomCode.ToUpper();
     Tabletop.IsLocked      = isLocked;
     Tabletop.Players       = players;
     Tabletop.GameMasterUID = gmUID;
     Tabletop.IsHidden      = isHidden;
     Tabletop.Images        = images;
     JSRuntime.InvokeVoidAsync("SetPlayers", players, gmUID, Tabletop.MessageUID);
     JSRuntime.InvokeVoidAsync("SetActiveRoomCode", Tabletop.RoomCode);
     StateHasChanged();
 }
示例#2
0
 public Game(string title, int duration)
 {
     Players = new List <Player>();
     Status  = new List <GameStatus>();
     System.Random random = new System.Random();
     RoomCode          = random.Next(100000, 999999);
     GameInfo.roomCode = RoomCode.ToString();
     GameInfo.title    = title;
     Title             = title;
     Duration          = duration;
     Status.Add(GameStatus.NEW);
 }
示例#3
0
        static void Main(string[] args)
        {
            HotelCode    hotelCode    = new HotelCode();
            GuestCode    guestCode    = new GuestCode("Guests");
            RoomCode     roomCode     = new RoomCode("Rooms");
            BookingCode  bookingCode  = new BookingCode("Bookings");
            FacilityCode facilityCode = new FacilityCode("Facilities");

            hotelCode.DoTheStuff();
            guestCode.DoTheStuff();
            roomCode.DoTheStuff();
            bookingCode.DoTheStuff();
            facilityCode.DoTheStuff();

            KeepConsoleWindowOpen();
        }
示例#4
0
        public async Task Handle(JoinRoom command)
        {
            if (RoomCode.TryParse(command.RoomCode, out RoomCode code, out string error))
            {
                var room = await _fetcher.Fetch(code);

                if (room == null)
                {
                    await _eventHub.Dispatch(new JoinRoomFailed()
                    {
                        PlayerId = command.PlayerId,
                        RoomCode = command.RoomCode,
                        UserName = command.UserName,
                        Reason   = "Room not found"
                    });
                }
                else
                {
                    room.AddGuest(new PlayerId(command.PlayerId), command.UserName, CharacterKey.Parse(command.SelectedCharacter));
                    await _persister.TryStore(room);

                    await _eventHub.DispatchAll(room);
                }
            }
示例#5
0
    public TileSet GetTileSet(RoomCode code)
    {
        switch (code)
        {
        case RoomCode.Test1:
            return(Test1);

        case RoomCode.Test2:
            return(Test2);

        case RoomCode.Test3:
            return(Test3);

        case RoomCode.Test4:
            return(Test4);

        //Ground story
        case RoomCode.StartingRoom:
            return(StartingRoom);

        case RoomCode.Library:
            return(Library);

        case RoomCode.DiningRoom:
            return(DiningRoom);

        case RoomCode.Kitchen:
            return(Kitchen);

        case RoomCode.MasterBedroom:
            return(MasterBedroom);

        case RoomCode.GameRoom:
            return(GameRoom);

        case RoomCode.Lounge:
            return(Lounge);

        //Basement
        case RoomCode.BasementLanding:
            return(BasementLanding);

        case RoomCode.Catacomb:
            return(Catacomb);

        case RoomCode.Cellar:
            return(Cellar);

        case RoomCode.BoilerRoom:
            return(BoilerRoom);

        case RoomCode.PanicRoom:
            return(PanicRoom);

        //Upper Story
        case RoomCode.UpperStoryLanding:
            return(UpperStoryLanding);

        case RoomCode.GuestBedroom:
            return(GuestBedroom);

        case RoomCode.ServantBedroom:
            return(ServantBedroom);

        case RoomCode.Study:
            return(Study);

        //Shared
        case RoomCode.Bathroom:
            return(Bathroom);

        default:
            return(Test1);
        }
    }
        }//断开连接

        /// <summary>
        /// 接收消息
        /// </summary>
        /// <param name="clientPeer">发送消息的客户端对象</param>
        /// <param name="subOperationCode">具体的子操作码</param>
        /// <param name="dataValue">发送消息是附带的数据</param>
        public void OnReceiveMessage(ClientPeer clientPeer, int subOperationCode, object dataValue)
        {
            if (clientPeer == null || subOperationCode < 0 || string.IsNullOrEmpty(dataValue.ToString()))
            {
                return;
            }
            RoomCode roomCode = (RoomCode)Enum.Parse(typeof(RoomCode), subOperationCode.ToString());

            switch (roomCode)
            {
            case RoomCode.GetRoomList_Request:              //处理获取房间列表的业务请求
            {
                //获取房间列表
                this.ProcessGetRoomListRequest(clientPeer);
            }
            break;

            case RoomCode.CreateRoom_Request:              //处理创建房间的业务请求
            {
                //创建房间
                //这儿需要根据客户端传递过来的创建房间时的游戏类型数据,来进行一些相关的处理
                this.ProcessCreateRoomRequest(clientPeer, dataValue);
            }
            break;

            case RoomCode.JoinRoom_Request:                 //处理加入房间的业务请求
            {
                //这儿处理加入房间的时候,需要跟客户端确定传输时候的数据
                //根据指定房间编号加入 还是 根据指定房间进入码加入 这是个问题 所以需要确定客户端向服务端发起加入房间请求时需要传输的数据
                //可以这样设定 0 代表就是按照房间编号加入 1 代表 就是按照房间进入码加入
                //构建的传输数据示例:
                //房间编号->0,1
                //房间进入码->1,256474
                //只要确定了数据,其它问题就迎刃而解了.
                //加入房间
                try
                {
                    string[] joinRoomDataSplit = dataValue.ToString().Split(',');
                    string   joinCode          = joinRoomDataSplit[0];//加入房间码(用来识别是房间编号 还是 房间进入码)
                    string   value             = joinRoomDataSplit[1];
                    switch (joinCode)
                    {
                    case "0":            //处理客户端根据指定房间编号的加入请求
                    {
                        //存储客户端对象要加入的指定的房间编号
                        //校验客户端传递过来的数据是否成功转换成了整数类型的值
                        if (int.TryParse(value.ToString(), out int roomId))                //如果成功转换了,表示客户端要加入指定房间
                        {
                            this.ProcessJoinRoomRequestByRoomId(clientPeer, roomId);
                        }
                    }
                    break;

                    case "1":                                                                      //处理客户端根据房间进入码的加入请求
                    {
                        if (int.TryParse(value.ToString(), out int roomEnterCode))                 //如果成功转换了,表示客户端要根据房间进入码加入指定房间
                        {
                            this.ProcessJoinRoomRequestByRoomEnterCode(clientPeer, roomEnterCode); //加入房间
                        }
                    }
                    break;
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message + " \n" + ex.StackTrace);
                }
            }
            break;

            case RoomCode.Userready_Request:            //处理玩家准备的业务请求
            {
                //Todo:用户发起准备请求后,服务端需要根据请求的客户端对象 来进行数据保存
                //只要服务端接到玩家发起的准备请求后 玩家肯定在房间内 只需要根据当前是哪个房间内的客户端对象即可
                //如果客户端对象 发起准备请求后 设置一个标志位即可
                //加入房间
                //存储客户端对象要加入的指定的房间编号
                //校验客户端传递过来的数据是否成功转换成了整数类型的值
                if (int.TryParse(dataValue.ToString(), out int roomId))        //如果成功转换了,表示客户端要加入指定房间
                {
                    this.ProcessUserreadyRequest(clientPeer, roomId);
                }
            }
            break;

            case RoomCode.UserCancelready_Request:      //处理玩家取消准备的业务请求
            {
                //存储客户端对象要加入的指定的房间编号
                //校验客户端传递过来的数据是否成功转换成了整数类型的值
                if (int.TryParse(dataValue.ToString(), out int roomId))        //如果成功转换了,表示客户端要加入指定房间
                {
                    this.ProcessUserCancelreadyRequest(clientPeer, roomId);
                }
            }
            break;

            case RoomCode.Startgame_Request:            //处理开始游戏的请求
            {
                //Todo:这儿需要判断当前房间内的所有玩家是否都已经准备了,如果都准备了,当客户端对象发起开始游戏的请求后,进行具体的开始游戏后的处理
                //房间内的玩家全都准备好了 那么处理方式就是向所有房间内的客户端对象广播一条开始游戏的响应
                //跟玩家满员自动开始游戏的原理实质上是差不多的
                //存储客户端对象要加入的指定的房间编号
                //校验客户端传递过来的数据是否成功转换成了整数类型的值
                if (int.TryParse(dataValue.ToString(), out int roomId))        //如果成功转换了,表示客户端要加入指定房间
                {
                    this.ProcessStartGameRequest(clientPeer, roomId);
                }
            }
            break;

            case RoomCode.RoomChat_Request:                //处理房间聊天的业务请求
            {
                //房间聊天
                string[] dataSplits     = dataValue.ToString().Split(',');                           //解析客户端传递过来的数据
                string   strRoomId      = dataSplits[0];                                             //解析到的房间编号
                string   strChatmessage = dataSplits[1];                                             //解析到的聊天内容
                this.ProcessRoomChatRequest(clientPeer, Convert.ToInt32(strRoomId), strChatmessage); //处理房间聊天
            }
            break;

            case RoomCode.LeaveRoom_Request:            //处理离开房间的业务请求
            {
                //离开房间
                //判断客户端传递过来的房间编号值是否能够转换成功
                if (int.TryParse(dataValue.ToString(), out int roomId))      //如果转换成功了
                {
                    this.ProcessLeaveRoomRequest(clientPeer, roomId);        //则将这个客户端连接对象进行离开房间的处理
                }
            }
            break;

            case RoomCode.DisbanadRoom_Request:         //处理解散房间的业务请求
            {
                //解释房间
                //判断客户端传递过来的房间编号值是否能够转换成功
                if (int.TryParse(dataValue.ToString(), out int roomId))        //如果转换成功
                {
                    this.ProcessDisbanadRoomRequest(clientPeer, roomId);       //处理解散房间
                }
            }
            break;
                //Todo:以后可能还有 [炸金花] [斗牛] [斗地主] 等其他棋牌类游戏
            }
        }//接收消息
示例#7
0
 public int CompareTo([AllowNull] Room other)
 {
     return(RoomCode.CompareTo(other.RoomCode));
 }
示例#8
0
 public Task <Room> Fetch(RoomCode roomCode)
 {
     _storage.RoomCodeIndex.TryGetValue(roomCode, out Room room);
     return(Task.FromResult(room));
 }
示例#9
0
 public override string ToString()
 {
     return(RoomCode.ToString());
 }