Esempio n. 1
0
        public override void NotifyNeighborStatus(RegionInfo fromRegion)
        {
            SceneInterface fromScene;

            if (m_Scenes.TryGetValue(fromRegion.ID, out fromScene))
            {
                if ((fromRegion.Flags & RegionFlags.RegionOnline) != 0)
                {
                    m_NeighborLists.GetOrAddIfNotExists(fromRegion.ID, () => new NeighborList());
                    foreach (RegionInfo neighbor in NeighborRequester.GetNeighbors(fromScene.GridService, fromRegion))
                    {
                        SceneInterface scene;
                        if (m_Scenes.TryGetValue(neighbor.ID, out scene))
                        {
                            scene.NotifyNeighborOnline(fromRegion);
                        }
                    }
                }
                else
                {
                    NeighborList list;
                    if (m_NeighborLists.Remove(fromRegion.ID, out list))
                    {
                        foreach (UUID id in list.Keys)
                        {
                            SceneInterface scene;
                            if (m_Scenes.TryGetValue(id, out scene))
                            {
                                scene.NotifyNeighborOffline(fromRegion);
                            }
                        }
                    }
                }
            }
        }
Esempio n. 2
0
        private void IMSessionStarted(GroupInstantMessage im)
        {
            if (!m_GroupsService.Members.ContainsKey(im.FromAgent, im.ToGroup, im.FromAgent))
            {
                throw new Exception("Not a member");
            }
            GroupSession session = m_ActiveChats.GetOrAddIfNotExists(im.ToGroup.ID, () => new GroupSession(im.ToGroup));

            im.IMSessionID = session.SessionID;
            im.FromGroup   = im.ToGroup;
            try
            {
                foreach (GroupMember gm in m_GroupsService.Members[im.FromAgent, im.ToGroup])
                {
                    session.Participants.AddIfNotExists(gm.Principal);
                }
            }
            finally
            {
                m_ActiveSessions.RemoveIf(im.IMSessionID, (entry) => entry.Participants.Count == 0);
                m_ActiveChats.RemoveIf(im.ToGroup.ID, (entry) => entry.Participants.Count == 0);
            }

            DistributeMessage(session, im);
        }
Esempio n. 3
0
        public override Listener AddListen(int channel, string name, UUID id, string message, Func <UUID> getuuid, Func <UGI> getgroup, Func <Vector3> getpos, Func <UUID> getowner, Action <ListenEvent> send)
        {
            var li = new ListenerInfo(this, channel, name, id, message, getuuid, getgroup, getpos, getowner, send, false);

            ChannelInfo ci = m_Channels.GetOrAddIfNotExists(channel, () =>
            {
                var newci = new ChannelInfo(this);
                newci.Listeners.Add(li);
                return(newci);
            });

            /* check whether we had a fresh add of ChannelInfo */
            if (ci.Listeners.Contains(li))
            {
                return(li);
            }
            ci.Listeners.Add(li);
            return(li);
        }
Esempio n. 4
0
 public ObjectPartLocalizedInfo GetOrCreateLocalization(string culturename)
 {
     if (string.IsNullOrEmpty(culturename))
     {
         return(m_DefaultLocalization);
     }
     try
     {
         CultureInfo.CreateSpecificCulture(culturename);
     }
     catch
     {
         throw new ArgumentOutOfRangeException(nameof(culturename));
     }
     return(m_NamedLocalizations.GetOrAddIfNotExists(culturename, () => new ObjectPartLocalizedInfo(culturename, this, m_DefaultLocalization)));
 }
Esempio n. 5
0
        public static ScriptInstance Load(ObjectPart part, ObjectPartInventoryItem item, UGUI user, AssetData data, CultureInfo currentCulture, byte[] serializedState = null, Func <string, TextReader> openInclude = null)
        {
            return(m_CompilerLock.AcquireReaderLock(() =>
            {
                IScriptAssembly assembly = m_LoadedAssemblies.GetOrAddIfNotExists(data.ID, () =>
                {
                    using (var reader = new StreamReader(data.InputStream))
                    {
                        return CompilerRegistry.ScriptCompilers.Compile(AppDomain.CurrentDomain, user, data.ID, reader, currentCulture, openInclude);
                    }
                });

                ScriptInstance instance = assembly.Instantiate(part, item, serializedState);
                m_LoadedInstances.GetOrAddIfNotExists(data.ID, () => new RwLockedList <ScriptInstance>()).Add(instance);
                return instance;
            }));
        }
Esempio n. 6
0
        public Notecard this[UUID assetid]
        {
            get
            {
                Notecard v;
                if (m_Notecards.TryGetValue(assetid, out v))
                {
                    return(v);
                }
                AssetData asset = m_Scene.AssetService[assetid];
                if (asset.Type != AssetType.Notecard)
                {
                    throw new NotANotecardFormatException();
                }

                m_LastAccessed[assetid] = Environment.TickCount;
                return(m_Notecards.GetOrAddIfNotExists(assetid, () => new Notecard(asset)));
            }
        }
 public UUID GetOrCreateIMSession(UUID targetid) =>
 m_ScriptedIMSessions.GetOrAddIfNotExists(targetid, () => UUID.Random);