try simplify lsl listen code a bit

This commit is contained in:
UbitUmarov
2022-06-18 22:40:01 +01:00
parent ade2ceb098
commit c972c23d2e
8 changed files with 223 additions and 233 deletions

View File

@@ -210,11 +210,9 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
/// </param>
/// <param name="msg">msg to filter on</param>
/// <returns>number of the scripts handle</returns>
public int Listen(uint localID, UUID itemID, UUID hostID, int channel,
string name, UUID id, string msg)
public int Listen(UUID itemID, UUID hostID, int channel, string name, UUID id, string msg)
{
return m_listenerManager.AddListener(localID, itemID, hostID,
channel, name, id, msg);
return m_listenerManager.AddListener(itemID, hostID, channel, name, id, msg);
}
/// <summary>
@@ -223,7 +221,6 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
/// the script during 'peek' time. Parameter hostID is needed to
/// determine the position of the script.
/// </summary>
/// <param name="localID">localID of the script engine</param>
/// <param name="itemID">UUID of the script engine</param>
/// <param name="hostID">UUID of the SceneObjectPart</param>
/// <param name="channel">channel to listen on</param>
@@ -236,11 +233,10 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
/// Bitfield indicating which strings should be processed as regex.
/// </param>
/// <returns>number of the scripts handle</returns>
public int Listen(uint localID, UUID itemID, UUID hostID, int channel,
public int Listen(UUID itemID, UUID hostID, int channel,
string name, UUID id, string msg, int regexBitfield)
{
return m_listenerManager.AddListener(localID, itemID, hostID,
channel, name, id, msg, regexBitfield);
return m_listenerManager.AddListener(itemID, hostID, channel, name, id, msg, regexBitfield);
}
/// <summary>
@@ -340,12 +336,10 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
// in a limited set of listeners, each belonging a host. If the host is in range, add them
// to the pending queue.
UUID hostID;
foreach (ListenerInfo li in m_listenerManager.GetListeners(UUID.Zero, channel, name, id, msg))
{
hostID = li.GetHostID();
// Dont process if this message is from yourself!
if (id == hostID)
if (id.Equals(li.HostID))
continue;
if(maxDistanceSQ < 0)
@@ -354,7 +348,7 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
continue;
}
SceneObjectPart sPart = m_scene.GetSceneObjectPart(hostID);
SceneObjectPart sPart = m_scene.GetSceneObjectPart(li.HostID);
if (sPart == null)
continue;
@@ -424,8 +418,8 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
foreach (ListenerInfo li in m_listenerManager.GetListeners(UUID.Zero, channel, name, id, msg))
{
UUID liHostID = li.GetHostID();
if (liHostID.Equals(id))
UUID liHostID = li.HostID;
if (li.HostID.Equals(id))
continue;
if (m_scene.GetSceneObjectPart(liHostID) == null)
continue;
@@ -443,7 +437,7 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
foreach (ListenerInfo li in m_listenerManager.GetListeners(UUID.Zero, channel, name, id, msg))
{
UUID liHostID = li.GetHostID();
UUID liHostID = li.HostID;
// Dont process if this message is from yourself!
if (liHostID.Equals(id))
continue;
@@ -507,10 +501,10 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
return m_listenerManager.GetSerializationData(itemID);
}
public void CreateFromData(uint localID, UUID itemID, UUID hostID,
public void CreateFromData(UUID itemID, UUID hostID,
Object[] data)
{
m_listenerManager.AddFromData(localID, itemID, hostID, data);
m_listenerManager.AddFromData(itemID, hostID, data);
}
}
@@ -541,15 +535,12 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
m_curlisteners = 0;
}
public int AddListener(uint localID, UUID itemID, UUID hostID,
int channel, string name, UUID id, string msg)
public int AddListener(UUID itemID, UUID hostID, int channel, string name, UUID id, string msg)
{
return AddListener(localID, itemID, hostID, channel, name, id,
msg, 0);
return AddListener(itemID, hostID, channel, name, id, msg, 0);
}
public int AddListener(uint localID, UUID itemID, UUID hostID,
int channel, string name, UUID id, string msg,
public int AddListener(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?
@@ -559,7 +550,7 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
{
// 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();
return coll[0].Handle;
}
lock (mainLock)
@@ -570,7 +561,7 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
if (newHandle > 0)
{
ListenerInfo li = new ListenerInfo(newHandle, localID,
ListenerInfo li = new ListenerInfo(newHandle,
itemID, hostID, channel, name, id, msg,
regexBitfield);
@@ -597,7 +588,7 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
{
foreach (ListenerInfo li in lis.Value)
{
if (handle == li.GetHandle() && itemID == li.GetItemID())
if (handle == li.Handle && itemID.Equals(li.ItemID))
{
lis.Value.Remove(li);
m_curlisteners--;
@@ -622,7 +613,7 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
{
foreach (ListenerInfo li in lis.Value)
{
if (itemID == li.GetItemID())
if (itemID.Equals(li.ItemID))
removedListeners.Add(li);
}
@@ -651,7 +642,7 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
{
foreach (ListenerInfo li in lis.Value)
{
if (handle == li.GetHandle() && itemID == li.GetItemID())
if (handle == li.Handle && itemID.Equals(li.ItemID))
{
li.Activate();
return;
@@ -669,7 +660,7 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
{
foreach (ListenerInfo li in lis.Value)
{
if (handle == li.GetHandle() && itemID == li.GetItemID())
if (handle == li.Handle && itemID.Equals(li.ItemID))
{
li.Deactivate();
return;
@@ -694,8 +685,8 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
{
foreach (ListenerInfo li in lis.Value)
{
if (itemID == li.GetItemID())
handles.Add(li.GetHandle());
if (itemID == li.ItemID)
handles.Add(li.Handle);
}
}
@@ -748,48 +739,103 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
lock (mainLock)
{
List<ListenerInfo> listeners;
if (!m_listenersByChannel.TryGetValue(channel, out listeners))
if (!m_listenersByChannel.TryGetValue(channel, out List<ListenerInfo> listeners))
{
return collection;
}
bool itemIDNotZero = !itemID.IsZero();
bool itemIDNotZero = itemID.IsNotZero();
bool nameNotEmpty = !string.IsNullOrEmpty(name);
bool msgNotEmpty = !string.IsNullOrEmpty(msg);
foreach (ListenerInfo li in listeners)
{
if (!li.IsActive())
if (!li.IsActive)
continue;
if (itemIDNotZero && itemID != li.GetItemID())
if (itemIDNotZero && itemID.NotEqual(li.ItemID))
continue;
if (!li.GetID().IsZero() && id.NotEqual(li.GetID()))
if (li.ID.IsNotZero() && id.NotEqual(li.ID))
continue;
if (li.GetName().Length > 0)
if (nameNotEmpty && li.Name.Length > 0)
{
if((li.RegexBitfield & OS_LISTEN_REGEX_NAME) == OS_LISTEN_REGEX_NAME)
if ((li.RegexBitfield & OS_LISTEN_REGEX_NAME) == OS_LISTEN_REGEX_NAME)
{
if (!Regex.IsMatch(name, li.GetName()))
if (!Regex.IsMatch(name, li.Name))
continue;
}
else
{
if (!li.GetName().Equals(name))
if (!li.Name.Equals(name))
continue;
}
}
if (li.GetMessage().Length > 0)
if (msgNotEmpty && li.Message.Length > 0)
{
if((li.RegexBitfield & OS_LISTEN_REGEX_MESSAGE) == OS_LISTEN_REGEX_MESSAGE)
if ((li.RegexBitfield & OS_LISTEN_REGEX_MESSAGE) == OS_LISTEN_REGEX_MESSAGE)
{
if(!Regex.IsMatch(msg, li.GetMessage()))
if (!Regex.IsMatch(msg, li.Message))
continue;
}
else
{
if(!li.GetMessage().Equals(msg))
if (!li.Message.Equals(msg))
continue;
}
}
collection.Add(li);
}
}
return collection;
}
public List<ListenerInfo> GetListeners(int channel, string name, UUID id, string msg)
{
List<ListenerInfo> collection = new List<ListenerInfo>();
lock (mainLock)
{
if (!m_listenersByChannel.TryGetValue(channel, out List<ListenerInfo> listeners))
{
return collection;
}
bool nameNotEmpty = !string.IsNullOrEmpty(name);
bool msgNotEmpty = !string.IsNullOrEmpty(msg);
foreach (ListenerInfo li in listeners)
{
if (!li.IsActive)
continue;
if (li.ID.IsNotZero() && id.NotEqual(li.ID))
continue;
if (nameNotEmpty && li.Name.Length > 0)
{
if ((li.RegexBitfield & OS_LISTEN_REGEX_NAME) == OS_LISTEN_REGEX_NAME)
{
if (!Regex.IsMatch(name, li.Name))
continue;
}
else
{
if (!li.Name.Equals(name))
continue;
}
}
if (msgNotEmpty && li.Message.Length > 0)
{
if ((li.RegexBitfield & OS_LISTEN_REGEX_MESSAGE) == OS_LISTEN_REGEX_MESSAGE)
{
if (!Regex.IsMatch(msg, li.Message))
continue;
}
else
{
if (!li.Message.Equals(msg))
continue;
}
}
@@ -809,16 +855,15 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
{
foreach (ListenerInfo l in list)
{
if (l.GetItemID() == itemID)
if (itemID.Equals(l.ItemID))
data.AddRange(l.GetSerializationData());
}
}
}
return (Object[])data.ToArray();
return data.ToArray();
}
public void AddFromData(uint localID, UUID itemID, UUID hostID,
Object[] data)
public void AddFromData(UUID itemID, UUID hostID, Object[] data)
{
int idx = 0;
Object[] item = new Object[6];
@@ -830,8 +875,7 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
item = new Object[dataItemLength];
Array.Copy(data, idx, item, 0, dataItemLength);
ListenerInfo info =
ListenerInfo.FromData(localID, itemID, hostID, item);
ListenerInfo info = ListenerInfo.FromData(itemID, hostID, item);
lock (mainLock)
{
@@ -852,91 +896,99 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
/// <summary>
/// Listener is active or not
/// </summary>
private bool m_active;
public bool IsActive { get; private set; }
/// <summary>
/// Assigned handle of this listener
/// </summary>
private int m_handle;
/// <summary>
/// Local ID from script engine
/// </summary>
private uint m_localID;
public int Handle { get; private set; }
/// <summary>
/// ID of the host script engine
/// </summary>
private UUID m_itemID;
public UUID ItemID { get; private set; }
/// <summary>
/// ID of the host/scene part
/// </summary>
private UUID m_hostID;
public UUID HostID { get; private set; }
/// <summary>
/// Channel
/// </summary>
private int m_channel;
public int Channel { get; private set; }
/// <summary>
/// ID to filter messages from
/// </summary>
private UUID m_id;
public UUID ID { get; private set; }
/// <summary>
/// Object name to filter messages from
/// </summary>
private string m_name;
public string Name { get; private set; }
/// <summary>
/// The message
/// </summary>
private string m_message;
public string Message { get; private set; }
public int RegexBitfield { get; private set; }
public ListenerInfo(int handle, uint localID, UUID ItemID,
public ListenerInfo()
{
}
public ListenerInfo(int handle, UUID _ItemID,
UUID hostID, int channel, string name, UUID id,
string message)
{
Initialise(handle, localID, ItemID, hostID, channel, name, id,
message, 0);
IsActive = true;
Handle = handle;
ItemID = _ItemID;
HostID = hostID;
Channel = channel;
Name = name;
ID = id;
Message = message;
RegexBitfield = 0;
}
public ListenerInfo(int handle, uint localID, UUID ItemID,
public ListenerInfo(int handle, UUID _ItemID,
UUID hostID, int channel, string name, UUID id,
string message, int regexBitfield)
{
Initialise(handle, localID, ItemID, hostID, channel, name, id,
message, regexBitfield);
Handle = handle;
ItemID = _ItemID;
HostID = hostID;
Channel = channel;
Name = name;
ID = id;
Message = message;
RegexBitfield = 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);
IsActive = true;
Handle = li.Handle;
ItemID = li.ItemID;
HostID = li.HostID;
Channel = li.Channel;
Name = name;
ID = id;
Message = message;
}
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);
}
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;
m_localID = localID;
m_itemID = ItemID;
m_hostID = hostID;
m_channel = channel;
m_name = name;
m_id = id;
m_message = message;
IsActive = true;
Handle = li.Handle;
ItemID = li.ItemID;
HostID = li.HostID;
Channel = li.Channel;
Name = name;
ID = id;
Message = message;
RegexBitfield = regexBitfield;
}
@@ -944,87 +996,41 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
{
Object[] data = new Object[7];
data[0] = m_active;
data[1] = m_handle;
data[2] = m_channel;
data[3] = m_name;
data[4] = m_id;
data[5] = m_message;
data[0] = IsActive;
data[1] = Handle;
data[2] = Channel;
data[3] = Name;
data[4] = ID;
data[5] = Message;
data[6] = RegexBitfield;
return data;
}
public static ListenerInfo FromData(uint localID, UUID ItemID,
UUID hostID, Object[] data)
public static ListenerInfo FromData(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)
return new ListenerInfo()
{
linfo.RegexBitfield = (int)data[6];
}
return linfo;
}
public UUID GetItemID()
{
return m_itemID;
}
public UUID GetHostID()
{
return m_hostID;
}
public int GetChannel()
{
return m_channel;
}
public uint GetLocalID()
{
return m_localID;
}
public int GetHandle()
{
return m_handle;
}
public string GetMessage()
{
return m_message;
}
public string GetName()
{
return m_name;
}
public bool IsActive()
{
return m_active;
}
public void Deactivate()
{
m_active = false;
IsActive = (bool)data[0],
Handle = (int)data[1],
ItemID = _ItemID,
HostID = hostID,
Channel = (int)data[2],
Name = (string)data[3],
ID = (UUID)data[4],
Message = (string)data[5],
RegexBitfield = (data.Length > 6) ? (int)data[6] : 0
};
}
public void Activate()
{
m_active = true;
IsActive = true;
}
public UUID GetID()
public void Deactivate()
{
return m_id;
IsActive = false;
}
public int RegexBitfield { get; private set; }
}
}

View File

@@ -33,18 +33,14 @@ namespace OpenSim.Region.Framework.Interfaces
{
public interface IWorldCommListenerInfo
{
Object[] GetSerializationData();
UUID GetItemID();
UUID GetHostID();
int GetChannel();
uint GetLocalID();
int GetHandle();
string GetMessage();
string GetName();
bool IsActive();
void Deactivate();
void Activate();
UUID GetID();
bool IsActive { get; }
int Handle { get; }
UUID ItemID { get; }
UUID HostID { get; }
int Channel { get; }
string Message { get; }
string Name { get; }
UUID ID { get; }
/// <summary>
/// Bitfield indicating which strings should be processed as regex.
@@ -52,6 +48,10 @@ namespace OpenSim.Region.Framework.Interfaces
/// 2 corresponds to IWorldCommListenerInfo::GetMessage()
/// </summary>
int RegexBitfield { get; }
Object[] GetSerializationData();
void Deactivate();
void Activate();
}
public interface IWorldComm
@@ -67,7 +67,6 @@ namespace OpenSim.Region.Framework.Interfaces
/// the script during 'peek' time. Parameter hostID is needed to
/// determine the position of the script.
/// </summary>
/// <param name="LocalID">localID of the script engine</param>
/// <param name="itemID">UUID of the script engine</param>
/// <param name="hostID">UUID of the SceneObjectPart</param>
/// <param name="channel">channel to listen on</param>
@@ -75,7 +74,7 @@ namespace OpenSim.Region.Framework.Interfaces
/// <param name="id">key to filter on (user given, could be totally faked)</param>
/// <param name="msg">msg to filter on</param>
/// <returns>number of the scripts handle</returns>
int Listen(uint LocalID, UUID itemID, UUID hostID, int channel, string name, UUID id, string msg);
int Listen(UUID itemID, UUID hostID, int channel, string name, UUID id, string msg);
/// <summary>
/// Create a listen event callback with the specified filters.
@@ -83,7 +82,6 @@ namespace OpenSim.Region.Framework.Interfaces
/// the script during 'peek' time. Parameter hostID is needed to
/// determine the position of the script.
/// </summary>
/// <param name="LocalID">localID of the script engine</param>
/// <param name="itemID">UUID of the script engine</param>
/// <param name="hostID">UUID of the SceneObjectPart</param>
/// <param name="channel">channel to listen on</param>
@@ -92,7 +90,7 @@ namespace OpenSim.Region.Framework.Interfaces
/// <param name="msg">msg to filter on</param>
/// <param name="regexBitfield">Bitfield indicating which strings should be processed as regex.</param>
/// <returns>number of the scripts handle</returns>
int Listen(uint LocalID, UUID itemID, UUID hostID, int channel, string name, UUID id, string msg, int regexBitfield);
int Listen(UUID itemID, UUID hostID, int channel, string name, UUID id, string msg, int regexBitfield);
/// <summary>
/// This method scans over the objects which registered an interest in listen callbacks.
@@ -146,7 +144,6 @@ namespace OpenSim.Region.Framework.Interfaces
void ListenRemove(UUID itemID, int handle);
void DeleteListener(UUID itemID);
Object[] GetSerializationData(UUID itemID);
void CreateFromData(uint localID, UUID itemID, UUID hostID,
Object[] data);
void CreateFromData(UUID itemID, UUID hostID, Object[] data);
}
}

View File

@@ -454,16 +454,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
switch (type)
{
case "listener":
m_Listener[engine].CreateFromData(localID, itemID,
hostID, item);
m_Listener[engine].CreateFromData(itemID, hostID, item);
break;
case "timer":
m_ScriptTimer[engine].CreateFromData(localID, itemID,
hostID, item);
m_ScriptTimer[engine].CreateFromData(localID, itemID, hostID, item);
break;
case "sensor":
m_SensorRepeat[engine].CreateFromData(localID,
itemID, hostID, item);
m_SensorRepeat[engine].CreateFromData(localID, itemID, hostID, item);
break;
}
}

View File

@@ -1340,7 +1340,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return -1;
UUID.TryParse(ID, out UUID keyID);
return wComm.Listen(m_host.LocalId, m_item.ItemID, m_host.UUID, channelID, name, keyID, msg);
return wComm.Listen(m_item.ItemID, m_host.UUID, channelID, name, keyID, msg);
}
public void llListenControl(int number, int active)

View File

@@ -3998,7 +3998,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if(UUID.TryParse(prim, out UUID pID) && pID.IsNotZero())
{
SceneObjectPart obj = World.GetSceneObjectPart(pID);
SetProjectionParams(obj, llprojection, texture, fov, focus, amb);
if(obj != null)
{
if(obj.OwnerID.Equals(m_host.OwnerID))
SetProjectionParams(obj, llprojection, texture, fov, focus, amb);
}
}
else
SetProjectionParams(m_host, llprojection, texture, fov, focus, amb);
@@ -4598,9 +4602,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
public LSL_Integer osListenRegex(int channelID, string name, string ID, string msg, int regexBitfield)
{
CheckThreatLevel(ThreatLevel.Low, "osListenRegex");
IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>();
if(wComm == null)
return -1;
UUID.TryParse(ID, out UUID keyID);
// if we want the name to be used as a regular expression, ensure it is valid first.
if ((regexBitfield & ScriptBaseClass.OS_LISTEN_REGEX_NAME) == ScriptBaseClass.OS_LISTEN_REGEX_NAME)
{
@@ -4608,7 +4614,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
{
Regex.IsMatch("", name);
}
catch (Exception)
catch
{
OSSLShoutError("Name regex is invalid.");
return -1;
@@ -4622,24 +4628,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
{
Regex.IsMatch("", msg);
}
catch (Exception)
catch
{
OSSLShoutError("Message regex is invalid.");
return -1;
}
}
IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>();
return (wComm == null) ? -1 : wComm.Listen(
m_host.LocalId,
m_item.ItemID,
m_host.UUID,
channelID,
name,
keyID,
msg,
regexBitfield
);
return wComm.Listen(m_item.ItemID, m_host.UUID,
channelID, name, keyID, msg, regexBitfield);
}
public LSL_Integer osRegexIsMatch(string input, string pattern)

View File

@@ -189,10 +189,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
catch { }
ds.action = null;
lock (DataserverRequests)
{
if (DataserverRequests.TryGetValue(id, out ds))
DataserverRequests.Remove(id);
DataserverRequests.Remove(id);
}
}
@@ -200,20 +200,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
public void DataserverReply(string identifier, string reply)
{
DataserverRequest ds;
lock (DataserverRequests)
{
if (!DataserverRequests.ContainsKey(identifier))
if (!DataserverRequests.TryGetValue(identifier, out ds))
return;
ds = DataserverRequests[identifier];
DataserverRequests.Remove(identifier);
}
m_CmdManager.m_ScriptEngine.PostObjectEvent(ds.localID,
new EventParams("dataserver", new Object[]
{ new LSL_Types.LSLString(ds.ID.ToString()),
new LSL_Types.LSLString(reply)},
{
new LSL_Types.LSLString(ds.ID.ToString()),
new LSL_Types.LSLString(reply)
},
new DetectParams[0]));
}

View File

@@ -62,25 +62,21 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
if (m_commsPlugin != null)
{
while (m_commsPlugin.HasMessages())
ListenerInfo lInfo;
while ((lInfo = (ListenerInfo)m_commsPlugin.GetNextMessage()) != null)
{
ListenerInfo lInfo = (ListenerInfo)m_commsPlugin.GetNextMessage();
//Deliver data to prim's listen handler
object[] resobj = new object[]
{
new LSL_Types.LSLInteger(lInfo.GetChannel()),
new LSL_Types.LSLString(lInfo.GetName()),
new LSL_Types.LSLString(lInfo.GetID().ToString()),
new LSL_Types.LSLString(lInfo.GetMessage())
new LSL_Types.LSLInteger(lInfo.Channel),
new LSL_Types.LSLString(lInfo.Name),
new LSL_Types.LSLString(lInfo.ID.ToString()),
new LSL_Types.LSLString(lInfo.Message)
};
foreach (IScriptEngine e in m_CmdManager.ScriptEngines)
{
e.PostScriptEvent(
lInfo.GetItemID(), new EventParams(
"listen", resobj,
new DetectParams[0]));
e.PostScriptEvent(lInfo.ItemID, new EventParams("listen", resobj, new DetectParams[0]));
}
}
}
@@ -94,11 +90,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
return new Object[]{};
}
public void CreateFromData(uint localID, UUID itemID, UUID hostID,
Object[] data)
public void CreateFromData( UUID itemID, UUID hostID, Object[] data)
{
if (m_commsPlugin != null)
m_commsPlugin.CreateFromData(localID, itemID, hostID, data);
m_commsPlugin.CreateFromData(itemID, hostID, data);
}
}
}

View File

@@ -253,10 +253,15 @@ namespace OpenSim.Region.ScriptEngine.XEngine
public void Initialise(IConfigSource configSource)
{
if (configSource.Configs["XEngine"] == null)
m_ScriptConfig = configSource.Configs["XEngine"];
if (m_ScriptConfig == null)
return;
m_ScriptConfig = configSource.Configs["XEngine"];
if (!m_ScriptConfig.GetBoolean("Enabled", true))
return;
m_Enabled = true;
m_ConfigSource = configSource;
string rawScriptStopStrategy = m_ScriptConfig.GetString("ScriptStopStrategy", "co-op");
@@ -282,19 +287,13 @@ namespace OpenSim.Region.ScriptEngine.XEngine
public void AddRegion(Scene scene)
{
if (m_ScriptConfig == null)
if (!m_Enabled)
return;
m_ScriptFailCount = 0;
m_ScriptErrorMessage = String.Empty;
m_Enabled = m_ScriptConfig.GetBoolean("Enabled", true);
if (!m_Enabled)
return;
AppDomain.CurrentDomain.AssemblyResolve +=
OnAssemblyResolve;
AppDomain.CurrentDomain.AssemblyResolve += OnAssemblyResolve;
m_Scene = scene;
m_log.InfoFormat("[XEngine]: Initializing scripts in region {0}", m_Scene.RegionInfo.RegionName);