document & 80-character width terminal formatting
Signed-off-by: Diva Canto <diva@metaverseink.com>integration
parent
a87c4c7d89
commit
b3dddd7447
|
@ -29,9 +29,12 @@ using System;
|
|||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
using Nini.Config;
|
||||
using Mono.Addins;
|
||||
|
||||
using OpenMetaverse;
|
||||
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Region.Framework.Interfaces;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
|
@ -111,11 +114,16 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
int maxhandles = 64;
|
||||
try
|
||||
{
|
||||
m_whisperdistance = config.Configs["Chat"].GetInt("whisper_distance", m_whisperdistance);
|
||||
m_saydistance = config.Configs["Chat"].GetInt("say_distance", m_saydistance);
|
||||
m_shoutdistance = config.Configs["Chat"].GetInt("shout_distance", m_shoutdistance);
|
||||
maxlisteners = config.Configs["LL-Functions"].GetInt("max_listens_per_region", maxlisteners);
|
||||
maxhandles = config.Configs["LL-Functions"].GetInt("max_listens_per_script", maxhandles);
|
||||
m_whisperdistance = config.Configs["Chat"].GetInt(
|
||||
"whisper_distance", m_whisperdistance);
|
||||
m_saydistance = config.Configs["Chat"].GetInt(
|
||||
"say_distance", m_saydistance);
|
||||
m_shoutdistance = config.Configs["Chat"].GetInt(
|
||||
"shout_distance", m_shoutdistance);
|
||||
maxlisteners = config.Configs["LL-Functions"].GetInt(
|
||||
"max_listens_per_region", maxlisteners);
|
||||
maxhandles = config.Configs["LL-Functions"].GetInt(
|
||||
"max_listens_per_script", maxhandles);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
@ -269,7 +277,7 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
|
||||
if ((source = m_scene.GetSceneObjectPart(id)) != null)
|
||||
position = source.AbsolutePosition;
|
||||
else if ((avatar = m_scene.GetScenePresence(id)) != null)
|
||||
else if ((avatar = m_scene.GetScenePresence(id)) != null)
|
||||
position = avatar.AbsolutePosition;
|
||||
else if (ChatTypeEnum.Region == type)
|
||||
position = CenterOfRegion;
|
||||
|
@ -292,7 +300,8 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
/// <param name="name">name of sender (object or avatar)</param>
|
||||
/// <param name="id">key of sender (object or avatar)</param>
|
||||
/// <param name="msg">msg to sent</param>
|
||||
public void DeliverMessage(ChatTypeEnum type, int channel, string name, UUID id, string msg, Vector3 position)
|
||||
public void DeliverMessage(ChatTypeEnum type, int channel,
|
||||
string name, UUID id, string msg, Vector3 position)
|
||||
{
|
||||
// m_log.DebugFormat("[WorldComm] got[2] type {0}, channel {1}, name {2}, id {3}, msg {4}",
|
||||
// type, channel, name, id, msg);
|
||||
|
@ -300,17 +309,21 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
// Determine which listen event filters match the given set of arguments, this results
|
||||
// in a limited set of listeners, each belonging a host. If the host is in range, add them
|
||||
// to the pending queue.
|
||||
foreach (ListenerInfo li in m_listenerManager.GetListeners(UUID.Zero, channel, name, id, msg))
|
||||
foreach (ListenerInfo li
|
||||
in m_listenerManager.GetListeners(UUID.Zero, channel,
|
||||
name, id, msg))
|
||||
{
|
||||
// Dont process if this message is from yourself!
|
||||
if (li.GetHostID().Equals(id))
|
||||
continue;
|
||||
|
||||
SceneObjectPart sPart = m_scene.GetSceneObjectPart(li.GetHostID());
|
||||
SceneObjectPart sPart = m_scene.GetSceneObjectPart(
|
||||
li.GetHostID());
|
||||
if (sPart == null)
|
||||
continue;
|
||||
|
||||
double dis = Util.GetDistanceTo(sPart.AbsolutePosition, position);
|
||||
double dis = Util.GetDistanceTo(sPart.AbsolutePosition,
|
||||
position);
|
||||
switch (type)
|
||||
{
|
||||
case ChatTypeEnum.Whisper:
|
||||
|
@ -353,14 +366,16 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
/// <param name='msg'>
|
||||
/// Message.
|
||||
/// </param>
|
||||
public void DeliverMessageTo(UUID target, int channel, Vector3 pos, string name, UUID id, string msg)
|
||||
public void DeliverMessageTo(UUID target, int channel, Vector3 pos,
|
||||
string name, UUID id, string msg)
|
||||
{
|
||||
// Is id an avatar?
|
||||
ScenePresence sp = m_scene.GetScenePresence(target);
|
||||
|
||||
if (sp != null)
|
||||
{
|
||||
// ignore if a child agent this is restricted to inside one region
|
||||
// ignore if a child agent this is restricted to inside one
|
||||
// region
|
||||
if (sp.IsChildAgent)
|
||||
return;
|
||||
|
||||
|
@ -369,8 +384,9 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
// non zero channel messages only go to the attachments
|
||||
if (channel == 0)
|
||||
{
|
||||
m_scene.SimChatToAgent(target, Utils.StringToBytes(msg), pos, name, id, false);
|
||||
}
|
||||
m_scene.SimChatToAgent(target, Utils.StringToBytes(msg),
|
||||
pos, name, id, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
List<SceneObjectGroup> attachments = sp.GetAttachments();
|
||||
|
@ -386,13 +402,18 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
}
|
||||
|
||||
// Need to check each attachment
|
||||
foreach (ListenerInfo li in m_listenerManager.GetListeners(UUID.Zero, channel, name, id, msg))
|
||||
foreach (ListenerInfo li
|
||||
in m_listenerManager.GetListeners(UUID.Zero,
|
||||
channel, name, id, msg))
|
||||
{
|
||||
if (li.GetHostID().Equals(id))
|
||||
continue;
|
||||
|
||||
if (m_scene.GetSceneObjectPart(li.GetHostID()) == null)
|
||||
if (m_scene.GetSceneObjectPart(
|
||||
li.GetHostID()) == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (targets.Contains(li.GetHostID()))
|
||||
QueueMessage(new ListenerInfo(li, name, id, msg));
|
||||
|
@ -403,17 +424,20 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
}
|
||||
|
||||
// No avatar found so look for an object
|
||||
foreach (ListenerInfo li in m_listenerManager.GetListeners(UUID.Zero, channel, name, id, msg))
|
||||
foreach (ListenerInfo li
|
||||
in m_listenerManager.GetListeners(UUID.Zero, channel,
|
||||
name, id, msg))
|
||||
{
|
||||
// Dont process if this message is from yourself!
|
||||
if (li.GetHostID().Equals(id))
|
||||
continue;
|
||||
|
||||
SceneObjectPart sPart = m_scene.GetSceneObjectPart(li.GetHostID());
|
||||
SceneObjectPart sPart = m_scene.GetSceneObjectPart(
|
||||
li.GetHostID());
|
||||
if (sPart == null)
|
||||
continue;
|
||||
|
||||
if ( li.GetHostID().Equals(target))
|
||||
if (li.GetHostID().Equals(target))
|
||||
{
|
||||
QueueMessage(new ListenerInfo(li, name, id, msg));
|
||||
break;
|
||||
|
@ -467,9 +491,15 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
private void DeliverClientMessage(Object sender, OSChatMessage e)
|
||||
{
|
||||
if (null != e.Sender)
|
||||
DeliverMessage(e.Type, e.Channel, e.Sender.Name, e.Sender.AgentId, e.Message, e.Position);
|
||||
{
|
||||
DeliverMessage(e.Type, e.Channel, e.Sender.Name,
|
||||
e.Sender.AgentId, e.Message, e.Position);
|
||||
}
|
||||
else
|
||||
DeliverMessage(e.Type, e.Channel, e.From, UUID.Zero, e.Message, e.Position);
|
||||
{
|
||||
DeliverMessage(e.Type, e.Channel, e.From, UUID.Zero,
|
||||
e.Message, e.Position);
|
||||
}
|
||||
}
|
||||
|
||||
public Object[] GetSerializationData(UUID itemID)
|
||||
|
@ -486,7 +516,8 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
|
||||
public class ListenerManager
|
||||
{
|
||||
private Dictionary<int, List<ListenerInfo>> m_listeners = new Dictionary<int, List<ListenerInfo>>();
|
||||
private Dictionary<int, List<ListenerInfo>> m_listeners =
|
||||
new Dictionary<int, List<ListenerInfo>>();
|
||||
private int m_maxlisteners;
|
||||
private int m_maxhandles;
|
||||
private int m_curlisteners;
|
||||
|
@ -544,14 +575,15 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
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++;
|
||||
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;
|
||||
}
|
||||
|
@ -564,11 +596,13 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
{
|
||||
lock (m_listeners)
|
||||
{
|
||||
foreach (KeyValuePair<int,List<ListenerInfo>> lis in m_listeners)
|
||||
foreach (KeyValuePair<int, List<ListenerInfo>> lis
|
||||
in m_listeners)
|
||||
{
|
||||
foreach (ListenerInfo li in lis.Value)
|
||||
{
|
||||
if (li.GetItemID().Equals(itemID) && li.GetHandle().Equals(handle))
|
||||
if (li.GetItemID().Equals(itemID) &&
|
||||
li.GetHandle().Equals(handle))
|
||||
{
|
||||
lis.Value.Remove(li);
|
||||
if (lis.Value.Count == 0)
|
||||
|
@ -591,13 +625,15 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
|
||||
lock (m_listeners)
|
||||
{
|
||||
foreach (KeyValuePair<int,List<ListenerInfo>> lis in m_listeners)
|
||||
foreach (KeyValuePair<int, List<ListenerInfo>> lis
|
||||
in m_listeners)
|
||||
{
|
||||
foreach (ListenerInfo li in lis.Value)
|
||||
{
|
||||
if (li.GetItemID().Equals(itemID))
|
||||
{
|
||||
// store them first, else the enumerated bails on us
|
||||
// store them first, else the enumerated bails on
|
||||
// us
|
||||
removedListeners.Add(li);
|
||||
}
|
||||
}
|
||||
|
@ -624,11 +660,13 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
{
|
||||
lock (m_listeners)
|
||||
{
|
||||
foreach (KeyValuePair<int,List<ListenerInfo>> lis in m_listeners)
|
||||
foreach (KeyValuePair<int, List<ListenerInfo>> lis
|
||||
in m_listeners)
|
||||
{
|
||||
foreach (ListenerInfo li in lis.Value)
|
||||
{
|
||||
if (li.GetItemID().Equals(itemID) && li.GetHandle() == handle)
|
||||
if (li.GetItemID().Equals(itemID) &&
|
||||
li.GetHandle() == handle)
|
||||
{
|
||||
li.Activate();
|
||||
// only one, bail out
|
||||
|
@ -643,11 +681,13 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
{
|
||||
lock (m_listeners)
|
||||
{
|
||||
foreach (KeyValuePair<int,List<ListenerInfo>> lis in m_listeners)
|
||||
foreach (KeyValuePair<int, List<ListenerInfo>> lis
|
||||
in m_listeners)
|
||||
{
|
||||
foreach (ListenerInfo li in lis.Value)
|
||||
{
|
||||
if (li.GetItemID().Equals(itemID) && li.GetHandle() == handle)
|
||||
if (li.GetItemID().Equals(itemID) &&
|
||||
li.GetHandle() == handle)
|
||||
{
|
||||
li.Deactivate();
|
||||
// only one, bail out
|
||||
|
@ -658,19 +698,24 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
}
|
||||
}
|
||||
|
||||
// non-locked access, since its always called in the context of the lock
|
||||
/// <summary>
|
||||
/// non-locked access, since its always called in the context of the
|
||||
/// lock
|
||||
/// </summary>
|
||||
/// <param name="itemID"></param>
|
||||
/// <returns></returns>
|
||||
private int GetNewHandle(UUID itemID)
|
||||
{
|
||||
List<int> handles = new List<int>();
|
||||
|
||||
// build a list of used keys for this specific itemID...
|
||||
foreach (KeyValuePair<int,List<ListenerInfo>> lis in m_listeners)
|
||||
foreach (KeyValuePair<int, List<ListenerInfo>> lis in m_listeners)
|
||||
{
|
||||
foreach (ListenerInfo li in lis.Value)
|
||||
{
|
||||
if (li.GetItemID().Equals(itemID))
|
||||
handles.Add(li.GetHandle());
|
||||
}
|
||||
foreach (ListenerInfo li in lis.Value)
|
||||
{
|
||||
if (li.GetItemID().Equals(itemID))
|
||||
handles.Add(li.GetHandle());
|
||||
}
|
||||
}
|
||||
|
||||
// Note: 0 is NOT a valid handle for llListen() to return
|
||||
|
@ -709,7 +754,7 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
lock (m_listeners)
|
||||
{
|
||||
List<ListenerInfo> listeners;
|
||||
if (!m_listeners.TryGetValue(channel,out listeners))
|
||||
if (!m_listeners.TryGetValue(channel, out listeners))
|
||||
{
|
||||
return collection;
|
||||
}
|
||||
|
@ -720,7 +765,8 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
{
|
||||
continue;
|
||||
}
|
||||
if (!itemID.Equals(UUID.Zero) && !li.GetItemID().Equals(itemID))
|
||||
if (!itemID.Equals(UUID.Zero) &&
|
||||
!li.GetItemID().Equals(itemID))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
@ -785,11 +831,14 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
lock (m_listeners)
|
||||
{
|
||||
if (!m_listeners.ContainsKey((int)item[2]))
|
||||
m_listeners.Add((int)item[2], new List<ListenerInfo>());
|
||||
{
|
||||
m_listeners.Add((int)item[2],
|
||||
new List<ListenerInfo>());
|
||||
}
|
||||
m_listeners[(int)item[2]].Add(info);
|
||||
}
|
||||
|
||||
idx+=dataItemLength;
|
||||
idx += dataItemLength;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -820,17 +869,23 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
message, regexBitfield);
|
||||
}
|
||||
|
||||
public ListenerInfo(ListenerInfo li, string name, UUID id, string message)
|
||||
public ListenerInfo(ListenerInfo li, string name, UUID id,
|
||||
string message)
|
||||
{
|
||||
Initialise(li.m_handle, li.m_localID, li.m_itemID, li.m_hostID, li.m_channel, name, id, message, 0);
|
||||
Initialise(li.m_handle, li.m_localID, li.m_itemID, li.m_hostID,
|
||||
li.m_channel, name, id, message, 0);
|
||||
}
|
||||
|
||||
public ListenerInfo(ListenerInfo li, string name, UUID id, string message, int regexBitfield)
|
||||
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);
|
||||
Initialise(li.m_handle, li.m_localID, li.m_itemID, li.m_hostID,
|
||||
li.m_channel, name, id, message, regexBitfield);
|
||||
}
|
||||
|
||||
private void Initialise(int handle, uint localID, UUID ItemID, UUID hostID, int channel, string name, UUID id, string message, int regexBitfield)
|
||||
private void Initialise(int handle, uint localID, UUID ItemID,
|
||||
UUID hostID, int channel, string name, UUID id,
|
||||
string message, int regexBitfield)
|
||||
{
|
||||
m_active = true;
|
||||
m_handle = handle;
|
||||
|
@ -859,9 +914,12 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
return data;
|
||||
}
|
||||
|
||||
public static ListenerInfo FromData(uint localID, UUID ItemID, UUID hostID, Object[] data)
|
||||
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]);
|
||||
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)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue