/// <summary> /// Add a new Caps Service for the given region if one does not already exist /// </summary> /// <param name="regionHandle"></param> protected void AddCapsServiceForRegion(ulong regionHandle, string CAPSBase, AgentCircuitData circuitData) { if (!m_RegionCapsServices.ContainsKey(regionHandle)) { //Now add this client to the region caps //Create if needed m_CapsService.AddCapsForRegion(regionHandle); IRegionCapsService regionCaps = m_CapsService.GetCapsForRegion(regionHandle); PerRegionClientCapsService regionClient = new PerRegionClientCapsService(); regionClient.Initialise(this, regionCaps, CAPSBase, circuitData); m_RegionCapsServices[regionHandle] = regionClient; //Now get and add them regionCaps.AddClientToRegion(regionClient); } }
/// <summary> /// Remove the CAPS for the given user in the given region /// </summary> /// <param name="regionHandle"></param> public void RemoveCAPS(UUID regionHandle) { if (!m_RegionCapsServices.ContainsKey(regionHandle)) { return; } //Remove the agent from the region caps IRegionCapsService regionCaps = m_CapsService.GetCapsForRegion(regionHandle); if (regionCaps != null) { regionCaps.RemoveClientFromRegion(m_RegionCapsServices[regionHandle]); } //Remove all the CAPS handlers m_RegionCapsServices[regionHandle].Close(); m_RegionCapsServices.Remove(regionHandle); }
protected OSDMap OnMessageReceived(OSDMap message) { //If it is an async message request, make sure that the request is valid and check it if (message["Method"] == "AsyncMessageRequest") { try { ICapsService service = m_registry.RequestModuleInterface <ICapsService>(); OSDMap response = new OSDMap(); OSDMap mapresponse = new OSDMap(); if (message.ContainsKey("RegionHandles")) { OSDArray handles = (OSDArray)message["RegionHandles"]; for (int i = 0; i < handles.Count; i += 2) { ulong regionHandle = handles[i].AsULong(); IRegionCapsService region = service.GetCapsForRegion(regionHandle); if (region != null) { bool verified = (region.Region.SessionID == handles[i + 1].AsUUID()); if (verified) { if (m_regionMessages.ContainsKey(regionHandle)) { //Get the array, then remove it OSDArray array = m_regionMessages[regionHandle]; m_regionMessages.Remove(regionHandle); foreach (var test in m_allRegionMessages.Where(u => !u.RegionsPreviouslyPosted.Contains(regionHandle))) { array.Add(test.Message); test.RegionsPreviouslyPosted.Add(regionHandle); } mapresponse[regionHandle.ToString()] = array; } } } } } response["Messages"] = mapresponse; return(response); } catch { } } return(null); }
/// <summary> /// Get all agent locations for the given region /// </summary> /// <param name = "X"></param> /// <param name = "Y"></param> /// <param name = "regionHandle"></param> /// <returns></returns> private List <mapItemReply> GetItems(int X, int Y, ulong regionHandle) { GridRegion region = GetRegionByPosition(UUID.Zero, X, Y); //if the region is down or doesn't exist, don't check it if (region == null || region.Access == (byte)SimAccess.Down || region.Access == (byte)SimAccess.NonExistent) { return(new List <mapItemReply>()); } ICapsService capsService = m_registryCore.RequestModuleInterface <ICapsService>(); if (capsService == null) { return(new List <mapItemReply>()); } IRegionCapsService regionCaps = capsService.GetCapsForRegion(regionHandle); if (regionCaps == null) { return(new List <mapItemReply>()); } Dictionary <Vector3, int> Positions = new Dictionary <Vector3, int>(); //Get a list of all the clients in the region and add them foreach (IRegionClientCapsService clientCaps in regionCaps.GetClients()) { //Only root agents! if (clientCaps.RootAgent) { //Normalize the positions to 5 meter blocks so that agents stack instead of cover up each other Vector3 position = new Vector3(NormalizePosition(clientCaps.LastPosition.X), NormalizePosition(clientCaps.LastPosition.Y), 0); int Number = 0; //Find the number of agents currently at this position if (!Positions.TryGetValue(position, out Number)) { Number = 0; } Number++; Positions[position] = Number; } } //Build the mapItemReply blocks #if (!ISWIN) List <mapItemReply> mapItems = new List <mapItemReply>(); foreach (KeyValuePair <Vector3, int> kvp in Positions) { mapItems.Add(new mapItemReply { x = (uint) (region.RegionLocX + kvp.Key.X), y = (uint) (region.RegionLocY + kvp.Key.Y), id = UUID.Zero, name = Util.Md5Hash(region.RegionName + Environment.TickCount. ToString()), Extra = kvp.Value, Extra2 = 0 }); } #else List <mapItemReply> mapItems = Positions.Select(position => new mapItemReply { x = (uint) (region.RegionLocX + position.Key.X), y = (uint) (region.RegionLocY + position.Key.Y), id = UUID.Zero, name = Util.Md5Hash(region.RegionName + Environment.TickCount. ToString()), Extra = position.Value, Extra2 = 0 }).ToList(); #endif //If there are no agents, we send one blank one to the client if (mapItems.Count == 0) { mapItemReply mapitem = new mapItemReply { x = (uint)(region.RegionLocX + 1), y = (uint)(region.RegionLocY + 1), id = UUID.Zero, name = Util.Md5Hash(region.RegionName + Environment.TickCount.ToString()), Extra = 0, Extra2 = 0 }; mapItems.Add(mapitem); } return(mapItems); }
public Dictionary <string, object> Fill(WebInterface webInterface, string filename, OSHttpRequest httpRequest, OSHttpResponse httpResponse, Dictionary <string, object> requestParameters, ITranslator translator) { var vars = new Dictionary <string, object>(); if (httpRequest.Query.ContainsKey("regionid")) { GridRegion region = webInterface.Registry.RequestModuleInterface <IGridService>().GetRegionByUUID(null, UUID.Parse(httpRequest.Query["regionid"].ToString())); IEstateConnector estateConnector = Aurora.DataManager.DataManager.RequestPlugin <IEstateConnector>(); EstateSettings estate = estateConnector.GetEstateSettings(region.RegionID); vars.Add("RegionName", region.RegionName); vars.Add("OwnerUUID", estate.EstateOwner); vars.Add("OwnerName", webInterface.Registry.RequestModuleInterface <IUserAccountService>(). GetUserAccount(null, estate.EstateOwner).Name); vars.Add("RegionLocX", region.RegionLocX / Constants.RegionSize); vars.Add("RegionLocY", region.RegionLocY / Constants.RegionSize); vars.Add("RegionSizeX", region.RegionSizeX); vars.Add("RegionSizeY", region.RegionSizeY); vars.Add("RegionType", region.RegionType); vars.Add("RegionOnline", (region.Flags & (int)Aurora.Framework.RegionFlags.RegionOnline) == (int)Aurora.Framework.RegionFlags.RegionOnline ? translator.GetTranslatedString("Online") : translator.GetTranslatedString("Offline")); ICapsService capsService = webInterface.Registry.RequestModuleInterface <ICapsService>(); IRegionCapsService regionCaps = capsService != null?capsService.GetCapsForRegion(region.RegionHandle) : null; if (regionCaps != null) { vars.Add("NumberOfUsersInRegion", regionCaps.GetClients().Count); List <Dictionary <string, object> > users = new List <Dictionary <string, object> >(); foreach (var client in regionCaps.GetClients()) { Dictionary <string, object> user = new Dictionary <string, object>(); user.Add("UserNameText", translator.GetTranslatedString("UserNameText")); user.Add("UserUUID", client.AgentID); user.Add("UserName", client.ClientCaps.AccountInfo.Name); users.Add(user); } vars.Add("UsersInRegion", users); } else { vars.Add("NumberOfUsersInRegion", 0); vars.Add("UsersInRegion", new List <Dictionary <string, object> >()); } IDirectoryServiceConnector directoryConnector = Aurora.DataManager.DataManager.RequestPlugin <IDirectoryServiceConnector>(); if (directoryConnector != null) { List <LandData> data = directoryConnector.GetParcelsByRegion(0, 10, region.RegionID, UUID.Zero, ParcelFlags.None, ParcelCategory.Any); List <Dictionary <string, object> > parcels = new List <Dictionary <string, object> >(); foreach (var p in data) { Dictionary <string, object> parcel = new Dictionary <string, object>(); parcel.Add("ParcelNameText", translator.GetTranslatedString("ParcelNameText")); parcel.Add("ParcelOwnerText", translator.GetTranslatedString("ParcelOwnerText")); parcel.Add("ParcelUUID", p.InfoUUID); parcel.Add("ParcelName", p.Name); parcel.Add("ParcelOwnerUUID", p.OwnerID); IUserAccountService accountService = webInterface.Registry.RequestModuleInterface <IUserAccountService>(); if (accountService != null) { var account = accountService.GetUserAccount(null, p.OwnerID); if (account == null) { parcel.Add("ParcelOwnerName", translator.GetTranslatedString("NoAccountFound")); } else { parcel.Add("ParcelOwnerName", account.Name); } } parcels.Add(parcel); } vars.Add("ParcelInRegion", parcels); vars.Add("NumberOfParcelsInRegion", parcels.Count); } IWebHttpTextureService webTextureService = webInterface.Registry. RequestModuleInterface <IWebHttpTextureService>(); if (webTextureService != null && region.TerrainMapImage != UUID.Zero) { vars.Add("RegionImageURL", webTextureService.GetTextureURL(region.TerrainMapImage)); } else { vars.Add("RegionImageURL", "images/icons/no_picture.jpg"); } // Menu Region vars.Add("MenuRegionTitle", translator.GetTranslatedString("MenuRegionTitle")); vars.Add("MenuParcelTitle", translator.GetTranslatedString("MenuParcelTitle")); vars.Add("MenuOwnerTitle", translator.GetTranslatedString("MenuOwnerTitle")); vars.Add("RegionInformationText", translator.GetTranslatedString("RegionInformationText")); vars.Add("OwnerNameText", translator.GetTranslatedString("OwnerNameText")); vars.Add("RegionLocationText", translator.GetTranslatedString("RegionLocationText")); vars.Add("RegionSizeText", translator.GetTranslatedString("RegionSizeText")); vars.Add("RegionNameText", translator.GetTranslatedString("RegionNameText")); vars.Add("RegionTypeText", translator.GetTranslatedString("RegionTypeText")); vars.Add("RegionInfoText", translator.GetTranslatedString("RegionInfoText")); vars.Add("RegionOnlineText", translator.GetTranslatedString("RegionOnlineText")); vars.Add("NumberOfUsersInRegionText", translator.GetTranslatedString("NumberOfUsersInRegionText")); vars.Add("ParcelsInRegionText", translator.GetTranslatedString("ParcelsInRegionText")); // Style Switcher vars.Add("styles1", translator.GetTranslatedString("styles1")); vars.Add("styles2", translator.GetTranslatedString("styles2")); vars.Add("styles3", translator.GetTranslatedString("styles3")); vars.Add("styles4", translator.GetTranslatedString("styles4")); vars.Add("styles5", translator.GetTranslatedString("styles5")); vars.Add("StyleSwitcherStylesText", translator.GetTranslatedString("StyleSwitcherStylesText")); vars.Add("StyleSwitcherLanguagesText", translator.GetTranslatedString("StyleSwitcherLanguagesText")); vars.Add("StyleSwitcherChoiceText", translator.GetTranslatedString("StyleSwitcherChoiceText")); // Language Switcher vars.Add("en", translator.GetTranslatedString("en")); vars.Add("fr", translator.GetTranslatedString("fr")); vars.Add("de", translator.GetTranslatedString("de")); vars.Add("it", translator.GetTranslatedString("it")); vars.Add("es", translator.GetTranslatedString("es")); } return(vars); }