Esempio n. 1
0
        /// <summary>
        /// Removes an returns an action from this queue.
        /// </summary>
        /// <returns>Removed Action</returns>
        public Core.Models.Action Dequeue()
        {
            try
            {
                m_lock.WaitOne();

                var action = m_queue.Dequeue();
                action.ActionTime = DateTime.Now;
                var actionC = (Core.Controllers.Actions.Action)action.Control;
                var actionPosition = new Core.Models.Position(actionC.GetRegionPosition());

                var newAverageX = (m_average.X * (m_queue.Count + 1)) - actionPosition.X;
                var newAverageY = (m_average.Y * (m_queue.Count + 1)) - actionPosition.Y;

                if (!IsEmpty())
                {
                    m_average = new Core.Models.Position(newAverageX / m_queue.Count, newAverageY / m_queue.Count);
                }
                return action;
            }
            finally
            {
                m_lock.ReleaseMutex();
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Server.Models.AveragePositionQueue"/> class.
        /// </summary>
        public AveragePositionQueue()
        {
            m_average = new Core.Models.Position(0, 0);
            m_lock = new Mutex();

            m_queue = new Queue<Core.Models.Action>();
        }
Esempio n. 3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Core.Connections.LoginRequest"/> class.
 /// </summary>
 /// <param name="position">Position where the user is standing (converted GPS information).</param>
 /// <param name="username">User Name.</param>
 /// <param name="password">Password of the user.</param>
 public LoginRequest(Core.Models.Position position, string username, string password)
     : base(Guid.Empty, position)
 {
     Username = username;
     Password = password;
 }
Esempio n. 4
0
        /// <summary>
        /// Do somthing for tests.
        /// </summary>
        public void DeveloperFunction()
        {
            GameAppDelegate.Account.Scrap.MaximumValue = 1000;
            GameAppDelegate.Account.Plutonium.MaximumValue = 1000;
            GameAppDelegate.Account.Population.MaximumValue = 1000;
            GameAppDelegate.Account.Technology.MaximumValue = 1000;
            GameAppDelegate.Account.Energy.MaximumValue = 1000;

            GameAppDelegate.Account.Scrap.Set(DateTime.Now, 1000, 0);
            GameAppDelegate.Account.Plutonium.Set(DateTime.Now, 1000, 0);
            GameAppDelegate.Account.Population.Value = 1000;
            GameAppDelegate.Account.Technology.Set(DateTime.Now, 1000, 0);
            GameAppDelegate.Account.Energy.Value = 1000;

            var account = new Core.Models.Account(GameAppDelegate.Account.ID + 1);
            new Core.Models.AccountManager().AddAccount(account);

            var pos = Models.Geolocation.Instance.CurrentGamePosition;
            // var posI = new Core.Models.PositionI(pos.RegionPosition, pos.CellPosition);
            var actionCreate = Helper.ActionHelper.CreateEntity(
                                   new Core.Models.PositionI(pos),
                                   Core.Models.World.Instance.DefinitionManager.GetDefinition(Core.Models.Definitions.EntityType.Headquarter),
                                   account);

            m_gameScene.WorldLayerHex.DoAction(actionCreate);

            account.Scrap.MaximumValue = 10000;
            account.Plutonium.MaximumValue = 10000;
            account.Population.MaximumValue = 10000;
            account.Technology.MaximumValue = 10000;
            account.Energy.MaximumValue = 10000;

            account.Scrap.Set(DateTime.Now, 10000, 0);
            account.Plutonium.Set(DateTime.Now, 10000, 0);
            account.Population.Value = 10000;
            account.Technology.Set(DateTime.Now, 10000, 0);
            account.Energy.Value = 10000;

            var newPos = new Core.Models.Position(pos.RegionPosition, new Core.Models.CellPosition((int)pos.X + 2, (int)pos.Y + 2));

            var actioncreate2 = Helper.ActionHelper.CreateEntity(
                                    new Core.Models.PositionI(newPos),
                                    Core.Models.World.Instance.DefinitionManager.GetDefinition(Core.Models.Definitions.EntityType.Barracks),
                                    account);

            m_gameScene.WorldLayerHex.DoAction(actioncreate2);

            var actioncr = Helper.ActionHelper.CreateEntity(
                               new Core.Models.PositionI(newPos),
                               new Core.Models.Definitions.Definition((int)Core.Models.Definitions.EntityType.Archer),
                               account);

            var actioncr2 = Helper.ActionHelper.CreateEntity(
                                new Core.Models.PositionI(newPos),
                                new Core.Models.Definitions.Definition((int)Core.Models.Definitions.EntityType.Fencer),
                                account);

            m_gameScene.WorldLayerHex.DoAction(actioncr);
            m_gameScene.WorldLayerHex.DoAction(actioncr2);

            var newBorderpos = new Core.Models.Position(pos.RegionPosition, new Core.Models.CellPosition((int)pos.X - 4, (int)pos.Y));
            var newBorderpos2 = new Core.Models.Position(pos.RegionPosition, new Core.Models.CellPosition((int)pos.X, (int)pos.Y - 4));

            var actioncreate3 = Helper.ActionHelper.CreateEntity(
                                    new Core.Models.PositionI(newBorderpos),
                                    Core.Models.World.Instance.DefinitionManager.GetDefinition(Core.Models.Definitions.EntityType.GuardTower),
                                    account);

            m_gameScene.WorldLayerHex.DoAction(actioncreate3);

            var actioncreate4 = Helper.ActionHelper.CreateEntity(
                                    new Core.Models.PositionI(newBorderpos2),
                                    Core.Models.World.Instance.DefinitionManager.GetDefinition(Core.Models.Definitions.EntityType.GuardTower),
                                    account);

            m_gameScene.WorldLayerHex.DoAction(actioncreate4);

            var newLabpos = new Core.Models.Position(pos.RegionPosition, new Core.Models.CellPosition((int)newBorderpos.X - 1, (int)newBorderpos.Y));

            var actioncreate5 = Helper.ActionHelper.CreateEntity(
                                    new Core.Models.PositionI(newLabpos),
                                    Core.Models.World.Instance.DefinitionManager.GetDefinition(Core.Models.Definitions.EntityType.Lab),
                                    account);

            m_gameScene.WorldLayerHex.DoAction(actioncreate5);
        }
Esempio n. 5
0
        /// <summary>
        /// Enqueue the specified action.
        /// </summary>
        /// <param name="action">Action which should be executed.</param>
        public void Enqueue(Core.Models.Action action)
        {
            try
            {
                var actionC = (Core.Controllers.Actions.Action)action.Control;
                var actionPosition = new Core.Models.Position(actionC.GetRegionPosition());

                m_lock.WaitOne();
                var newAverageX = (m_average.X * m_queue.Count) + actionPosition.X;
                var newAverageY = (m_average.Y * m_queue.Count) + actionPosition.Y;
                m_queue.Enqueue(action);
                m_average = new Core.Models.Position(newAverageX / m_queue.Count, newAverageY / m_queue.Count);
            }
            finally
            {
                m_lock.ReleaseMutex();
            }
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="Core.Connections.LoadRegionsRequest"/> class.
 /// </summary>
 /// <param name="sessionID">Session ID of the user.</param>
 /// <param name="position">Position where the user is standing (converted GPS information).</param>
 /// <param name="regionPositions">Region positions.</param>
 public LoadRegionsRequest(Guid sessionID, Core.Models.Position position, Core.Models.RegionPosition[] regionPositions)
     : base(sessionID, position)
 {
     RegionPositions = regionPositions;
 }
Esempio n. 7
0
        /// <summary>
        /// Send Actions the server so they will be executed.
        /// (but first, the actions have to wait in a queue)
        /// </summary>
        /// <param name="account">Account who wants the actions executed.</param>
        /// <param name="actions">Array of Actions which should be executed.</param>
        public void DoAction(Core.Models.Account account, Core.Models.Action[] actions)
        {
            foreach (var action in actions)
            {
                var bestThread = m_threads[0];

                action.Account = account;
                action.ActionTime = DateTime.Now;

                var actionC = (Core.Controllers.Actions.Action)action.Control;
                var actionPosition = new Core.Models.Position(actionC.GetRegionPosition());

                for (int queueNr = 0; queueNr < Models.ServerConstants.ACTION_THREADS; ++queueNr)
                {
                    var thread = m_threads[queueNr];

                    if (thread.IsEmpty())
                    {
                        bestThread = thread;
                        break;
                    }
                    else if (thread.Distance(actionPosition) < bestThread.Distance(actionPosition))
                    {
                        bestThread = thread;
                    }
                }
                bestThread.Enqueue(action);
            }
        }
Esempio n. 8
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Core.Connections.DoActionsRequest"/> class.
 /// </summary>
 /// <param name="sessionID">Session ID of the user.</param>
 /// <param name="position">Position where the user is standing (converted GPS information).</param>
 /// <param name="actions">Actions which should be executed.</param>
 public DoActionsRequest(Guid sessionID, Core.Models.Position position, Core.Models.Action[] actions)
     : base(sessionID, position)
 {
     Actions = actions;
 }
Esempio n. 9
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Core.Connections.Request"/> class.
 /// </summary>
 /// <param name="sessionID">Session ID of the user.</param>
 /// <param name="position">Position where the user is standing (converted GPS information).</param>
 public Request(Guid sessionID, Core.Models.Position position)
 {
     Position  = position;
     SessionID = sessionID;
 }