diff --git a/Programs/Simian/Agent.cs b/Programs/Simian/Agent.cs index 1bae2909..6ebb3d7e 100644 --- a/Programs/Simian/Agent.cs +++ b/Programs/Simian/Agent.cs @@ -15,6 +15,8 @@ namespace Simian public uint CircuitCode; public string FirstName; public string LastName; + public Avatar Avatar = new Avatar(); + public AgentManager.ControlFlags ControlFlags = AgentManager.ControlFlags.NONE; /// Sequence numbers of packets we've received (for duplicate checking) internal Queue packetArchive = new Queue(); diff --git a/Programs/Simian/Extensions/SceneManager.cs b/Programs/Simian/Extensions/SceneManager.cs index 4bac3009..23b23bc3 100644 --- a/Programs/Simian/Extensions/SceneManager.cs +++ b/Programs/Simian/Extensions/SceneManager.cs @@ -45,9 +45,8 @@ namespace Simian avatar.Rotation = Quaternion.Identity; avatar.Scale = new Vector3(1f, 1f, 3f); - // Add this agent to the scene graph - lock (server.SceneAvatars) - server.SceneAvatars[avatar.ID] = avatar; + // Link this avatar up with the corresponding agent + agent.Avatar = avatar; AgentMovementCompletePacket complete = new AgentMovementCompletePacket(); complete.AgentData.AgentID = agent.AgentID; @@ -65,11 +64,7 @@ namespace Simian { AgentUpdatePacket update = (AgentUpdatePacket)packet; - Avatar avatar; - if (server.SceneAvatars.TryGetValue(agent.AgentID, out avatar)) - { - SendFullUpdate(agent, avatar, update.AgentData.State, update.AgentData.Flags); - } + SendFullUpdate(agent, agent.Avatar, update.AgentData.State, update.AgentData.Flags); } void AgentWearablesRequestHandler(Packet packet, Agent agent) diff --git a/Programs/Simian/Simian.cs b/Programs/Simian/Simian.cs index 73bfab8a..1024cc9c 100644 --- a/Programs/Simian/Simian.cs +++ b/Programs/Simian/Simian.cs @@ -16,7 +16,9 @@ namespace Simian public HttpServer HttpServer; public UDPServer UDPServer; public Dictionary SceneObjects = new Dictionary(); - public Dictionary SceneAvatars = new Dictionary(); + + /// All of the agents currently connected to this UDP server + public Dictionary Agents = new Dictionary(); Dictionary unassociatedAgents; int currentCircuitCode; diff --git a/Programs/Simian/UDPServer.cs b/Programs/Simian/UDPServer.cs index 73b55b08..c2a6a8a6 100644 --- a/Programs/Simian/UDPServer.cs +++ b/Programs/Simian/UDPServer.cs @@ -27,8 +27,6 @@ namespace Simian Simian server; /// Handlers for incoming packets PacketEventDictionary packetEvents = new PacketEventDictionary(); - /// All of the agents currently connected to this UDP server - Dictionary agents = new Dictionary(); /// Incoming packets that are awaiting handling BlockingQueue packetInbox = new BlockingQueue(Settings.PACKET_INBOX_SIZE); @@ -84,8 +82,8 @@ namespace Simian { agent.Initialize((IPEndPoint)buffer.RemoteEndPoint); - lock (agents) - agents[(IPEndPoint)buffer.RemoteEndPoint] = agent; + lock (server.Agents) + server.Agents[(IPEndPoint)buffer.RemoteEndPoint] = agent; Logger.Log("Activated UDP circuit " + useCircuitCode.CircuitCode.Code, Helpers.LogLevel.Info); @@ -101,7 +99,7 @@ namespace Simian else { // Determine which agent this packet came from - if (!agents.TryGetValue((IPEndPoint)buffer.RemoteEndPoint, out agent)) + if (!server.Agents.TryGetValue((IPEndPoint)buffer.RemoteEndPoint, out agent)) { Logger.Log("Received UDP packet from an unrecognized source: " + ((IPEndPoint)buffer.RemoteEndPoint).ToString(), Helpers.LogLevel.Warning);