Пример #1
0
        public async Task <Guid> PostDeployTroops(Guid sessionId, Guid regionId, uint numberOfTroops)
        {
            IRegionData region = await RegionRepository.GetRegionOrThrow(sessionId, regionId)
                                 .IsRegionOwnerOrThrow(User.Identity.GetUserId());

            ISession session = await SessionRepository.GetSessionOrThrow(region)
                               .IsUserIdJoinedOrThrow(NationRepository, User.Identity.GetUserId())
                               .IsPhaseTypeOrThrow(SessionPhase.Reinforcements);

            INationData nation = await NationRepository.GetNation(sessionId, User.Identity.GetUserId());

            if (nation.AvailableReinforcements < numberOfTroops)
            {
                throw new HttpResponseException(new HttpResponseMessage {
                    StatusCode = HttpStatusCode.BadRequest, ReasonPhrase = "You do not have that many troops available to deploy"
                });
            }
            else if (numberOfTroops <= 0)
            {
                throw new HttpResponseException(new HttpResponseMessage {
                    StatusCode = HttpStatusCode.BadRequest, ReasonPhrase = "You can not deploy less than 1 troop"
                });
            }
            else
            {
                return(await CommandQueue.DeployReinforcements(session.GameId, session.PhaseId, region.RegionId, region.CurrentEtag, numberOfTroops));
            }
        }
Пример #2
0
 public ConsoleProfileSetup(IProfileManager profileManager, IInputValidator inputValidator, IRegionConverter regionConverter, IRegionData regionData)
 {
     _profileManager  = profileManager;
     _inputValidator  = inputValidator;
     _regionConverter = regionConverter;
     _regionData      = regionData;
 }
Пример #3
0
        OSDMap GetRegion(OSDMap map)
        {
            OSDMap      resp       = new OSDMap();
            IRegionData regiondata = DataPlugins.RequestPlugin <IRegionData> ();

            if (regiondata != null && (map.ContainsKey("RegionID") || map.ContainsKey("Region")))
            {
                string regionName = map.ContainsKey("Region") ? map ["Region"].ToString().Trim() : "";
                UUID   regionID   = map.ContainsKey("RegionID") ? UUID.Parse(map ["RegionID"].ToString()) : UUID.Zero;
                // not used?? // UUID scopeID = map.ContainsKey ("ScopeID") ? UUID.Parse (map ["ScopeID"].ToString ()) : UUID.Zero;
                GridRegion region = null;
                if (regionID != UUID.Zero)
                {
                    region = regiondata.Get(regionID, null);
                }
                else if (regionName != string.Empty)
                {
                    region = regiondata.Get(regionName, null, null, null) [0];
                }
                if (region != null)
                {
                    resp ["Region"] = region.ToOSD();
                }
            }
            return(resp);
        }
