From 0abc179a4e3740af8837c96c22c2b2e0def8635b Mon Sep 17 00:00:00 2001 From: Dr Scofield Date: Mon, 26 Jan 2009 21:32:24 +0000 Subject: ~ extending attendee list to include agent name + code to generate full XML avatar list + code to POST XML snipplet --- .../Modules/Avatar/Concierge/ConciergeModule.cs | 55 ++++++++++++++++++---- 1 file changed, 45 insertions(+), 10 deletions(-) (limited to 'OpenSim') diff --git a/OpenSim/Region/Environment/Modules/Avatar/Concierge/ConciergeModule.cs b/OpenSim/Region/Environment/Modules/Avatar/Concierge/ConciergeModule.cs index 1a903fe..dbf4a70 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/Concierge/ConciergeModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/Concierge/ConciergeModule.cs @@ -29,8 +29,10 @@ using System; using System.Collections; using System.Collections.Generic; using System.IO; +using System.Net; using System.Net.Sockets; using System.Reflection; +using System.Text; using System.Text.RegularExpressions; using System.Threading; using log4net; @@ -53,7 +55,11 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Concierge private List _scenes = new List(); private List _conciergedScenes = new List(); - private Dictionary> _sceneAttendees = new Dictionary>(); + private Dictionary> _sceneAttendees = + new Dictionary>(); + private Dictionary _attendeeNames = + new Dictionary(); + private bool _replacingChatModule = false; private IConfig _config; @@ -287,7 +293,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Concierge if (_conciergedScenes.Contains(agent.Scene)) { _log.DebugFormat("[Concierge]: {0} enters {1}", agent.Name, agent.Scene.RegionInfo.RegionName); - AddToAttendeeList(agent.UUID, agent.Scene); + AddToAttendeeList(agent.UUID, agent.Name, agent.Scene); WelcomeAvatar(agent, agent.Scene); AnnounceToAgentsRegion(agent.Scene, String.Format(_announceEntering, agent.Name, agent.Scene.RegionInfo.RegionName, _sceneAttendees[agent.Scene].Count)); @@ -308,15 +314,19 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Concierge } } - protected void AddToAttendeeList(UUID agentID, Scene scene) + protected void AddToAttendeeList(UUID agentID, string name, Scene scene) { lock (_sceneAttendees) { if (!_sceneAttendees.ContainsKey(scene)) _sceneAttendees[scene] = new List(); + List attendees = _sceneAttendees[scene]; if (!attendees.Contains(agentID)) + { attendees.Add(agentID); + _attendeeNames[agentID] = name; + } } } @@ -329,6 +339,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Concierge _log.WarnFormat("[Concierge]: attendee list missing for region {0}", scene.RegionInfo.RegionName); return; } + List attendees = _sceneAttendees[scene]; if (!attendees.Contains(agentID)) { @@ -336,7 +347,9 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Concierge name, scene.RegionInfo.RegionName); return; } + attendees.Remove(agentID); + _attendeeNames.Remove(agentID); } } @@ -362,21 +375,43 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Concierge StringBuilder list = new StringBuilder(); if (0 == attendees.Count) { - list.Append("", - scene.RegionInfo.RegionName, scene.RegionInfo.RegionID, - System.DateTime.UtcNow.ToString("s")); + list.Append(String.Format("", + scene.RegionInfo.RegionName, scene.RegionInfo.RegionID, + DateTime.UtcNow.ToString("s"))); } else { - list.Append("", - attendees.Count, scene.RegionInfo.RegionName, scene.RegionInfo.RegionID, - System.DateTime.UtcNow.ToString("s")); - + list.Append(String.Format("\n", + attendees.Count, scene.RegionInfo.RegionName, + scene.RegionInfo.RegionID, + DateTime.UtcNow.ToString("s"))); + foreach(UUID uuid in attendees) + { + string name = _attendeeNames[uuid]; + list.Append(String.Format(" \n", name, uuid)); + } + list.Append(""); } + string payload = list.ToString(); + _log.DebugFormat("[Concierge]: posting to {0}:\n{1}", _brokerURI, payload); // post via REST to broker + HttpWebRequest updatePost = WebRequest.Create(_brokerURI) as HttpWebRequest; + updatePost.Method = "POST"; + updatePost.ContentType = "text/xml"; + updatePost.ContentLength = payload.Length; + updatePost.UserAgent = "OpenSim.Concierge"; + + StreamWriter payloadStream = new StreamWriter(updatePost.GetRequestStream()); + payloadStream.Write(payload); + payloadStream.Close(); + + HttpWebResponse response = updatePost.GetResponse() as HttpWebResponse; + response.Close(); + _log.DebugFormat("[Concierge] broker update: status {0}", response.StatusCode); } + protected void WelcomeAvatar(ScenePresence agent, Scene scene) { // welcome mechanics: check whether we have a welcomes -- cgit v1.1