public async Task <IResponseModel> AddRoomAsync(IRoomModel model)
        {
            try
            {
                var room = new Room
                {
                    Id         = Guid.NewGuid(),
                    Name       = model.Name,
                    TotalBeds  = model.TotalBeds,
                    RoomTypeId = model.RoomTypeId,
                    PropertyId = model.PropertyId
                };

                _db.Rooms.Add(room);
                await _db.SaveChangesAsync();

                _response.Status  = true;
                _response.Message = "New room added.";

                return(_response);
            }
            catch (Exception ex)
            {
                _loggerService.Log("Add Room", ex.InnerException.Message, ex.Message, ex.StackTrace);

                _response.Status  = false;
                _response.Message = "An error occurred while adding new room.";

                return(_response);
            }
        }
Ejemplo n.º 2
0
        internal Room(IRoomData roomData, IRoomModel model)
        {
            RoomData  = roomData;
            RoomModel = model;

            _cancellationToken = new CancellationTokenSource();
            RoomGrid           = new RoomGrid(RoomModel);
            _entityHandler     = new EntityHandler(this);
        }
Ejemplo n.º 3
0
        public BaseEntity AddUserToRoom(IRoom room, ISession session)
        {
            IRoomModel roomModel  = room.RoomModel;
            UserEntity userEntity = new UserEntity(room.Entities.Count + 1, roomModel.DoorX, roomModel.DoorY, roomModel.DoorDir, session);

            room.AddEntity(userEntity);
            session.Entity = userEntity;

            return(userEntity);
        }
Ejemplo n.º 4
0
        public RoomGrid(IRoomModel roomModel)
        {
            MapSizeX = roomModel.MapSizeX;
            MapSizeY = roomModel.MapSizeY;

            _roomTiles   = new Dictionary <int, RoomTile>();
            WalkableGrid = new bool[MapSizeX, MapSizeY];
            for (int y = 0; y < MapSizeY; y++)
            {
                for (int x = 0; x < MapSizeX; x++)
                {
                    WalkableGrid[x, y] = roomModel.GetTileState(x, y);
                    _roomTiles.Add(ConvertTo1D(x, y), new RoomTile());
                }
            }
        }
Ejemplo n.º 5
0
        public UserViewModel(ILoginModel loginBack, IRoomModel roomBack)
        {
            _roomBack  = roomBack;
            _loginBack = loginBack;

            LogoutButton_Clicked = new DelegateCommand(Logout, () => LogoutStatus == "Logout");
            Message_Sent         = new DelegateCommand(SendNewMessage, () => !string.IsNullOrWhiteSpace(SendMessageText) && LogoutStatus == "Logout");
            NewLine_Added        = new DelegateCommand(() => { SendMessageText += "\r\n"; });
            Invites         = new ObservableCollection <InviteViewModel>();
            NewJoin_Clicked = new DelegateCommand(JoinNewRoom, () => !string.IsNullOrEmpty(RoomToJoin));

            _roomBack.RoomSyncCompleted += OnRoomReady;
            _roomBack.NewInvite         += OnNewInvite;
            _roomBack.RoomJoined        += OnRoomJoined;
            _loginBack.LogoutCompleted  += OnLogoutAttempted;
        }
Ejemplo n.º 6
0
        public HeightMapComposer(IRoomModel roomModel)
            : base(Headers.HeightMapMessageComposer)
        {
            WriteInt(roomModel.MapSizeX);
            WriteInt(roomModel.MapSizeX * roomModel.MapSizeY);

            for (int y = 0; y < roomModel.MapSizeY; y++)
            {
                for (int x = 0; x < roomModel.MapSizeX; x++)
                {
                    //Tile is valid.
                    if (roomModel.GetTileState(x, y))
                    {
                        WriteShort((short)(roomModel.GetHeight(x, y) * 256));
                    }
                    else
                    {
                        WriteShort(-1);
                    }
                }
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        /// TimedAutoMatch的子函数,成功坐下
        /// </summary>
        /// <param name="room"></param>
        /// <param name="userSession"></param>
        private void TimedAutoMatchRoom_Sub_SitDown_Ok(IRoomModel room, AppSession userSession)
        {
            try
            {
               
                string svrAction = ServerAction.joinOK;

                //
                StringBuilder contentXml = new StringBuilder();

                //获取房间的xml输出
                //IRoomModel room = logicGetRoom(roomId);
                string roomXml = room.toXMLString();

                //坐下成功不需要code
                //contentXml.Append("<code>0</code>");
                contentXml.Append(roomXml);

                //回复
                Send(userSession,

                    XmlInstruction.fengBao(svrAction, contentXml.ToString())

                    );

                //log
                Log.WriteStrBySend(svrAction, userSession.RemoteEndPoint.ToString());

                //转发 uER = UserEnterRoom
                string svrAction_uER = ServerAction.uER;

                IUserModel sitDownUser = logicGetUser(userSession.RemoteEndPoint.ToString());

                string chairAndUserXml = room.getChair(sitDownUser).toXMLString();

                netTurnRoom(userSession.RemoteEndPoint.ToString(), room.Id, svrAction_uER, chairAndUserXml);

                Log.WriteStrByTurn(SR.Room_displayName + room.Id.ToString(), "", svrAction_uER);

                
            }
            catch (Exception exd)
            {
                Log.WriteStrByException(CLASS_NAME, "TimedAutoMatch_Sub_SitDown", exd.Message, exd.Source, exd.StackTrace);
            }

        }        
Ejemplo n.º 8
0
        private void TimedAutoMatchRoom_Sub_Match(ref IRoomModel room, AutoMatchRoomModel amr, IUserModel user, AppSession userSession, ref ToSitDownStatus sitDownStatus, ref bool sitDown, ref int roomId, int matchLvl)
        {
            try
            {
                foreach (int roomKey in roomList.Keys)
                {
                    room = (IRoomModel)roomList.get(roomKey);

                    //自动匹配差1人
                    if (amr.Tab == room.Tab)
                    {
                        roomId = room.Id;

                        //不可为上次的房间,否则会因三人中的二人未退出,又匹配到该房间
                        if (amr.getRoomOldId() == roomId)
                        {
                            continue;
                        }

                        //不可为正在游戏中的房间
                        if (room.hasGamePlaying())
                        {
                            continue;
                        }

                        //不可为断线重连中的房间
                        if (room.isWaitReconnection)
                        {
                            continue;
                        }

                        //不可为有尸体的房间
                        if (logicChkRoomByDeadPeople(roomId))
                        {
                            continue;
                        }

                        //自动匹配原则是 差1人的游戏最佳
                        //所以这里不能单单只是坐下,要做在差一人的坐位上
                        sitDown = logicHasIdleChairAndMatchSitDown(roomId,
                            matchLvl,
                            //user.getStrIpPort(),
                            userSession.RemoteEndPoint.ToString(),
                            true,
                            out sitDownStatus);

                        if (sitDown)
                        {
                            TimedAutoMatchRoom_Sub_SitDown_Ok(room, userSession);

                            break;
                        }//end if

                    }//end if


                }//end for
            }
            catch (Exception exd)
            {
                Log.WriteStrByException(CLASS_NAME, "TimedAutoMatchRoom_Sub_Match", exd.Message, exd.Source, exd.StackTrace);
            }

        }