Пример #4
0
        private OSDArray MonolithicRegionLookup(string[] parts)
        {
            OSDArray resp = new OSDArray();

            if (parts.Length < 1 || parts[0] != "MonolithicRegionLookup")
            {
                return(resp);
            }

            IRegionData regiondata = Aurora.DataManager.DataManager.RequestPlugin <IRegionData>();

            if (regiondata != null)
            {
                List <GridRegion> regions = regiondata.Get(RegionFlags.RegionOnline);
                OSDMap            regionResp;
                foreach (GridRegion region in regions)
                {
                    regionResp = new OSDMap(8);

                    regionResp["Name"]   = region.RegionName;
                    regionResp["UUID"]   = region.RegionID;
                    regionResp["x"]      = region.RegionLocX / Constants.RegionSize;
                    regionResp["y"]      = region.RegionLocY / Constants.RegionSize;
                    regionResp["z"]      = region.RegionLocZ / Constants.RegionSize;
                    regionResp["width"]  = region.RegionSizeX;
                    regionResp["height"] = region.RegionSizeY;
                    regionResp["depth"]  = region.RegionSizeZ;

                    resp.Add(regionResp);
                }
            }

            return(resp);
        }
        public LandData GetParcelInfo(UUID RegionID, UUID ScopeID, string ParcelName)
        {
            IRegionData regiondata = DataManager.DataManager.RequestPlugin <IRegionData>();

            if (regiondata != null)
            {
                GridRegion region = regiondata.Get(RegionID, ScopeID);
                if (region != null)
                {
                    UUID        parcelInfoID = UUID.Zero;
                    QueryFilter filter       = new QueryFilter();
                    filter.andFilters["Name"]     = ParcelName;
                    filter.andFilters["RegionID"] = RegionID;

                    List <string> query = GD.Query(new string[1] {
                        "InfoUUID"
                    }, "searchparcel", filter, null, 0, 1);

                    if (query.Count >= 1 && UUID.TryParse(query[0], out parcelInfoID))
                    {
                        return(GetParcelInfo(parcelInfoID));
                    }
                }
            }

            return(null);
        }
        public List <LandData> GetParcelsByRegion(uint start, uint count, UUID RegionID, UUID scopeID, UUID owner, ParcelFlags flags, ParcelCategory category)
        {
            List <LandData> resp = new List <LandData>(0);

            if (count == 0)
            {
                return(resp);
            }

            IRegionData regiondata = DataManager.DataManager.RequestPlugin <IRegionData>();

            if (regiondata != null)
            {
                GridRegion region = regiondata.Get(RegionID, scopeID);
                if (region != null)
                {
                    QueryFilter filter             = GetParcelsByRegionWhereClause(RegionID, scopeID, owner, flags, category);
                    Dictionary <string, bool> sort = new Dictionary <string, bool>(1);
                    sort["OwnerID"] = false;
                    return(Query2LandData(GD.Query(new string[1] {
                        "*"
                    }, "searchparcel", filter, sort, start, count)));
                }
            }
            return(resp);
        }
        public List <LandData> GetParcelsWithNameByRegion(uint start, uint count, UUID RegionID, UUID ScopeID, string name)
        {
            List <LandData> resp = new List <LandData>(0);

            if (count == 0)
            {
                return(resp);
            }

            IRegionData regiondata = DataManager.DataManager.RequestPlugin <IRegionData>();

            if (regiondata != null)
            {
                GridRegion region = regiondata.Get(RegionID, ScopeID);
                if (region != null)
                {
                    QueryFilter filter = new QueryFilter();
                    filter.andFilters["RegionID"] = RegionID;
                    filter.andFilters["Name"]     = name;

                    Dictionary <string, bool> sort = new Dictionary <string, bool>(1);
                    sort["OwnerID"] = false;

                    return(Query2LandData(GD.Query(new string[1] {
                        "*"
                    }, "searchparcel", filter, sort, start, count)));
                }
            }

            return(resp);
        }
Пример #8
0
        public void Start(IConfigSource config, IRegistryCore registry)
        {
            m_AssetService        = registry.RequestModuleInterface <IAssetService> ();
            m_GridService         = registry.RequestModuleInterface <IGridService> ();
            m_GatekeeperConnector = new GatekeeperServiceConnector(m_AssetService);
            m_Database            = Aurora.DataManager.DataManager.RequestPlugin <IRegionData> ();

            MainConsole.Instance.Debug("[HYPERGRID LINKER]: Loaded all services...");
        }
Пример #9
0
        public async Task <IRegion> GetDetails(Guid sessionId, Guid regionId)
        {
            IRegionData region = await RegionRepository.GetRegionOrThrow(sessionId, regionId);

            ISession session = await SessionRepository.GetSessionOrThrow(region)
                               .IsUserIdJoinedOrThrow(NationRepository, User.Identity.GetUserId());

            return(new Region(region));
        }
Пример #10
0
 public Region(IRegionData data)
 {
     RegionId         = data.RegionId;
     ContinentId      = data.ContinentId;
     Name             = data.Name;
     ConnectedRegions = data.ConnectedRegions;
     OwnerId          = data.OwnerId;
     TroopCount       = data.TroopCount;
     CardValue        = data.CardValue;
 }
Пример #11
0
 public override void CopyInFromBinary(
     IRegionData item,
     MutagenFrame frame,
     TypedParseParams?translationParams = null)
 {
     CopyInFromBinary(
         item: (RegionLand)item,
         frame: frame,
         translationParams: translationParams);
 }
Пример #12
0
 public override void CopyInFromBinary(
     IRegionData item,
     MutagenFrame frame,
     RecordTypeConverter?recordTypeConverter = null)
 {
     CopyInFromBinary(
         item: (RegionLand)item,
         frame: frame,
         recordTypeConverter: recordTypeConverter);
 }
Пример #13
0
    public RegionConverter(IRegionData data)
    {
        foreach (IRegionInfo regionInfo in data.GetRegions())
        {
            int intVal = (int)Convert.ChangeType(regionInfo.EnumValue, typeof(int), NumberFormatInfo.InvariantInfo);

            _enumMap.Add(intVal, regionInfo);
            _stringMap.Add(regionInfo.Code, regionInfo);
        }
    }
