/// <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);
        }
Example #4
0
        /// <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);
        }
Example #5
0
        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);
        }