Inheritance: IWorldCommListenerInfo
Beispiel #1
0
        public void AddFromData(uint localID, UUID itemID, UUID hostID,
                                Object[] data)
        {
            int idx = 0;

            Object[] item = new Object[6];

            while (idx < data.Length)
            {
                Array.Copy(data, idx, item, 0, 6);

                ListenerInfo info =
                    ListenerInfo.FromData(localID, itemID, hostID, item);

                lock (m_listeners)
                {
                    if (!m_listeners.ContainsKey((int)item[2]))
                    {
                        m_listeners.Add((int)item[2], new List <ListenerInfo>());
                    }
                    m_listeners[(int)item[2]].Add(info);
                }

                idx += 6;
            }
        }
Beispiel #2
0
 protected void QueueMessage(ListenerInfo li)
 {
     lock (m_pending.SyncRoot)
     {
         m_pending.Enqueue(li);
     }
 }
Beispiel #3
0
        public void AddFromData(uint localID, UUID itemID, UUID hostID,
                                Object[] data)
        {
            int idx = 0;

            Object[] item           = new Object[6];
            int      dataItemLength = 6;

            while (idx < data.Length)
            {
                dataItemLength = (idx + 7 == data.Length || (idx + 7 < data.Length && data[idx + 7] is bool)) ? 7 : 6;
                item           = new Object[dataItemLength];
                Array.Copy(data, idx, item, 0, dataItemLength);

                ListenerInfo info =
                    ListenerInfo.FromData(localID, itemID, hostID, item);

                m_ListenerRwLock.AcquireWriterLock(-1);
                try
                {
                    if (!m_listeners.ContainsKey((int)item[2]))
                    {
                        m_listeners.Add((int)item[2],
                                        new List <ListenerInfo>());
                    }
                    m_listeners[(int)item[2]].Add(info);
                }
                finally
                {
                    m_ListenerRwLock.ReleaseWriterLock();
                }

                idx += dataItemLength;
            }
        }
        public void AddFromData(uint localID, UUID itemID, UUID hostID,
                                Object[] data)
        {
            int idx = 0;

            Object[] item           = new Object[6];
            int      dataItemLength = 6;

            while (idx < data.Length)
            {
                dataItemLength = (idx + 7 == data.Length || (idx + 7 < data.Length && data[idx + 7] is bool)) ? 7 : 6;
                item           = new Object[dataItemLength];
                Array.Copy(data, idx, item, 0, dataItemLength);

                ListenerInfo info =
                    ListenerInfo.FromData(localID, itemID, hostID, item);

                lock (mainLock)
                {
                    if (!m_listenersByChannel.ContainsKey((int)item[2]))
                    {
                        m_listenersByChannel.Add((int)item[2], new List <ListenerInfo>());
                    }
                    m_listenersByChannel[(int)item[2]].Add(info);
                }

                idx += dataItemLength;
            }
        }
Beispiel #5
0
 protected void QueueMessage(ListenerInfo li)
 {
     //Make sure that the cmd handler thread is running
     m_scriptModule.PokeThreads();
     lock (m_pending.SyncRoot)
     {
         m_pending.Enqueue(li);
     }
 }
Beispiel #6
0
        public static ListenerInfo FromData(uint localID, UUID ItemID, UUID hostID, Object[] data)
        {
            ListenerInfo linfo = new ListenerInfo((int)data[1], localID,
                                                  ItemID, hostID, (int)data[2], (string)data[3],
                                                  (UUID)data[4], (string)data[5]);

            linfo.m_active = (bool)data[0];

            return(linfo);
        }
Beispiel #7
0
        /// <summary>
        /// Pop the first availlable listen event from the queue
        /// </summary>
        /// <returns>ListenerInfo with filter filled in</returns>
        public IWorldCommListenerInfo GetNextMessage()
        {
            ListenerInfo li = null;

            lock (m_pending.SyncRoot)
            {
                li = (ListenerInfo)m_pending.Dequeue();
            }

            return(li);
        }
Beispiel #8
0
        public void AddFromData(UUID itemID, UUID hostID,
                                OSD data)
        {
            OSDMap save = (OSDMap)data;

            foreach (KeyValuePair <string, OSD> kvp in save)
            {
                OSDMap       item = (OSDMap)kvp.Value;
                ListenerInfo info = ListenerInfo.FromData(itemID, hostID, item);
                AddListener(info.GetItemID(), info.GetHostID(), info.GetChannel(), info.GetName(), info.GetID(), info.GetMessage());
            }
        }
        public static ListenerInfo FromData(uint localID, UUID ItemID,
                                            UUID hostID, Object[] data)
        {
            ListenerInfo linfo = new ListenerInfo((int)data[1], localID,
                                                  ItemID, hostID, (int)data[2], (string)data[3],
                                                  (UUID)data[4], (string)data[5]);

            linfo.m_active = (bool)data[0];
            if (data.Length >= 7)
            {
                linfo.RegexBitfield = (int)data[6];
            }

            return(linfo);
        }
