change pending messages for scripts listeners queue type
parent
72d38b267e
commit
1de010e969
|
@ -27,6 +27,7 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
|
@ -99,8 +100,7 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
||||||
private const int DEBUG_CHANNEL = 2147483647;
|
private const int DEBUG_CHANNEL = 2147483647;
|
||||||
|
|
||||||
private ListenerManager m_listenerManager;
|
private ListenerManager m_listenerManager;
|
||||||
private Queue m_pending;
|
private ConcurrentQueue<ListenerInfo> m_pending;
|
||||||
private Queue m_pendingQ;
|
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
private int m_whisperdistance = 10;
|
private int m_whisperdistance = 10;
|
||||||
private int m_saydistance = 20;
|
private int m_saydistance = 20;
|
||||||
|
@ -140,8 +140,7 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
||||||
maxlisteners = maxhandles;
|
maxlisteners = maxhandles;
|
||||||
|
|
||||||
m_listenerManager = new ListenerManager(maxlisteners, maxhandles);
|
m_listenerManager = new ListenerManager(maxlisteners, maxhandles);
|
||||||
m_pendingQ = new Queue();
|
m_pending = new ConcurrentQueue<ListenerInfo>();
|
||||||
m_pending = Queue.Synchronized(m_pendingQ);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PostInitialise()
|
public void PostInitialise()
|
||||||
|
@ -319,35 +318,31 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
||||||
// in a limited set of listeners, each belonging a host. If the host is in range, add them
|
// in a limited set of listeners, each belonging a host. If the host is in range, add them
|
||||||
// to the pending queue.
|
// to the pending queue.
|
||||||
|
|
||||||
foreach (ListenerInfo li
|
foreach (ListenerInfo li in m_listenerManager.GetListeners(UUID.Zero, channel, name, id, msg))
|
||||||
in m_listenerManager.GetListeners(UUID.Zero, channel,
|
|
||||||
name, id, msg))
|
|
||||||
{
|
{
|
||||||
// Dont process if this message is from yourself!
|
// Dont process if this message is from yourself!
|
||||||
if (li.GetHostID().Equals(id))
|
if (li.GetHostID().Equals(id))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
SceneObjectPart sPart = m_scene.GetSceneObjectPart(
|
SceneObjectPart sPart = m_scene.GetSceneObjectPart(li.GetHostID());
|
||||||
li.GetHostID());
|
|
||||||
if (sPart == null)
|
if (sPart == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
double dis = Util.GetDistanceTo(sPart.AbsolutePosition,
|
double dis = Vector3.DistanceSquared(sPart.AbsolutePosition, position);
|
||||||
position);
|
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case ChatTypeEnum.Whisper:
|
case ChatTypeEnum.Whisper:
|
||||||
if (dis < m_whisperdistance)
|
if (dis < m_whisperdistance * m_whisperdistance)
|
||||||
QueueMessage(new ListenerInfo(li, name, id, msg));
|
QueueMessage(new ListenerInfo(li, name, id, msg));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ChatTypeEnum.Say:
|
case ChatTypeEnum.Say:
|
||||||
if (dis < m_saydistance)
|
if (dis < m_saydistance * m_saydistance)
|
||||||
QueueMessage(new ListenerInfo(li, name, id, msg));
|
QueueMessage(new ListenerInfo(li, name, id, msg));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ChatTypeEnum.Shout:
|
case ChatTypeEnum.Shout:
|
||||||
if (dis < m_shoutdistance)
|
if (dis < m_shoutdistance * m_shoutdistance)
|
||||||
QueueMessage(new ListenerInfo(li, name, id, msg));
|
QueueMessage(new ListenerInfo(li, name, id, msg));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -452,12 +447,9 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void QueueMessage(ListenerInfo li)
|
protected void QueueMessage(ListenerInfo li)
|
||||||
{
|
|
||||||
lock (m_pending.SyncRoot)
|
|
||||||
{
|
{
|
||||||
m_pending.Enqueue(li);
|
m_pending.Enqueue(li);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Are there any listen events ready to be dispatched?
|
/// Are there any listen events ready to be dispatched?
|
||||||
|
@ -474,13 +466,7 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
||||||
/// <returns>ListenerInfo with filter filled in</returns>
|
/// <returns>ListenerInfo with filter filled in</returns>
|
||||||
public IWorldCommListenerInfo GetNextMessage()
|
public IWorldCommListenerInfo GetNextMessage()
|
||||||
{
|
{
|
||||||
ListenerInfo li = null;
|
m_pending.TryDequeue(out ListenerInfo li);
|
||||||
|
|
||||||
lock (m_pending.SyncRoot)
|
|
||||||
{
|
|
||||||
li = (ListenerInfo)m_pending.Dequeue();
|
|
||||||
}
|
|
||||||
|
|
||||||
return li;
|
return li;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue