diff options
Diffstat (limited to 'OpenSim/Region/Environment/Modules')
-rw-r--r-- | OpenSim/Region/Environment/Modules/Scripting/WorldComm/WorldCommModule.cs | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/OpenSim/Region/Environment/Modules/Scripting/WorldComm/WorldCommModule.cs b/OpenSim/Region/Environment/Modules/Scripting/WorldComm/WorldCommModule.cs index 4ed0fb5..3294049 100644 --- a/OpenSim/Region/Environment/Modules/Scripting/WorldComm/WorldCommModule.cs +++ b/OpenSim/Region/Environment/Modules/Scripting/WorldComm/WorldCommModule.cs | |||
@@ -330,6 +330,17 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm | |||
330 | e.Sender.AgentId, | 330 | e.Sender.AgentId, |
331 | e.Message); | 331 | e.Message); |
332 | } | 332 | } |
333 | |||
334 | public Object[] GetSerializationData(LLUUID itemID) | ||
335 | { | ||
336 | return m_listenerManager.GetSerializationData(itemID); | ||
337 | } | ||
338 | |||
339 | public void CreateFromData(uint localID, LLUUID itemID, LLUUID hostID, | ||
340 | Object[] data) | ||
341 | { | ||
342 | m_listenerManager.AddFromData(localID, itemID, hostID, data); | ||
343 | } | ||
333 | } | 344 | } |
334 | 345 | ||
335 | public class ListenerManager | 346 | public class ListenerManager |
@@ -549,6 +560,42 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm | |||
549 | } | 560 | } |
550 | return collection; | 561 | return collection; |
551 | } | 562 | } |
563 | |||
564 | public Object[] GetSerializationData(LLUUID itemID) | ||
565 | { | ||
566 | List<Object> data = new List<Object>(); | ||
567 | |||
568 | foreach (List<ListenerInfo> list in m_listeners.Values) | ||
569 | { | ||
570 | foreach (ListenerInfo l in list) | ||
571 | { | ||
572 | if(l.GetItemID() == itemID) | ||
573 | data.AddRange(l.GetSerializationData()); | ||
574 | } | ||
575 | } | ||
576 | return (Object[])data.ToArray(); | ||
577 | } | ||
578 | |||
579 | public void AddFromData(uint localID, LLUUID itemID, LLUUID hostID, | ||
580 | Object[] data) | ||
581 | { | ||
582 | int idx = 0; | ||
583 | Object[] item = new Object[6]; | ||
584 | |||
585 | while(idx < data.Length) | ||
586 | { | ||
587 | Array.Copy(data, idx, item, 0, 6); | ||
588 | |||
589 | ListenerInfo info = | ||
590 | ListenerInfo.FromData(localID, itemID, hostID, item); | ||
591 | |||
592 | if(!m_listeners.ContainsKey((int)item[2])) | ||
593 | m_listeners.Add((int)item[2], new List<ListenerInfo>()); | ||
594 | m_listeners[(int)item[2]].Add(info); | ||
595 | |||
596 | idx+=6; | ||
597 | } | ||
598 | } | ||
552 | } | 599 | } |
553 | 600 | ||
554 | public class ListenerInfo | 601 | public class ListenerInfo |
@@ -587,6 +634,30 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm | |||
587 | m_message = message; | 634 | m_message = message; |
588 | } | 635 | } |
589 | 636 | ||
637 | public Object[] GetSerializationData() | ||
638 | { | ||
639 | Object[] data = new Object[6]; | ||
640 | |||
641 | data[0] = m_active; | ||
642 | data[1] = m_handle; | ||
643 | data[2] = m_channel; | ||
644 | data[3] = m_name; | ||
645 | data[4] = m_id; | ||
646 | data[5] = m_message; | ||
647 | |||
648 | return data; | ||
649 | } | ||
650 | |||
651 | public static ListenerInfo FromData(uint localID, LLUUID ItemID, LLUUID hostID, Object[] data) | ||
652 | { | ||
653 | ListenerInfo linfo = new ListenerInfo((int)data[1], localID, | ||
654 | ItemID, hostID, (int)data[2], (string)data[3], | ||
655 | (LLUUID)data[4], (string)data[5]); | ||
656 | linfo.m_active=(bool)data[0]; | ||
657 | |||
658 | return linfo; | ||
659 | } | ||
660 | |||
590 | public LLUUID GetItemID() | 661 | public LLUUID GetItemID() |
591 | { | 662 | { |
592 | return m_itemID; | 663 | return m_itemID; |