diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Grid/UserServer/MessageServersConnector.cs | 97 |
1 files changed, 84 insertions, 13 deletions
diff --git a/OpenSim/Grid/UserServer/MessageServersConnector.cs b/OpenSim/Grid/UserServer/MessageServersConnector.cs index 6535247..79d1147 100644 --- a/OpenSim/Grid/UserServer/MessageServersConnector.cs +++ b/OpenSim/Grid/UserServer/MessageServersConnector.cs | |||
@@ -52,12 +52,20 @@ namespace OpenSim.Grid.UserServer | |||
52 | 52 | ||
53 | public void RegisterMessageServer(string URI, MessageServerInfo serverData) | 53 | public void RegisterMessageServer(string URI, MessageServerInfo serverData) |
54 | { | 54 | { |
55 | MessageServers.Add(URI, serverData); | 55 | lock (MessageServers) |
56 | { | ||
57 | if (!MessageServers.ContainsKey(URI)) | ||
58 | MessageServers.Add(URI, serverData); | ||
59 | } | ||
56 | } | 60 | } |
57 | 61 | ||
58 | public void DeRegisterMessageServer(string URI) | 62 | public void DeRegisterMessageServer(string URI) |
59 | { | 63 | { |
60 | MessageServers.Remove(URI); | 64 | lock (MessageServers) |
65 | { | ||
66 | if (MessageServers.ContainsKey(URI)) | ||
67 | MessageServers.Remove(URI); | ||
68 | } | ||
61 | } | 69 | } |
62 | 70 | ||
63 | public void AddResponsibleRegion(string URI, ulong regionhandle) | 71 | public void AddResponsibleRegion(string URI, ulong regionhandle) |
@@ -150,24 +158,73 @@ namespace OpenSim.Grid.UserServer | |||
150 | return response; | 158 | return response; |
151 | } | 159 | } |
152 | 160 | ||
153 | public void TellMessageServersAboutUser(LLUUID agentID, LLUUID sessionID, LLUUID RegionID, ulong regionhandle, LLVector3 Position) | 161 | public void TellMessageServersAboutUser(LLUUID agentID, LLUUID sessionID, LLUUID RegionID, |
162 | ulong regionhandle, float positionX, float positionY, | ||
163 | float positionZ, string firstname, string lastname) | ||
154 | { | 164 | { |
155 | // Loop over registered Message Servers ( AND THERE WILL BE MORE THEN ONE :D ) | 165 | // Loop over registered Message Servers ( AND THERE WILL BE MORE THEN ONE :D ) |
156 | if (MessageServers.Count > 0) | 166 | lock (MessageServers) |
157 | { | 167 | { |
158 | m_log.Info("[MSGCONNECTOR]: Sending login notice to registered message servers"); | 168 | if (MessageServers.Count > 0) |
169 | { | ||
170 | m_log.Info("[MSGCONNECTOR]: Sending login notice to registered message servers"); | ||
171 | } | ||
172 | else | ||
173 | { | ||
174 | m_log.Info("[MSGCONNECTOR]: No Message Servers registered, ignoring"); | ||
175 | } | ||
176 | foreach (MessageServerInfo serv in MessageServers.Values) | ||
177 | { | ||
178 | NotifyMessageServerAboutUser(serv, agentID, sessionID, RegionID, | ||
179 | regionhandle, positionX, positionY, positionZ, | ||
180 | firstname, lastname); | ||
181 | } | ||
159 | } | 182 | } |
160 | else | 183 | } |
184 | |||
185 | public void TellMessageServersAboutUserLogoff(LLUUID agentID) | ||
186 | { | ||
187 | lock (MessageServers) | ||
188 | { | ||
189 | if (MessageServers.Count > 0) | ||
190 | { | ||
191 | m_log.Info("[MSGCONNECTOR]: Sending login notice to registered message servers"); | ||
192 | } | ||
193 | else | ||
194 | { | ||
195 | m_log.Info("[MSGCONNECTOR]: No Message Servers registered, ignoring"); | ||
196 | } | ||
197 | foreach (MessageServerInfo serv in MessageServers.Values) | ||
198 | { | ||
199 | NotifyMessageServerAboutUserLogoff(serv,agentID); | ||
200 | } | ||
201 | } | ||
202 | } | ||
203 | |||
204 | private void NotifyMessageServerAboutUserLogoff(MessageServerInfo serv, LLUUID agentID) | ||
205 | { | ||
206 | Hashtable reqparams = new Hashtable(); | ||
207 | reqparams["sendkey"] = serv.sendkey; | ||
208 | reqparams["agentid"] = agentID.ToString(); | ||
209 | ArrayList SendParams = new ArrayList(); | ||
210 | SendParams.Add(reqparams); | ||
211 | |||
212 | XmlRpcRequest GridReq = new XmlRpcRequest("logout_of_simulator", SendParams); | ||
213 | try | ||
161 | { | 214 | { |
162 | m_log.Info("[MSGCONNECTOR]: No Message Servers registered, ignoring"); | 215 | XmlRpcResponse GridResp = GridReq.Send(serv.URI, 6000); |
163 | } | 216 | } |
164 | foreach (MessageServerInfo serv in MessageServers.Values) | 217 | catch (System.Net.WebException) |
165 | { | 218 | { |
166 | NotifyMessageServerAboutUser(serv, agentID, sessionID, RegionID, regionhandle, Position); | 219 | m_log.Warn("[MSGCONNECTOR]: Unable to notify Message Server about log out. Other users might still think this user is online"); |
167 | } | 220 | } |
221 | m_log.Info("[LOGOUT]: Notified : " + serv.URI + " about user logout"); | ||
168 | } | 222 | } |
169 | 223 | ||
170 | private void NotifyMessageServerAboutUser(MessageServerInfo serv, LLUUID agentID, LLUUID sessionID, LLUUID RegionID, ulong regionhandle, LLVector3 Position) | 224 | private void NotifyMessageServerAboutUser(MessageServerInfo serv, |
225 | LLUUID agentID, LLUUID sessionID, LLUUID RegionID, | ||
226 | ulong regionhandle, float positionX, float positionY, float positionZ, | ||
227 | string firstname, string lastname) | ||
171 | { | 228 | { |
172 | Hashtable reqparams = new Hashtable(); | 229 | Hashtable reqparams = new Hashtable(); |
173 | reqparams["sendkey"] = serv.sendkey; | 230 | reqparams["sendkey"] = serv.sendkey; |
@@ -175,14 +232,28 @@ namespace OpenSim.Grid.UserServer | |||
175 | reqparams["sessionid"] = sessionID.ToString(); | 232 | reqparams["sessionid"] = sessionID.ToString(); |
176 | reqparams["regionid"] = RegionID.ToString(); | 233 | reqparams["regionid"] = RegionID.ToString(); |
177 | reqparams["regionhandle"] = regionhandle.ToString(); | 234 | reqparams["regionhandle"] = regionhandle.ToString(); |
178 | reqparams["position"] = Position.ToString(); | 235 | reqparams["positionx"] = positionX.ToString(); |
236 | reqparams["positiony"] = positionY.ToString(); | ||
237 | reqparams["positionz"] = positionZ.ToString(); | ||
238 | reqparams["firstname"] = firstname; | ||
239 | reqparams["lastname"] = lastname; | ||
240 | |||
241 | //reqparams["position"] = Position.ToString(); | ||
179 | 242 | ||
180 | ArrayList SendParams = new ArrayList(); | 243 | ArrayList SendParams = new ArrayList(); |
181 | SendParams.Add(reqparams); | 244 | SendParams.Add(reqparams); |
182 | 245 | ||
183 | XmlRpcRequest GridReq = new XmlRpcRequest("login_to_simulator", SendParams); | 246 | XmlRpcRequest GridReq = new XmlRpcRequest("login_to_simulator", SendParams); |
184 | XmlRpcResponse GridResp = GridReq.Send(serv.URI, 6000); | 247 | try |
185 | m_log.Info("[LOGIN]: Notified : " + serv.URI + " about user login"); | 248 | { |
249 | XmlRpcResponse GridResp = GridReq.Send(serv.URI, 6000); | ||
250 | m_log.Info("[LOGIN]: Notified : " + serv.URI + " about user login"); | ||
251 | } | ||
252 | catch (System.Net.WebException) | ||
253 | { | ||
254 | m_log.Warn("[MSGCONNECTOR]: Unable to notify Message Server about login. Presence might be borked for this user"); | ||
255 | } | ||
256 | |||
186 | } | 257 | } |
187 | } | 258 | } |
188 | } | 259 | } |