* Rewrote ClientManager to remove Lindenisms from OpenSim core, improve performance by removing locks, and replace LLUDPClientCollection

* Removed the confusing (and LL-specific) shutdowncircuit parameter from IClientAPI.Close()
* Updated the LLUDP code to only use ClientManager instead of trying to synchronize ClientManager and m_clients
* Remove clients asynchronously since it is a very slow operation (including a 2000ms sleep)
This commit is contained in:
John Hurliman
2009-10-13 14:50:03 -07:00
parent c893761319
commit 23a334b9f5
21 changed files with 317 additions and 335 deletions

View File

@@ -64,7 +64,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView
void user_OnIRCReady(IRCClientView cv)
{
m_log.Info("[IRCd] Adding user...");
m_scene.ClientManager.Add(cv.CircuitCode, cv);
m_scene.ClientManager.Add(cv.AgentId, cv.RemoteEndPoint, cv);
cv.Start();
m_log.Info("[IRCd] Added user to Scene");
}

View File

@@ -634,6 +634,12 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
{
get { return (uint)Util.RandomClass.Next(0,int.MaxValue); }
}
public IPEndPoint RemoteEndPoint
{
get { return (IPEndPoint)m_client.Client.RemoteEndPoint; }
}
#pragma warning disable 67
public event GenericMessage OnGenericMessage;
public event ImprovedInstantMessage OnInstantMessage;
@@ -843,7 +849,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
}
public void Close(bool ShutdownCircuit)
public void Close()
{
Disconnect();
}

View File

@@ -183,8 +183,9 @@ namespace OpenSim.Region.OptionalModules.ContentManagement
public virtual void HideFromAll()
{
foreach (SceneObjectPart part in m_Entity.Children.Values)
m_Entity.Scene.ClientManager.ForEachClient(delegate(IClientAPI controller)
{ controller.SendKillObject(m_Entity.RegionHandle, part.LocalId); }
m_Entity.Scene.ClientManager.ForEach(
delegate(IClientAPI controller)
{ controller.SendKillObject(m_Entity.RegionHandle, part.LocalId); }
);
}
@@ -201,8 +202,9 @@ namespace OpenSim.Region.OptionalModules.ContentManagement
public void SendFullUpdateToAll()
{
m_Entity.Scene.ClientManager.ForEachClient(delegate(IClientAPI controller)
{ m_Entity.SendFullUpdateToClient(controller); }
m_Entity.Scene.ClientManager.ForEach(
delegate(IClientAPI controller)
{ m_Entity.SendFullUpdateToClient(controller); }
);
}

View File

@@ -825,7 +825,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
{
}
public void Close(bool ShutdownCircuit)
public void Close()
{
}
@@ -838,11 +838,21 @@ namespace OpenSim.Region.OptionalModules.World.NPC
}
private uint m_circuitCode;
private IPEndPoint m_remoteEndPoint;
public uint CircuitCode
{
get { return m_circuitCode; }
set { m_circuitCode = value; }
set
{
m_circuitCode = value;
m_remoteEndPoint = new IPEndPoint(IPAddress.Loopback, (ushort)m_circuitCode);
}
}
public IPEndPoint RemoteEndPoint
{
get { return m_remoteEndPoint; }
}
public void SendBlueBoxMessage(UUID FromAvatarID, String FromAvatarName, String Message)

View File

@@ -155,7 +155,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
NPCAvatar npcAvatar = new NPCAvatar(p_firstname, p_lastname, p_position, p_scene);
npcAvatar.CircuitCode = (uint) Util.RandomClass.Next(0, int.MaxValue);
p_scene.ClientManager.Add(npcAvatar.CircuitCode, npcAvatar);
p_scene.ClientManager.Add(npcAvatar.AgentId, npcAvatar.RemoteEndPoint, npcAvatar);
p_scene.AddNewClient(npcAvatar);
ScenePresence sp;