Пример #14
0
        static public async Task <IRegionData> IsRegionConnectedOrThrow(this Task <IRegionData> regionTask, Guid connectedRegionId)
        {
            IRegionData region = await regionTask;

            if (!region.ConnectedRegions.Contains(connectedRegionId))
            {
                throw new HttpResponseException(new HttpResponseMessage {
                    StatusCode = HttpStatusCode.PaymentRequired, ReasonPhrase = "The two regions are not connected"
                });
            }
            return(region);
        }
Пример #15
0
        public virtual void Start(IConfigSource config, IRegistryCore registry)
        {
            m_registryCore          = registry;
            m_AuthenticationService = registry.RequestModuleInterface <IAuthenticationService>();
            m_simulationBase        = registry.RequestModuleInterface <ISimulationBase>();
            m_Database = DataManager.RequestPlugin <IRegionData>();

            if (m_Database == null)
            {
                throw new Exception("Could not find a storage interface in the given module");
            }
        }
Пример #16
0
        static public async Task <IRegionData> GetRegionOrThrow(this IRegionRepository repository, Guid sessionId, Guid regionId)
        {
            IRegionData region = await repository.GetRegion(sessionId, regionId);

            if (region == null)
            {
                throw new HttpResponseException(new HttpResponseMessage {
                    StatusCode = HttpStatusCode.NotFound, ReasonPhrase = "No region found with the provided Guid"
                });
            }
            return(region);
        }
Пример #17
0
        static public async Task <IRegionData> IsNotRegionOwnerOrThrow(this Task <IRegionData> regionTask, String userId)
        {
            IRegionData region = await regionTask;

            if (region.OwnerId == userId)
            {
                throw new HttpResponseException(new HttpResponseMessage {
                    StatusCode = HttpStatusCode.NotAcceptable, ReasonPhrase = "You are the owner of the region"
                });
            }
            return(region);
        }
        private static List <EventData> Query2EventData(List <string> RetVal)
        {
            List <EventData> Events     = new List <EventData>();
            IRegionData      regiondata = Aurora.DataManager.DataManager.RequestPlugin <IRegionData>();

            if (RetVal.Count % 15 != 0 || regiondata == null)
            {
                return(Events);
            }

            GridRegion region;
            EventData  data;

            for (int i = 0; i < RetVal.Count; i += 15)
            {
                data = new EventData();

                region = regiondata.Get(UUID.Parse(RetVal[2].ToString()), UUID.Zero);
                if (region == null)
                {
                    continue;
                }
                data.simName = region.RegionName;

                data.eventID = Convert.ToUInt32(RetVal[i]);
                data.creator = RetVal[i + 1];

                //Parse the time out for the viewer
                DateTime date = DateTime.Parse(RetVal[i + 4].ToString());
                data.date    = date.ToString(new DateTimeFormatInfo());
                data.dateUTC = (uint)Util.ToUnixTime(date);

                data.cover      = data.amount = Convert.ToUInt32(RetVal[i + 5]);
                data.maturity   = Convert.ToInt32(RetVal[i + 6]);
                data.eventFlags = Convert.ToUInt32(RetVal[i + 7]);
                data.duration   = Convert.ToUInt32(RetVal[i + 8]);

                data.globalPos = new Vector3(
                    region.RegionLocX + float.Parse(RetVal[i + 9]),
                    region.RegionLocY + float.Parse(RetVal[i + 10]),
                    region.RegionLocZ + float.Parse(RetVal[i + 11])
                    );

                data.name        = RetVal[i + 12];
                data.description = RetVal[i + 13];
                data.category    = RetVal[i + 14];

                Events.Add(data);
            }

            return(Events);
        }
        /// <summary>
        ///   Retrives all events in the given region by their maturity level
        /// </summary>
        /// <param name = "regionName"></param>
        /// <param name = "maturity">Uses DirectoryManager.EventFlags to determine the maturity requested</param>
        /// <returns></returns>
        public DirEventsReplyData[] FindAllEventsInRegion(string regionName, int maturity)
        {
            List <DirEventsReplyData> Data = new List <DirEventsReplyData>();

            IRegionData regiondata = Aurora.DataManager.DataManager.RequestPlugin <IRegionData>();

            if (regiondata != null)
            {
                List <GridRegion> regions = regiondata.Get(regionName, UUID.Zero);
                if (regions.Count >= 1)
                {
                    Dictionary <string, object> whereClause = new Dictionary <string, object>();
                    whereClause["region"]   = regions[0].RegionID.ToString();
                    whereClause["maturity"] = maturity;

                    List <string> retVal = GD.Query(new string[] {
                        "EID",
                        "creator",
                        "date",
                        "maturity",
                        "flags",
                        "name"
                    }, "asevents", new QueryFilter
                    {
                        andFilters = whereClause
                    }, null, null, null);

                    if (retVal.Count > 0)
                    {
                        DirEventsReplyData replyData;
                        for (int i = 0; i < retVal.Count; i += 6)
                        {
                            replyData = new DirEventsReplyData
                            {
                                eventID = Convert.ToUInt32(retVal[i]),
                                ownerID = new UUID(retVal[i + 1]),
                                name    = retVal[i + 5],
                            };
                            DateTime date = DateTime.Parse(retVal[i + 2].ToString());
                            replyData.date       = date.ToString(new DateTimeFormatInfo());
                            replyData.unixTime   = (uint)Util.ToUnixTime(date);
                            replyData.eventFlags = Convert.ToUInt32(retVal[i + 4]);

                            Data.Add(replyData);
                        }
                    }
                }
            }

            return(Data.ToArray());
        }
Пример #20
0
 public override void DeepCopyIn(
     IRegionData item,
     IRegionDataGetter rhs,
     ErrorMaskBuilder?errorMask,
     TranslationCrystal?copyMask,
     bool deepCopy)
 {
     this.DeepCopyIn(
         item: (IRegionLand)item,
         rhs: (IRegionLandGetter)rhs,
         errorMask: errorMask,
         copyMask: copyMask,
         deepCopy: deepCopy);
 }
        public GridServiceBase(IConfigSource config)
            : base(config)
        {
            string dllName    = String.Empty;
            string connString = String.Empty;
            string realm      = "regions";

            //
            // Try reading the [DatabaseService] section, if it exists
            //
            IConfig dbConfig = config.Configs["DatabaseService"];

            if (dbConfig != null)
            {
                if (dllName == String.Empty)
                {
                    dllName = dbConfig.GetString("StorageProvider", String.Empty);
                }
                if (connString == String.Empty)
                {
                    connString = dbConfig.GetString("ConnectionString", String.Empty);
                }
            }

            //
            // [GridService] section overrides [DatabaseService], if it exists
            //
            IConfig gridConfig = config.Configs["GridService"];

            if (gridConfig != null)
            {
                dllName    = gridConfig.GetString("StorageProvider", dllName);
                connString = gridConfig.GetString("ConnectionString", connString);
                realm      = gridConfig.GetString("Realm", realm);
            }

            //
            // We tried, but this doesn't exist. We can't proceed.
            //
            if (dllName.Equals(String.Empty))
            {
                throw new Exception("No StorageProvider configured");
            }

            m_Database = LoadPlugin <IRegionData>(dllName, new Object[] { connString, realm });
            if (m_Database == null)
            {
                throw new Exception("Could not find a storage interface in the given module");
            }
        }
        public async Task IntegrationTestGetRegion_WithInvalidRegionId()
        {
            // Arrange
            RegionRepository repository     = new RegionRepository(DevelopmentStorageAccountConnectionString, String.Empty);
            Guid             dummySessionId = new Guid("74720766-452A-40AD-8A61-FEF07E8573C9");
            Guid             dummyRegionId  = new Guid("DE167712-0CE6-455C-83EA-CB2A6936F1BE");

            TableClient.SetupSessionDataTable(dummySessionId);

            // Act
            IRegionData regionData = await repository.GetRegion(dummySessionId, dummyRegionId);

            // Assert
            Assert.IsNull(regionData);
        }
Пример #23
0
        public async Task <Guid> PostRedeployTroops(Guid sessionId, Guid regionId, uint numberOfTroops, Guid targetRegionId)
        {
            IRegionData sourceRegion = await RegionRepository.GetRegionOrThrow(sessionId, regionId)
                                       .IsRegionOwnerOrThrow(User.Identity.GetUserId());

            ISession session = await SessionRepository.GetSessionOrThrow(sourceRegion)
                               .IsUserIdJoinedOrThrow(NationRepository, User.Identity.GetUserId())
                               .IsPhaseTypeOrThrow(SessionPhase.Redeployment);

            IRegionData targetRegion = await RegionRepository.GetRegionOrThrow(session.GameId, targetRegionId)
                                       .IsRegionOwnerOrThrow(User.Identity.GetUserId())
                                       .IsRegionConnectedOrThrow(sourceRegion.RegionId);

            INationData nation = await NationRepository.GetNation(sessionId, User.Identity.GetUserId());

            if (sourceRegion.TroopCount <= numberOfTroops)
            {
                throw new HttpResponseException(new HttpResponseMessage {
                    StatusCode = HttpStatusCode.BadRequest, ReasonPhrase = "You do not have that many troops available to redeploy"
                });
            }
            else if (numberOfTroops <= 0)
            {
                throw new HttpResponseException(new HttpResponseMessage {
                    StatusCode = HttpStatusCode.BadRequest, ReasonPhrase = "You can not redeploy less than 1 troop"
                });
            }
            else if (nation.CompletedPhase == session.PhaseId)
            {
                throw new HttpResponseException(new HttpResponseMessage {
                    StatusCode = HttpStatusCode.Conflict, ReasonPhrase = "You may only issue 1 redeployment"
                });
            }
            else
            {
                Guid redeployOp = await CommandQueue.Redeploy(session.GameId, session.PhaseId, nation.CurrentEtag, sourceRegion.RegionId, targetRegion.RegionId, numberOfTroops);

                try
                {
                    await NationRepository.MarkPlayerCompletedPhase(sessionId, User.Identity.GetUserId(), session.PhaseId);
                }
                catch (ConcurrencyException)
                {
                    // The host has moved onto the next phase while we were waiting. No further action required.
                }
                return(redeployOp);
            }
        }
Пример #24
0
        public HypergridLinker(IConfigSource config, GridService gridService, IRegionData db)
        {
            m_log.DebugFormat("[HYPERGRID LINKER]: Starting with db {0}", db.GetType());

            m_Database    = db;
            m_GridService = gridService;

            IConfig gridConfig = config.Configs["GridService"];

            if (gridConfig != null)
            {
                string assetService = gridConfig.GetString("AssetService", string.Empty);

                Object[] args = new Object[] { config };

                if (assetService != string.Empty)
                {
                    m_AssetService = ServerUtils.LoadPlugin <IAssetService>(assetService, args);
                }

                string scope = gridConfig.GetString("ScopeID", string.Empty);
                if (scope != string.Empty)
                {
                    UUID.TryParse(scope, out m_ScopeID);
                }

                m_Check4096 = gridConfig.GetBoolean("Check4096", true);

                m_GatekeeperConnector = new GatekeeperServiceConnector(m_AssetService);

                m_log.DebugFormat("[HYPERGRID LINKER]: Loaded all services...");
            }

            if (MainConsole.Instance != null)
            {
                MainConsole.Instance.Commands.AddCommand("hypergrid", false, "link-region",
                                                         "link-region <Xloc> <Yloc> <HostName>:<HttpPort>[:<RemoteRegionName>] <cr>",
                                                         "Link a hypergrid region", RunCommand);
                MainConsole.Instance.Commands.AddCommand("hypergrid", false, "unlink-region",
                                                         "unlink-region <local name> or <HostName>:<HttpPort> <cr>",
                                                         "Unlink a hypergrid region", RunCommand);
                MainConsole.Instance.Commands.AddCommand("hypergrid", false, "link-mapping", "link-mapping [<x> <y>] <cr>",
                                                         "Set local coordinate to map HG regions to", RunCommand);
                MainConsole.Instance.Commands.AddCommand("hypergrid", false, "show hyperlinks", "show hyperlinks <cr>",
                                                         "List the HG regions", HandleShow);
            }
        }
        public uint GetNumberOfParcelsByRegion(UUID RegionID, UUID scopeID, UUID owner, ParcelFlags flags, ParcelCategory category)
        {
            IRegionData regiondata = DataManager.DataManager.RequestPlugin <IRegionData>();

            if (regiondata != null)
            {
                GridRegion region = regiondata.Get(RegionID, scopeID);
                if (region != null)
                {
                    QueryFilter filter = GetParcelsByRegionWhereClause(RegionID, scopeID, owner, flags, category);
                    return(uint.Parse(GD.Query(new string[1] {
                        "COUNT(ParcelID)"
                    }, "searchparcel", filter, null, null, null)[0]));
                }
            }
            return(0);
        }
        public uint GetNumberOfParcelsWithNameByRegion(UUID RegionID, UUID ScopeID, string name)
        {
            IRegionData regiondata = DataManager.DataManager.RequestPlugin <IRegionData>();

            if (regiondata != null)
            {
                GridRegion region = regiondata.Get(RegionID, ScopeID);
                if (region != null)
                {
                    QueryFilter filter = new QueryFilter();
                    filter.andFilters["RegionID"] = RegionID;
                    filter.andFilters["Name"]     = name;

                    return(uint.Parse(GD.Query(new string[1] {
                        "COUNT(ParcelID)"
                    }, "searchparcel", filter, null, null, null)[0]));
                }
            }
            return(0);
        }
Пример #27
0
        public GridServiceBase(IConfigSource config)
            : base(config)
        {
            string dllName = String.Empty;
            string connString = String.Empty;
            string realm = "regions";

            //
            // Try reading the [DatabaseService] section, if it exists
            //
            IConfig dbConfig = config.Configs["DatabaseService"];
            if (dbConfig != null)
            {
                if (dllName == String.Empty)
                    dllName = dbConfig.GetString("StorageProvider", String.Empty);
                if (connString == String.Empty)
                    connString = dbConfig.GetString("ConnectionString", String.Empty);
            }

            //
            // [GridService] section overrides [DatabaseService], if it exists
            //
            IConfig gridConfig = config.Configs["GridService"];
            if (gridConfig != null)
            {
                dllName = gridConfig.GetString("StorageProvider", dllName);
                connString = gridConfig.GetString("ConnectionString", connString);
                realm = gridConfig.GetString("Realm", realm);
            }
            
            //
            // We tried, but this doesn't exist. We can't proceed.
            //
            if (dllName.Equals(String.Empty))
                throw new Exception("No StorageProvider configured");

            m_Database = LoadPlugin<IRegionData>(dllName, new Object[] { connString, realm });
            if (m_Database == null)
                throw new Exception("Could not find a storage interface in the given module");

        }
Пример #28
0
        public async Task <Guid> PostAttack(Guid sessionId, Guid regionId, uint numberOfTroops, Guid targetRegionId)
        {
            IRegionData sourceRegion = await RegionRepository.GetRegionOrThrow(sessionId, regionId)
                                       .IsRegionOwnerOrThrow(User.Identity.GetUserId());

            ISession session = await SessionRepository.GetSessionOrThrow(sourceRegion)
                               .IsUserIdJoinedOrThrow(NationRepository, User.Identity.GetUserId())
                               .IsPhaseTypeOrThrow(SessionPhase.CombatOrders);

            IRegionData targetRegion = await RegionRepository.GetRegionOrThrow(session.GameId, targetRegionId)
                                       .IsNotRegionOwnerOrThrow(User.Identity.GetUserId())
                                       .IsRegionConnectedOrThrow(sourceRegion.RegionId);

            if (sourceRegion.TroopCount <= (sourceRegion.TroopsCommittedToPhase + numberOfTroops))
            {
                throw new HttpResponseException(new HttpResponseMessage {
                    StatusCode = HttpStatusCode.BadRequest, ReasonPhrase = "You do not have that many troops available to attack with"
                });
            }
            else if (numberOfTroops <= 0)
            {
                throw new HttpResponseException(new HttpResponseMessage {
                    StatusCode = HttpStatusCode.BadRequest, ReasonPhrase = "You can not attack with less than 1 troop"
                });
            }
            else
            {
                Guid orderGuid;
                using (IBatchOperationHandle batchOperation = SessionRepository.StartBatchOperation(session.GameId))
                {
                    var queueAttackTask = CommandQueue.OrderAttack(batchOperation, session.GameId, session.PhaseId, sourceRegion.RegionId, sourceRegion.CurrentEtag, targetRegion.RegionId, numberOfTroops);
                    RegionRepository.CommitTroopsToPhase(batchOperation, sourceRegion, numberOfTroops);
                    await batchOperation.CommitBatch();

                    orderGuid = await queueAttackTask;
                }

                return(orderGuid);
            }
        }
        public async Task IntegrationTestGetRegion()
        {
            // Arrange
            RegionRepository repository       = new RegionRepository(DevelopmentStorageAccountConnectionString, String.Empty);
            Guid             dummySessionId   = new Guid("74720766-452A-40AD-8A61-FEF07E8573C9");
            Guid             dummyRegionId    = new Guid("89B6BDF0-83B7-42F1-B216-7DFFB8D11EA2");
            Guid             dummyContinentId = new Guid("DE167712-0CE6-455C-83EA-CB2A6936F1BE");
            List <Guid>      dummyConnections = new List <Guid> {
                new Guid("0533203F-13F2-4863-B528-17F53D279E19"), new Guid("4A9779D0-0727-4AD9-AD66-17AE9AF9BE02")
            };

            TableClient.SetupSessionDataTable(dummySessionId);
            using (IBatchOperationHandle batchOperation = new BatchOperationHandle(SessionRepository.GetTableForSessionData(TableClient, dummySessionId)))
            {
                repository.CreateRegion(batchOperation, dummySessionId, dummyRegionId, dummyContinentId, "DummyRegion", dummyConnections, 0);
            }

            // Act
            IRegionData regionData = await repository.GetRegion(dummySessionId, dummyRegionId);

            // Assert
            Assert.IsNotNull(regionData);
            Assert.AreEqual(dummySessionId, regionData.SessionId);
        }
        public HypergridLinker(IConfigSource config, GridService gridService, IRegionData db)
        {
            IConfig gridConfig = config.Configs["GridService"];

            if (gridConfig == null)
            {
                return;
            }

            if (!gridConfig.GetBoolean("HypergridLinker", false))
            {
                return;
            }

            m_Database    = db;
            m_GridService = gridService;
            m_log.DebugFormat("[HYPERGRID LINKER]: Starting with db {0}", db.GetType());

            string assetService = gridConfig.GetString("AssetService", string.Empty);

            Object[] args = new Object[] { config };

            if (assetService != string.Empty)
            {
                m_AssetService = ServerUtils.LoadPlugin <IAssetService>(assetService, args);
            }

            string scope = gridConfig.GetString("ScopeID", string.Empty);

            if (scope != string.Empty)
            {
                UUID.TryParse(scope, out m_ScopeID);
            }

//                m_Check4096 = gridConfig.GetBoolean("Check4096", true);

            m_MapTileDirectory = gridConfig.GetString("MapTileDirectory", "maptiles");

            m_ThisGatekeeper = Util.GetConfigVarFromSections <string>(config, "GatekeeperURI",
                                                                      new string[] { "Startup", "Hypergrid", "GridService" }, String.Empty);
            // Legacy. Remove soon!
            m_ThisGatekeeper = gridConfig.GetString("Gatekeeper", m_ThisGatekeeper);
            try
            {
                m_ThisGatekeeperURI = new Uri(m_ThisGatekeeper);
            }
            catch
            {
                m_log.WarnFormat("[HYPERGRID LINKER]: Malformed URL in [GridService], variable Gatekeeper = {0}", m_ThisGatekeeper);
            }

            m_ThisGatekeeper = m_ThisGatekeeperURI.AbsoluteUri;
            if (m_ThisGatekeeperURI.Port == 80)
            {
                m_ThisGatekeeper = m_ThisGatekeeper.Trim(new char[] { '/', ' ' }) + ":80/";
            }
            else if (m_ThisGatekeeperURI.Port == 443)
            {
                m_ThisGatekeeper = m_ThisGatekeeper.Trim(new char[] { '/', ' ' }) + ":443/";
            }

            m_GatekeeperConnector = new GatekeeperServiceConnector(m_AssetService);

            m_log.Debug("[HYPERGRID LINKER]: Loaded all services...");

            if (!string.IsNullOrEmpty(m_MapTileDirectory))
            {
                try
                {
                    Directory.CreateDirectory(m_MapTileDirectory);
                }
                catch (Exception e)
                {
                    m_log.WarnFormat("[HYPERGRID LINKER]: Could not create map tile storage directory {0}: {1}", m_MapTileDirectory, e);
                    m_MapTileDirectory = string.Empty;
                }
            }

            if (MainConsole.Instance != null)
            {
                MainConsole.Instance.Commands.AddCommand("Hypergrid", false, "link-region",
                                                         "link-region <Xloc> <Yloc> <ServerURI> [<RemoteRegionName>]",
                                                         "Link a HyperGrid Region. Examples for <ServerURI>: http://grid.net:8002/ or http://example.org/path/foo.php", RunCommand);
                MainConsole.Instance.Commands.AddCommand("Hypergrid", false, "link-region",
                                                         "link-region <Xloc> <Yloc> <RegionIP> <RegionPort> [<RemoteRegionName>]",
                                                         "Link a hypergrid region (deprecated)", RunCommand);
                MainConsole.Instance.Commands.AddCommand("Hypergrid", false, "unlink-region",
                                                         "unlink-region <local name>",
                                                         "Unlink a hypergrid region", RunCommand);
                MainConsole.Instance.Commands.AddCommand("Hypergrid", false, "link-mapping", "link-mapping [<x> <y>]",
                                                         "Set local coordinate to map HG regions to", RunCommand);
                MainConsole.Instance.Commands.AddCommand("Hypergrid", false, "show hyperlinks", "show hyperlinks",
                                                         "List the HG regions", HandleShow);
            }
        }
        public EventData CreateEvent(UUID creator, UUID regionID, UUID parcelID, DateTime date, uint cover, EventFlags maturity, uint flags, uint duration, Vector3 localPos, string name, string description, string category)
        {
            IRegionData             regiondata = Aurora.DataManager.DataManager.RequestPlugin <IRegionData>();
            IParcelServiceConnector parceldata = Aurora.DataManager.DataManager.RequestPlugin <IParcelServiceConnector>();

            if (regiondata == null || parceldata == null)
            {
                return(null);
            }

            GridRegion region = regiondata.Get(regionID, UUID.Zero);

            if (region == null)
            {
                return(null);
            }
            if (parcelID != UUID.Zero)
            {
                LandData parcel = parceldata.GetLandData(region.RegionID, parcelID);
                if (parcel == null)
                {
                    return(null);
                }
            }


            EventData eventData = new EventData();

            eventData.eventID    = GetMaxEventID() + 1;
            eventData.creator    = creator.ToString();
            eventData.simName    = region.RegionName;
            eventData.date       = date.ToString(new DateTimeFormatInfo());
            eventData.dateUTC    = (uint)Util.ToUnixTime(date);
            eventData.cover      = eventData.amount = cover;
            eventData.maturity   = (int)maturity;
            eventData.eventFlags = flags | (uint)maturity;
            eventData.duration   = duration;
            eventData.globalPos  = new Vector3(
                region.RegionLocX + localPos.X,
                region.RegionLocY + localPos.Y,
                region.RegionLocZ + localPos.Z
                );
            eventData.name        = name;
            eventData.description = description;
            eventData.category    = category;

            GD.Insert("asevents", new string[] {
                "EID",
                "creator",
                "region",
                "parcel",
                "date",
                "cover",
                "maturity",
                "flags",
                "duration",
                "localPosX",
                "localPosY",
                "localPosZ",
                "name",
                "description",
                "category"
            }, new object[] {
                eventData.eventID,
                creator.ToString(),
                regionID.ToString(),
                parcelID.ToString(),
                date.ToString("s"),
                eventData.cover,
                (uint)maturity,
                flags,
                duration,
                localPos.X,
                localPos.Y,
                localPos.Z,
                name,
                description,
                category
            });

            return(eventData);
        }
Пример #32
0
        public void Start(IConfigSource config, IRegistryCore registry)
        {
            m_AssetService = registry.RequestModuleInterface<IAssetService> ();
            m_GridService = registry.RequestModuleInterface<IGridService> ();
            m_GatekeeperConnector = new GatekeeperServiceConnector (m_AssetService);
            m_Database = Aurora.DataManager.DataManager.RequestPlugin<IRegionData> ();

            MainConsole.Instance.Debug ("[HYPERGRID LINKER]: Loaded all services...");
        }
Пример #33
0
        public HypergridLinker(IConfigSource config, GridService gridService, IRegionData db)
        {
            m_log.DebugFormat("[HYPERGRID LINKER]: Starting with db {0}", db.GetType());

            m_Database = db;
            m_GridService = gridService;

            IConfig gridConfig = config.Configs["GridService"];
            if (gridConfig != null)
            {
                string assetService = gridConfig.GetString("AssetService", string.Empty);

                Object[] args = new Object[] { config };

                if (assetService != string.Empty)
                    m_AssetService = ServerUtils.LoadPlugin<IAssetService>(assetService, args);

                string scope = gridConfig.GetString("ScopeID", string.Empty);
                if (scope != string.Empty)
                    UUID.TryParse(scope, out m_ScopeID);

                m_GatekeeperConnector = new GatekeeperServiceConnector(m_AssetService);

                m_log.DebugFormat("[HYPERGRID LINKER]: Loaded all services...");
            }

            if (MainConsole.Instance != null)
            {
                MainConsole.Instance.Commands.AddCommand("hypergrid", false, "link-region",
                    "link-region <Xloc> <Yloc> <HostName>:<HttpPort>[:<RemoteRegionName>] <cr>",
                    "Link a hypergrid region", RunCommand);
                MainConsole.Instance.Commands.AddCommand("hypergrid", false, "unlink-region",
                    "unlink-region <local name> or <HostName>:<HttpPort> <cr>",
                    "Unlink a hypergrid region", RunCommand);
                MainConsole.Instance.Commands.AddCommand("hypergrid", false, "link-mapping", "link-mapping [<x> <y>] <cr>",
                    "Set local coordinate to map HG regions to", RunCommand);
                MainConsole.Instance.Commands.AddCommand("hypergrid", false, "show hyperlinks", "show hyperlinks <cr>",
                    "List the HG regions", HandleShow);
            }
        }