Exemple #1
0
        private void CreatRoom(IPackage package)
        {
            var conectionData   = (IConectionData)package.Data;
            var client_passport = package.Sender_Passport;
            var newGameSettings = conectionData.GameSetings;
            var player_name     = conectionData.PlayerName;

            // получить Gamer по id из списка ожидающих
            IGamer gamer = ManagerRoom.GetGamerByGuid(client_passport);

            gamer.SetId(player_name, client_passport);

            // создать комнату
            IRoom newGameRoom = ManagerRoom.AddRoom(newGameSettings, client_passport);

            newGameRoom.CreatorPassport = gamer.Passport;

            (newGameRoom as IGameRoom).OnNotifyMustRemoveRoom += OnNotifyMustRemoveRoom_EventHandler;

            newGameRoom.RUN();

            // добавить в нее игрока
            //var room_endpoint = ManagerRoom.MooveGamerToRoom(gamer, newGameRoom.Passport);
            var        room_endpoint = newGameRoom.Reciever.LockalEndPoint;
            Addresssee addres        = new Addresssee(room_endpoint);


            var roominfo = new RoomInfo()
            {
                RoomPassport = newGameRoom.Passport,
                roomEndpoint = addres,
                mapSize      = newGameSettings.MapSize
            };

            Owner.Sender.SendMessage(new Package()
            {
                Data         = roominfo,
                MesseggeType = MesseggeType.RoomInfo
            }, gamer.RemoteEndPoint);


            //newGameRoom.RUN();
            //(newGameRoom as IGameRoom).NotifyGameRoomForEvent(new NotifyJoinedPlayerData() { JoinedAddresssee = gamer });

            // инициировать начало игры (по крайней мере для теста - если создатель указывает колич.игроков =1 при создании)
            //if (newGameRoom.Gamers.Count() == newGameRoom.GameSetings.MaxPlayersCount)
            //{
            //    IPackage pack = new Package()
            //    {
            //        MesseggeType = MesseggeType.StartGame,
            //        Data = null,
            //    };
            //    Owner.Sender.SendMessage(pack, newGameRoom.Gamers); //Управляющая комната отсылает участникам игровой комнаты

            //    //уведомляем игровую комнату о начале:
            //    (newGameRoom as IGameRoom).NotifyGameRoomForEvent(new NotifyStartGameData() { EnforceStartGame = true });
            //}
        }
Exemple #2
0
        private void RoomList(IPackage package)
        {
            ManagerRoom = Owner as IManagerRoom;

            var    client_id = package.Sender_Passport;
            IGamer gamer     = ManagerRoom.GetGamerByGuid(client_id);

            SendRoomList(gamer.RemoteEndPoint);
        }
Exemple #3
0
        private void ConfirmJoinToRoom(IPackage package)
        {
            IConfirmJoinToRoom confirmJoinData = package.Data as IConfirmJoinToRoom;

            ManagerRoom = Owner as IManagerRoom;

            var client_passport = package.Sender_Passport;

            IGamer gamer = ManagerRoom.GetGamerByGuid(client_passport);

            var room_passport = confirmJoinData.RoomPassport;
            var room          = ManagerRoom.GetRoomByGuid(room_passport);

            if (room != null)
            {
                if (room.Gamers.Count() < room.GameSetings.MaxPlayersCount)
                {
                    ManagerRoom.MooveGamerToRoom(gamer, room_passport);

                    //(room as IGameRoom).NotifyGameRoomForEvent(new NotifyJoinedPlayerData() { JoinedAddresssee = gamer });

                    //// инициировать начало игры
                    //if (room.Gamers.Count() == room.GameSetings.MaxPlayersCount)
                    //{
                    //    IPackage pack = new Package()
                    //    {
                    //        MesseggeType = MesseggeType.StartGame,
                    //        Data = null,
                    //    };
                    //    Owner.Sender.SendMessage(pack, room.Gamers); //Управляющая комната отсылает участникам игровой комнаты

                    //    //уведомляем игровую комнату о начале:
                    //    (room as IGameRoom).NotifyGameRoomForEvent(new NotifyStartGameData() { EnforceStartGame = true });
                    //}
                }
                else
                {
                    Owner.Sender.SendMessage(new Package()
                    {
                        Data         = "Room is full",
                        MesseggeType = MesseggeType.Error
                    }, gamer.RemoteEndPoint);
                }
            }
            else
            {
                Owner.Sender.SendMessage(new Package()
                {
                    Data         = "Room is not exist",
                    MesseggeType = MesseggeType.Error
                }, gamer.RemoteEndPoint);
            }
        }
Exemple #4
0
 public void RemoveGamer(IGamer delGamer)
 {
     lock (_locker)
     {
         _gamers.Remove(delGamer);
         OnRemoveAddresssee?.Invoke(this, new RemoveAddressseeData()
         {
             removeddresssee = delGamer
         });
         //if (GameSetings != null && _gamers.Count == GameSetings.MaxPlayersCount)
         //    OnAddressseeHolderFull?.Invoke(this, new AddressseeHolderFullData() { isFull = true });
     }
 }
Exemple #5
0
        public IGamer GetGamerByGuid(Guid gamerGuid)
        {
            IGamer foundGamer = null;

            var g = (from G in Gamers where G.Passport == gamerGuid select G);

            if (g.Count() > 1)
            {
                throw new Exception("Rooms ID not unique");
            }

            foundGamer = g.FirstOrDefault();

            return(foundGamer);
        }
Exemple #6
0
        public void RemoveGamerFromRoom(IGamer gamer, Guid TargetRoomId)
        {
            IRoom targetRoom;

            var selRoom = from r in Rooms where r.Passport == TargetRoomId select r;

            targetRoom = selRoom.First();

            try
            {
                targetRoom.AddGamer(gamer);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Exemple #7
0
        public IPEndPoint MooveGamerToRoom(IGamer gamer, Guid TargetRoomId)
        {
            IRoom targetRoom;

            var selRoom = from r in Rooms where r.Passport == TargetRoomId select r;

            targetRoom = selRoom.First();

            try
            {
                targetRoom.AddGamer(gamer);
                return(targetRoom.Reciever.LockalEndPoint);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Exemple #8
0
        // Нужно вызывать эту чепуху при новом игроке в комнате, метод ниже мне не подходит, по причине - мне не нужен ендпоинт, мне нужен гуид
        /// <summary>
        /// Метод интегрирующий нового игрока на игровое поле
        /// </summary>
        /// <param name="gamer"> Новый игрок</param>
        public void NewGamer(IGamer gamer)
        {
            var obj = new GameObjectFactory().CreateTank();
            //var obj = new Tank();
            var room = Owner as IRoom;

            obj.Size        = room.GameSetings.ObjectsSize;
            obj.Tank_ID     = gamer.Passport;
            obj.Name        = gamer.Name;
            obj.Lives       = 1;
            obj.HelthPoints = 5;
            //obj.Is_Alive = true;
            obj.Can_Be_Destroyed = true;
            obj.Can_Shoot        = true;
            obj.Direction        = Direction.Up;
            obj.Position         = this.Reload();
            tanks.Add(obj);
            //objects.Add(obj);
        }
Exemple #9
0
        public void RemoveGamer(Guid delGamerId)
        {
            IGamer gmr = null;

            lock (_locker)
            {
                var found = from g in _gamers where g.Passport == delGamerId select g;
                if (found == null)
                {
                    throw new Exception("Gamer .." + delGamerId.ToString() + " not found in room " + Passport.ToString());
                }
                if (found.Count() > 1)
                {
                    throw new Exception("Not Unique gamer passport " + delGamerId.ToString() + " in room " + Passport.ToString());
                }
                gmr = found.First();
            }

            RemoveGamer(gmr);
        }
Exemple #10
0
        public virtual void AddGamer(IGamer newGamer)
        {
            if (GameSetings != null && _gamers.Count == GameSetings.MaxPlayersCount)
            {
                throw new RoomIsFullException();
            }

            _gamers.Add(newGamer);
            OnNewAddresssee?.Invoke(this, new NewAddressseeData()
            {
                newAddresssee = newGamer
            });
            if (GameSetings != null && _gamers.Count == GameSetings.MaxPlayersCount)
            {
                OnAddressseeHolderFull?.Invoke(this, new AddressseeHolderFullData()
                {
                    isFull = true
                });
            }
        }
Exemple #11
0
        public void RemoveGamerFromRoom(IGamer gamer, Guid TargetRoomId)
        {
            IManagerRoomOwner mO = Owner as IManagerRoomOwner;

            mO.RemoveGamerFromRoom(gamer, TargetRoomId);
        }
Exemple #12
0
        public IPEndPoint MooveGamerToRoom(IGamer gamer, Guid TargetRoomId)
        {
            IManagerRoomOwner mO = Owner as IManagerRoomOwner;

            return(mO.MooveGamerToRoom(gamer, TargetRoomId));
        }
Exemple #13
0
        private void RoomConnect(IPackage package)
        {
            ManagerRoom = Owner as IManagerRoom;

            var cd              = (IConectionData)package.Data;
            var name            = cd.PlayerName;
            var client_passport = package.Sender_Passport;

            IGamer gamer = ManagerRoom.GetGamerByGuid(client_passport);

            gamer.SetId(name, client_passport);
            var room_passport = cd.RoomPasport;

            var room     = ManagerRoom.GetRoomByGuid(room_passport);
            var map_Size = room.GameSetings.MapSize;

            if (room != null)
            {
                if (room.Gamers.Count() < room.GameSetings.MaxPlayersCount)
                {
                    //IPEndPoint room_ipendpoint = ManagerRoom.MooveGamerToRoom(gamer, room_passport); - Это будет делаться по отдельному сообщению ConfirmJoinToRoom
                    IPEndPoint room_ipendpoint = room.Reciever.LockalEndPoint;
                    Addresssee addres          = new Addresssee(room_ipendpoint);

                    var roominfo = new RoomInfo()
                    {
                        RoomPassport = room_passport,
                        roomEndpoint = addres,
                        mapSize      = map_Size
                    };

                    Owner.Sender.SendMessage(new Package()
                    {
                        Data         = roominfo,
                        MesseggeType = MesseggeType.RoomInfo
                    }, gamer);                       //gamer.RemoteEndPoint

                    // Это будет делаться по отдельному сообщению ConfirmJoinToRoom
                    //(room as IGameRoom).NotifyGameRoomForEvent(new NotifyJoinedPlayerData() { JoinedAddresssee = gamer });

                    //// инициировать начало игры
                    //if (room.Gamers.Count() == room.GameSetings.MaxPlayersCount)
                    //{
                    //    IPackage pack = new Package()
                    //    {
                    //        MesseggeType = MesseggeType.StartGame,
                    //        Data = null,
                    //    };
                    //    Owner.Sender.SendMessage(pack, room.Gamers); //Управляющая комната отсылает участникам игровой комнаты

                    //    //уведомляем игровую комнату о начале:
                    //    (room as IGameRoom).NotifyGameRoomForEvent(new NotifyStartGameData() { EnforceStartGame = true });
                    //}
                }
                else
                {
                    Owner.Sender.SendMessage(new Package()
                    {
                        Data         = "Room is full",
                        MesseggeType = MesseggeType.Error
                    }, gamer.RemoteEndPoint);
                }
            }
            else
            {
                Owner.Sender.SendMessage(new Package()
                {
                    Data         = "Room is not exist",
                    MesseggeType = MesseggeType.Error
                }, gamer.RemoteEndPoint);
            }
        }
Exemple #14
0
 public void Update(IGamer player, int Id)
 {
 }
Exemple #15
0
 public void Add(IGamer player)
 {
     players.Add(player);
     Console.WriteLine("{0} {1}, isimli oyuncu sisteme eklendi.", player.GamerName, player.GamerSurname);
 }
Exemple #16
0
 public Score(IGamer gamer)
 {
     this.points            = 0;
     this.CurrentGamer      = gamer;
     this.topGamersRanklist = new SortedDictionary <int, string>();
 }