diff options
Merge branch 'master' into careminster-presence-refactor
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Framework/AgentCircuitManager.cs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/OpenSim/Framework/AgentCircuitManager.cs b/OpenSim/Framework/AgentCircuitManager.cs index e5dbb5a..49d7822 100644 --- a/OpenSim/Framework/AgentCircuitManager.cs +++ b/OpenSim/Framework/AgentCircuitManager.cs | |||
@@ -36,6 +36,7 @@ namespace OpenSim.Framework | |||
36 | public class AgentCircuitManager | 36 | public class AgentCircuitManager |
37 | { | 37 | { |
38 | public Dictionary<uint, AgentCircuitData> AgentCircuits = new Dictionary<uint, AgentCircuitData>(); | 38 | public Dictionary<uint, AgentCircuitData> AgentCircuits = new Dictionary<uint, AgentCircuitData>(); |
39 | public Dictionary<UUID, AgentCircuitData> AgentCircuitsByUUID = new Dictionary<UUID, AgentCircuitData>(); | ||
39 | 40 | ||
40 | public virtual AuthenticateResponse AuthenticateSession(UUID sessionID, UUID agentID, uint circuitcode) | 41 | public virtual AuthenticateResponse AuthenticateSession(UUID sessionID, UUID agentID, uint circuitcode) |
41 | { | 42 | { |
@@ -86,10 +87,12 @@ namespace OpenSim.Framework | |||
86 | if (AgentCircuits.ContainsKey(circuitCode)) | 87 | if (AgentCircuits.ContainsKey(circuitCode)) |
87 | { | 88 | { |
88 | AgentCircuits[circuitCode] = agentData; | 89 | AgentCircuits[circuitCode] = agentData; |
90 | AgentCircuitsByUUID[agentData.AgentID] = agentData; | ||
89 | } | 91 | } |
90 | else | 92 | else |
91 | { | 93 | { |
92 | AgentCircuits.Add(circuitCode, agentData); | 94 | AgentCircuits.Add(circuitCode, agentData); |
95 | AgentCircuitsByUUID.Add(agentData.AgentID, agentData); | ||
93 | } | 96 | } |
94 | } | 97 | } |
95 | } | 98 | } |
@@ -99,10 +102,26 @@ namespace OpenSim.Framework | |||
99 | lock (AgentCircuits) | 102 | lock (AgentCircuits) |
100 | { | 103 | { |
101 | if (AgentCircuits.ContainsKey(circuitCode)) | 104 | if (AgentCircuits.ContainsKey(circuitCode)) |
105 | { | ||
106 | UUID agentID = AgentCircuits[circuitCode].AgentID; | ||
102 | AgentCircuits.Remove(circuitCode); | 107 | AgentCircuits.Remove(circuitCode); |
108 | AgentCircuitsByUUID.Remove(agentID); | ||
109 | } | ||
103 | } | 110 | } |
104 | } | 111 | } |
105 | 112 | ||
113 | public virtual void RemoveCircuit(UUID agentID) | ||
114 | { | ||
115 | lock (AgentCircuits) | ||
116 | { | ||
117 | if (AgentCircuitsByUUID.ContainsKey(agentID)) | ||
118 | { | ||
119 | uint circuitCode = AgentCircuitsByUUID[agentID].circuitcode; | ||
120 | AgentCircuits.Remove(circuitCode); | ||
121 | AgentCircuitsByUUID.Remove(agentID); | ||
122 | } | ||
123 | } | ||
124 | } | ||
106 | public AgentCircuitData GetAgentCircuitData(uint circuitCode) | 125 | public AgentCircuitData GetAgentCircuitData(uint circuitCode) |
107 | { | 126 | { |
108 | AgentCircuitData agentCircuit = null; | 127 | AgentCircuitData agentCircuit = null; |
@@ -110,6 +129,13 @@ namespace OpenSim.Framework | |||
110 | return agentCircuit; | 129 | return agentCircuit; |
111 | } | 130 | } |
112 | 131 | ||
132 | public AgentCircuitData GetAgentCircuitData(UUID agentID) | ||
133 | { | ||
134 | AgentCircuitData agentCircuit = null; | ||
135 | AgentCircuitsByUUID.TryGetValue(agentID, out agentCircuit); | ||
136 | return agentCircuit; | ||
137 | } | ||
138 | |||
113 | public void UpdateAgentData(AgentCircuitData agentData) | 139 | public void UpdateAgentData(AgentCircuitData agentData) |
114 | { | 140 | { |
115 | if (AgentCircuits.ContainsKey((uint) agentData.circuitcode)) | 141 | if (AgentCircuits.ContainsKey((uint) agentData.circuitcode)) |