/// <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, uint port) { if (m_clientEndPoint == null && circuitData.ClientIPEndPoint != null) { m_clientEndPoint = circuitData.ClientIPEndPoint; } if (m_clientEndPoint == null) { ///Should only happen in grid HG/OpenSim situtations IPAddress test = null; if (IPAddress.TryParse(circuitData.IPAddress, out test)) { m_clientEndPoint = new IPEndPoint(test, 0); //Dunno the port, so leave it alone } } 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, port); m_RegionCapsServices[regionHandle] = regionClient; //Now get and add them regionCaps.AddClientToRegion(regionClient); } }
public void Initialise(IClientCapsService clientCapsService, IRegionCapsService regionCapsService, string capsBase, AgentCircuitData circuitData) { m_clientCapsService = clientCapsService; m_regionCapsService = regionCapsService; m_circuitData = circuitData; AddSEEDCap(capsBase); AddCAPS(); }
public void LogOutAllAgentsForRegion(ulong requestingRegion) { IRegionCapsService fullregionCaps = m_registry.RequestModuleInterface <ICapsService>().GetCapsForRegion(requestingRegion); if (fullregionCaps != null) { //Now kill the region in the caps Service, DO THIS FIRST, otherwise you get an infinite loop later in the IClientCapsService when it tries to remove itself from the IRegionCapsService m_registry.RequestModuleInterface <ICapsService>().RemoveCapsForRegion(requestingRegion); //Close all regions and remove them from the region fullregionCaps.Close(); } }
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); }
public void Initialise(IClientCapsService clientCapsService, IRegionCapsService regionCapsService, string capsBase, AgentCircuitData circuitData, uint port) { m_clientCapsService = clientCapsService; m_regionCapsService = regionCapsService; m_circuitData = circuitData; if (port != 0)//Someone requested a non standard port, probably for OpenSim { ISimulationBase simBase = Registry.RequestModuleInterface <ISimulationBase> (); Server = simBase.GetHttpServer(port); } AddSEEDCap(capsBase); AddCAPS(); }
/// <summary> /// Add a new Caps Service for the given region if one does not already exist /// </summary> /// <param name="regionID"></param> /// <param name="capsBase"></param> /// <param name="circuitData"></param> /// <param name="port"></param> protected void AddCapsServiceForRegion(UUID regionID, string capsBase, AgentCircuitData circuitData, uint port) { if (!m_RegionCapsServices.ContainsKey(regionID)) { //Now add this client to the region caps //Create if needed m_CapsService.AddCapsForRegion(regionID); IRegionCapsService regionCaps = m_CapsService.GetCapsForRegion(regionID); PerRegionClientCapsService regionClient = new PerRegionClientCapsService(); regionClient.Initialize(this, regionCaps, capsBase, circuitData, port); m_RegionCapsServices [regionID] = regionClient; //Now get and add them regionCaps.AddClientToRegion(regionClient); } }
/// <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); } }
public bool EnableChildAgentsForRegion(GridRegion requestingRegion) { int count = 0; bool informed = true; INeighborService neighborService = m_registry.RequestModuleInterface <INeighborService>(); if (neighborService != null) { List <GridRegion> neighbors = neighborService.GetNeighbors(requestingRegion, 0); foreach (GridRegion neighbor in neighbors) { //m_log.WarnFormat("--> Going to send child agent to {0}, new agent {1}", neighbour.RegionName, newAgent); IRegionCapsService regionCaps = m_registry.RequestModuleInterface <ICapsService>().GetCapsForRegion(neighbor.RegionHandle); if (regionCaps == null) //If there isn't a region caps, there isn't an agent in this sim { continue; } List <UUID> usersInformed = new List <UUID>(); foreach (IRegionClientCapsService regionClientCaps in regionCaps.GetClients()) { if (usersInformed.Contains(regionClientCaps.AgentID)) //Only inform agents once { continue; } AgentCircuitData regionCircuitData = regionClientCaps.CircuitData.Copy(); regionCircuitData.child = true; //Fix child agent status string reason; //Tell the region about it if (!InformClientOfNeighbor(regionClientCaps.AgentID, requestingRegion.RegionHandle, regionCircuitData, requestingRegion, (uint)TeleportFlags.Default, null, out reason)) { informed = false; } else { usersInformed.Add(regionClientCaps.AgentID); } } count++; } } return(informed); }
/// <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); }
public void Initialise(IClientCapsService clientCapsService, IRegionCapsService regionCapsService, string capsBase, AgentCircuitData circuitData, uint port) { m_clientCapsService = clientCapsService; m_regionCapsService = regionCapsService; m_circuitData = circuitData; if (port != 0)//Someone requested a non standard port, probably for OpenSim { ISimulationBase simBase = Registry.RequestModuleInterface<ISimulationBase> (); Server = simBase.GetHttpServer (port); } AddSEEDCap(capsBase); AddCAPS(); }
/// <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); }