Beispiel #10
0
        public int AddListener(uint localID, UUID itemID, UUID hostID,
                               int channel, string name, UUID id, string msg,
                               int regexBitfield)
        {
            // do we already have a match on this particular filter event?
            List <ListenerInfo> coll = GetListeners(itemID, channel, name, id,
                                                    msg);

            if (coll.Count > 0)
            {
                // special case, called with same filter settings, return same
                // handle (2008-05-02, tested on 1.21.1 server, still holds)
                return(coll[0].GetHandle());
            }

            if (m_curlisteners < m_maxlisteners)
            {
                m_ListenerRwLock.AcquireWriterLock(-1);
                try
                {
                    int newHandle = GetNewHandle(itemID);

                    if (newHandle > 0)
                    {
                        ListenerInfo li = new ListenerInfo(newHandle, localID,
                                                           itemID, hostID, channel, name, id, msg,
                                                           regexBitfield);

                        List <ListenerInfo> listeners;
                        if (!m_listeners.TryGetValue(
                                channel, out listeners))
                        {
                            listeners = new List <ListenerInfo>();
                            m_listeners.Add(channel, listeners);
                        }
                        listeners.Add(li);
                        m_curlisteners++;

                        return(newHandle);
                    }
                }
                finally
                {
                    m_ListenerRwLock.ReleaseWriterLock();
                }
            }
            return(-1);
        }
Beispiel #11
0
        public static ListenerInfo FromData(UUID ItemID, UUID hostID, OSDMap data)
        {
            int    Handle  = data["Handle"].AsInteger();
            int    Channel = data["Channel"].AsInteger();
            string Name    = data["Name"].AsString();
            string Message = data["Message"].AsString();
            UUID   ID      = data["ID"].AsUUID();
            bool   Active  = data["Active"].AsBoolean();

            ListenerInfo linfo = new ListenerInfo(Handle,
                                                  ItemID, hostID, Channel, Name,
                                                  ID, Message);

            linfo.m_active = Active;

            return(linfo);
        }
Beispiel #12
0
        public int AddListener(uint localID, UUID itemID, UUID hostID,
                               int channel, string name, UUID id, string msg,
                               int regexBitfield)
        {
            // do we already have a match on this particular filter event?
            List <ListenerInfo> coll = GetListeners(itemID, channel, name, id,
                                                    msg);

            if (coll.Count > 0)
            {
                // special case, called with same filter settings, return same
                // handle (2008-05-02, tested on 1.21.1 server, still holds)
                return(coll[0].GetHandle());
            }

            if (m_curlisteners < m_maxlisteners)
            {
                lock (m_listeners) /* serialize handle creation here */
                {
                    int newHandle = GetNewHandle(itemID);

                    if (newHandle > 0)
                    {
                        ListenerInfo li = new ListenerInfo(newHandle, localID,
                                                           itemID, hostID, channel, name, id, msg,
                                                           regexBitfield);


                        ThreadedClasses.RwLockedList <ListenerInfo> listeners =
                            m_listeners.GetOrAddIfNotExists(channel, delegate()
                        {
                            return(new ThreadedClasses.RwLockedList <ListenerInfo>());
                        });
                        listeners.Add(li);
                        Interlocked.Increment(ref m_curlisteners);

                        return(newHandle);
                    }
                }
            }
            return(-1);
        }
Beispiel #13
0
        public void AddFromData(uint localID, UUID itemID, UUID hostID,
                                Object[] data)
        {
            int idx = 0;

            Object[] item           = new Object[6];
            int      dataItemLength = 6;

            while (idx < data.Length)
            {
                dataItemLength = (idx + 7 == data.Length || (idx + 7 < data.Length && data[idx + 7] is bool)) ? 7 : 6;
                item           = new Object[dataItemLength];
                Array.Copy(data, idx, item, 0, dataItemLength);

                ListenerInfo info =
                    ListenerInfo.FromData(localID, itemID, hostID, item);

                ThreadedClasses.RwLockedList <ListenerInfo> li = m_listeners.GetOrAddIfNotExists((int)item[2], delegate() { return(new ThreadedClasses.RwLockedList <ListenerInfo>()); });
                li.Add(info);

                idx += dataItemLength;
            }
        }
Beispiel #14
0
 public ListenerInfo(ListenerInfo li, string name, UUID id,
                     string message, int regexBitfield)
 {
     Initialise(li.m_handle, li.m_localID, li.m_itemID, li.m_hostID,
                li.m_channel, name, id, message, regexBitfield);
 }
Beispiel #15
0
 protected void QueueMessage(ListenerInfo li)
 {
     m_pending.Enqueue(li);
 }
        public int AddListener(uint localID, UUID itemID, UUID hostID,
                int channel, string name, UUID id, string msg,
                int regexBitfield)
        {
            // do we already have a match on this particular filter event?
            List<ListenerInfo> coll = GetListeners(itemID, channel, name, id,
                    msg);

            if (coll.Count > 0)
            {
                // special case, called with same filter settings, return same
                // handle (2008-05-02, tested on 1.21.1 server, still holds)
                return coll[0].GetHandle();
            }

            if (m_curlisteners < m_maxlisteners)
            {
                lock(m_listeners) /* serialize handle creation here */
                {
                    int newHandle = GetNewHandle(itemID);

                    if (newHandle > 0)
                    {
                        ListenerInfo li = new ListenerInfo(newHandle, localID,
                                itemID, hostID, channel, name, id, msg,
                                regexBitfield);


                        ThreadedClasses.RwLockedList<ListenerInfo> listeners = 
                            m_listeners.GetOrAddIfNotExists(channel, delegate()
                        {
                            return new ThreadedClasses.RwLockedList<ListenerInfo>();
                        });
                        listeners.Add(li);
                        Interlocked.Increment(ref m_curlisteners);

                        return newHandle;
                    }
                }
            }
            return -1;
        }
 protected void QueueMessage(ListenerInfo li)
 {
     //Make sure that the cmd handler thread is running
     m_scriptModule.PokeThreads ();
     lock (m_pending.SyncRoot)
     {
         m_pending.Enqueue(li);
     }
 }
Beispiel #18
0
 public ListenerInfo(ListenerInfo li, string name, UUID id, string message)
 {
     Initialise(li.m_handle, li.m_itemID, li.m_hostID, li.m_channel, name, id, message);
 }
 protected void QueueMessage(ListenerInfo li)
 {
     m_pending.Enqueue(li);
 }
Beispiel #20
0
 public ListenerInfo(ListenerInfo li, string name, UUID id,
         string message, int regexBitfield)
 {
     Initialise(li.m_handle, li.m_localID, li.m_itemID, li.m_hostID,
             li.m_channel, name, id, message, regexBitfield);
 }
Beispiel #21
0
 protected void QueueMessage(ListenerInfo li)
 {
     lock (m_pending.SyncRoot)
     {
         m_pending.Enqueue(li);
     }
 }
Beispiel #22
0
        public static ListenerInfo FromData (UUID ItemID, UUID hostID, OSDMap data)
        {
            int Handle = data["Handle"].AsInteger ();
            int Channel = data["Channel"].AsInteger ();
            string Name = data["Name"].AsString ();
            string Message = data["Message"].AsString ();
            UUID ID = data["ID"].AsUUID ();
            bool Active = data["Active"].AsBoolean ();

            ListenerInfo linfo = new ListenerInfo (Handle,
                    ItemID, hostID, Channel, Name,
                    ID, Message);
            linfo.m_active = Active;

            return linfo;
        }
Beispiel #23
0
        public static ListenerInfo FromData(uint localID, UUID ItemID, UUID hostID, Object[] data)
        {
            ListenerInfo linfo = new ListenerInfo((int)data[1], localID,
                    ItemID, hostID, (int)data[2], (string)data[3],
                    (UUID)data[4], (string)data[5]);
            linfo.m_active=(bool)data[0];

            return linfo;
        }
Beispiel #24
0
        public int AddListener(uint localID, UUID itemID, UUID hostID,
                int channel, string name, UUID id, string msg,
                int regexBitfield)
        {
            // do we already have a match on this particular filter event?
            List<ListenerInfo> coll = GetListeners(itemID, channel, name, id,
                    msg);

            if (coll.Count > 0)
            {
                // special case, called with same filter settings, return same
                // handle (2008-05-02, tested on 1.21.1 server, still holds)
                return coll[0].GetHandle();
            }

            if (m_curlisteners < m_maxlisteners)
            {
                lock (m_listeners)
                {
                    int newHandle = GetNewHandle(itemID);

                    if (newHandle > 0)
                    {
                        ListenerInfo li = new ListenerInfo(newHandle, localID,
                                itemID, hostID, channel, name, id, msg,
                                regexBitfield);

                        List<ListenerInfo> listeners;
                        if (!m_listeners.TryGetValue(
                                channel, out listeners))
                        {
                            listeners = new List<ListenerInfo>();
                            m_listeners.Add(channel, listeners);
                        }
                        listeners.Add(li);
                        m_curlisteners++;

                        return newHandle;
                    }
                }
            }
            return -1;
        }
Beispiel #25
0
 public ListenerInfo(ListenerInfo li, string name, UUID id, string message)
 {
     Initialise(li.m_handle, li.m_itemID, li.m_hostID, li.m_channel, name, id, message);
 }
Beispiel #26
0
        public static ListenerInfo FromData(uint localID, UUID ItemID,
                UUID hostID, Object[] data)
        {
            ListenerInfo linfo = new ListenerInfo((int)data[1], localID,
                    ItemID, hostID, (int)data[2], (string)data[3],
                    (UUID)data[4], (string)data[5]);
            linfo.m_active = (bool)data[0];
            if (data.Length >= 7)
            {
                linfo.RegexBitfield = (int)data[6];
            }

            return linfo;
        }
Beispiel #27
0
        public static ListenerInfo FromData(UUID ItemID, UUID hostID, Object[] data)
        {
            ListenerInfo linfo = new ListenerInfo(Convert.ToInt32(data[1]),
                    ItemID, hostID, Convert.ToInt32(data[2]), (string)data[3],
                    new UUID(data[4].ToString()), (string)data[5]);
            linfo.m_active=Convert.ToBoolean(data[0]);

            return linfo;
        }