/// <summary> /// /// </summary> /// <param name="llsdRequest"></param> /// <returns></returns> public string NewAgentInventoryRequest(string request, string path, string param, OSHttpRequest httpRequest, OSHttpResponse httpResponse) { OSDMap map = (OSDMap)OSDParser.DeserializeLLSDXml(request); string asset_type = map["asset_type"].AsString(); m_log.Info("[CAPS]: NewAgentInventoryRequest Request is: " + map.ToString()); //m_log.Debug("asset upload request via CAPS" + llsdRequest.inventory_type + " , " + llsdRequest.asset_type); if (asset_type == "texture" || asset_type == "animation" || asset_type == "sound") { /* Disabled until we have a money module that can hook up to this * IMoneyModule mm = .RequestModuleInterface<IMoneyModule>(); * * if (mm != null) * { * if (!mm.UploadCovered(client, mm.UploadCharge)) * { * if (client != null) * client.SendAgentAlertMessage("Unable to upload asset. Insufficient funds.", false); * * map = new OSDMap(); * map["uploader"] = ""; * map["state"] = "error"; * return OSDParser.SerializeLLSDXmlString(map); * } * else * mm.ApplyUploadCharge(client.AgentId, mm.UploadCharge, "Upload asset."); * } */ } string assetName = map["name"].AsString(); string assetDes = map["description"].AsString(); UUID parentFolder = map["folder_id"].AsUUID(); string inventory_type = map["inventory_type"].AsString(); UUID newAsset = UUID.Random(); UUID newInvItem = UUID.Random(); string uploaderPath = Util.RandomClass.Next(5000, 8000).ToString("0000"); string uploadpath = m_service.CreateCAPS("Upload" + uploaderPath, uploaderPath); AssetUploader uploader = new AssetUploader(assetName, assetDes, newAsset, newInvItem, parentFolder, inventory_type, asset_type, uploadpath, "Upload" + uploaderPath, m_service, this); m_service.AddStreamHandler("Upload" + uploaderPath, new BinaryStreamHandler("POST", uploadpath, uploader.uploaderCaps)); string uploaderURL = m_service.HostUri + uploadpath; map = new OSDMap(); map["uploader"] = uploaderURL; map["state"] = "upload"; return(OSDParser.SerializeLLSDXmlString(map)); }
//public override string ToXml(Direction direction) //{ // if (direction == this.Direction) // return Packet.ToXmlString(this.Packet); // else // return base.ToXml(direction); //} //public override string ToStringNotation(Direction direction) //{ // if (direction == this.Direction) // return Packet.GetLLSD(this.Packet).ToString(); // else // return base.ToStringNotation(direction); //} public override byte[] Serialize() { OSDMap map = new OSDMap(5); map["Name"] = OSD.FromString(this.Name); map["Host"] = OSD.FromString(this.Host); map["PacketBytes"] = OSD.FromBinary(this.Packet.ToBytes()); map["Direction"] = OSD.FromInteger((int)this.Direction); map["ContentType"] = OSD.FromString(this.ContentType); return(OpenMetaverse.Utils.StringToBytes(map.ToString())); }
public override byte[] Serialize() { OSDMap map = new OSDMap(6); map["Name"] = OSD.FromString(this.Name); map["Host"] = OSD.FromString(this.Host); map["Data"] = OSD.FromString(this.Data.ToString()); map["Direction"] = OSD.FromInteger((int)this.Direction); map["ContentType"] = OSD.FromString(this.ContentType); map["Protocol"] = OSD.FromString(this.Protocol); return(OpenMetaverse.Utils.StringToBytes(map.ToString())); }
/// <summary> /// Return summar information in the form: /// <pre> /// {"totalUsers": "34", /// "totalSessions": "233", /// ... /// } /// </pre> /// </summary> /// <param name="pModelResult"></param> /// <returns></returns> public string RenderJson(Hashtable pModelResult) { stats_default_page_values values = (stats_default_page_values)pModelResult["hdata"]; OSDMap summaryInfo = new OSDMap(); summaryInfo.Add("totalUsers", new OSDString(values.total_num_users.ToString())); summaryInfo.Add("totalSessions", new OSDString(values.total_num_sessions.ToString())); summaryInfo.Add("averageClientFPS", new OSDString(values.avg_client_fps.ToString())); summaryInfo.Add("averageClientMem", new OSDString(values.avg_client_mem_use.ToString())); summaryInfo.Add("averageSimFPS", new OSDString(values.avg_sim_fps.ToString())); summaryInfo.Add("averagePingTime", new OSDString(values.avg_ping.ToString())); summaryInfo.Add("totalKBOut", new OSDString(values.total_kb_out.ToString())); summaryInfo.Add("totalKBIn", new OSDString(values.total_kb_in.ToString())); return(summaryInfo.ToString()); }
/// <summary> /// Get the user's display name, currently not used? /// </summary> /// <param name="mDhttpMethod"></param> /// <param name="agentID"></param> /// <returns></returns> private Hashtable ProcessGetDisplayName(Hashtable mDhttpMethod, UUID agentID) { //I've never seen this come in, so for now... do nothing OSDMap rm = (OSDMap)OSDParser.DeserializeLLSDXml((string)mDhttpMethod["requestbody"]); m_log.Error("[DisplayNamesModule] : Report this! GetDisplayName : " + rm.ToString()); //Send back data Hashtable responsedata = new Hashtable(); responsedata["int_response_code"] = 200; //501; //410; //404; responsedata["content_type"] = "text/plain"; responsedata["keepalive"] = false; responsedata["str_response_string"] = ""; return(responsedata); }
public override byte[] Serialize() { OSDMap map = new OSDMap(7); map["Name"] = OSD.FromString(this.Name); map["Host"] = OSD.FromString(this.Host); map["ResponseBytes"] = OSD.FromBinary(this.ResponseBytes); map["Direction"] = OSD.FromInteger((int)this.Direction); map["ContentType"] = OSD.FromString(this.ContentType); map["Protocol"] = OSD.FromString(this.Protocol); OSDArray responseHeadersArray = new OSDArray(); foreach (String key in this.ResponseHeaders.Keys) { OSDMap rMap = new OSDMap(1); rMap[key] = OSD.FromString(this.ResponseHeaders[key]); responseHeadersArray.Add(rMap); } map["ResponseHeaders"] = responseHeadersArray; return(Utils.StringToBytes(map.ToString())); }
/// <summary> /// Process any incoming events, check to see if we have a message created for the event, /// </summary> /// <param name="eventName"></param> /// <param name="body"></param> private void EventQueueEventHandler(string eventName, OSDMap body) { IMessage message = Messages.MessageUtils.DecodeEvent(eventName, body); if (message != null) { Simulator.Client.Network.CapsEvents.BeginRaiseEvent(eventName, message, Simulator); #region Stats Tracking if (Simulator.Client.Settings.TRACK_UTILIZATION) { Simulator.Client.Stats.Update(eventName, OpenMetaverse.Stats.Type.Message, 0, body.ToString().Length); } #endregion } else { Logger.Log("No Message handler exists for event " + eventName + ". Unable to decode. Will try Generic Handler next", Helpers.LogLevel.Warning); Logger.Log("Please report this information to http://jira.openmetaverse.org/: \n" + body, Helpers.LogLevel.Debug); // try generic decoder next which takes a caps event and tries to match it to an existing packet if (body.Type == OSDType.Map) { OSDMap map = (OSDMap)body; Packet packet = Packet.BuildPacket(eventName, map); if (packet != null) { NetworkManager.IncomingPacket incomingPacket; incomingPacket.Simulator = Simulator; incomingPacket.Packet = packet; Logger.DebugLog("Serializing " + packet.Type.ToString() + " capability with generic handler", Simulator.Client); Simulator.Client.Network.PacketInbox.Enqueue(incomingPacket); } else { Logger.Log("No Packet or Message handler exists for " + eventName, Helpers.LogLevel.Warning); } } } }
private void saveSessionArchiveToolStripMenuItem_Click(object sender, EventArgs e) { if (saveFileDialog1.ShowDialog() == DialogResult.OK) { OSDMap map = new OSDMap(1); OSDArray sessionArray = new OSDArray(); foreach (ListViewItem item in listViewSessions.Items) { if (item.Tag is Session) { Session data = null; if (item.Tag is SessionCaps) { data = (SessionCaps)item.Tag; } else if (item.Tag is SessionEvent) { data = (SessionEvent)item.Tag; } else if (item.Tag is SessionLogin) { data = (SessionLogin)item.Tag; } else if (item.Tag is SessionPacket) { data = (SessionPacket)item.Tag; } else { Console.WriteLine("Not a valid session type?"); continue; } //Type t = item.Tag.GetType(); //Session data = (SessionCaps)item.Tag; OSDMap session = new OSDMap(); //session["name"] = OSD.FromString(item.Name); //session["image_index"] = OSD.FromInteger(item.ImageIndex); session["id"] = OSD.FromString(item.SubItems[0].Text); //session["protocol"] = OSD.FromString(item.SubItems[1].Text); //session["packet"] = OSD.FromString(item.SubItems[2].Text); //session["size"] = OSD.FromString(item.SubItems[3].Text); //session["host"] = OSD.FromString(item.SubItems[4].Text); session["type"] = OSD.FromString(data.GetType().ToString()); session["tag"] = OSD.FromBinary(data.Serialize()); sessionArray.Add(session); } } map["sessions"] = sessionArray; try { File.WriteAllText(saveFileDialog1.FileName, map.ToString()); } catch (Exception ex) { MessageBox.Show("Exception occurred trying to save session archive: " + ex); } } }
//public override string ToXml(Direction direction) //{ // if (direction == this.Direction) // return Packet.ToXmlString(this.Packet); // else // return base.ToXml(direction); //} //public override string ToStringNotation(Direction direction) //{ // if (direction == this.Direction) // return Packet.GetLLSD(this.Packet).ToString(); // else // return base.ToStringNotation(direction); //} public override byte[] Serialize() { OSDMap map = new OSDMap(5); map["Name"] = OSD.FromString(this.Name); map["Host"] = OSD.FromString(this.Host); map["PacketBytes"] = OSD.FromBinary(this.Packet.ToBytes()); map["Direction"] = OSD.FromInteger((int)this.Direction); map["ContentType"] = OSD.FromString(this.ContentType); return OpenMetaverse.Utils.StringToBytes(map.ToString()); }
public override byte[] Serialize() { OSDMap map = new OSDMap(6); map["Name"] = OSD.FromString(this.Name); map["Host"] = OSD.FromString(this.Host); map["Data"] = OSD.FromString(this.Data.ToString()); map["Direction"] = OSD.FromInteger((int)this.Direction); map["ContentType"] = OSD.FromString(this.ContentType); map["Protocol"] = OSD.FromString(this.Protocol); return OpenMetaverse.Utils.StringToBytes(map.ToString()); }
private OSDMap RezAvatarRequest(SceneInfo sceneInfo, UserSession session, Vector3 relativeStartPosition, Vector3 lookAt) { string urlFriendlySceneName = WebUtil.UrlEncode(sceneInfo.Name); Uri publicRegionSeedCap = sceneInfo.PublicSeedCapability; // Send a request to the public region seed cap OSDMap publicRegionCaps = null; try { publicRegionCaps = OSDParser.Deserialize(UntrustedHttpWebRequest.GetUntrustedUrl(publicRegionSeedCap)) as OSDMap; if (publicRegionCaps != null) { publicRegionCaps = publicRegionCaps["capabilities"] as OSDMap; } } catch { } if (publicRegionCaps != null) { // Parse the rez_avatar/request cap out Uri rezAvatarRequestCap = publicRegionCaps["rez_avatar/request"].AsUri(); if (rezAvatarRequestCap != null) { string firstName, lastName; Util.GetFirstLastName(session.User.Name, out firstName, out lastName); OSDMap rezAvatarRequest = new OSDMap { { "agent_id", OSD.FromUUID(session.User.ID) }, { "session_id", OSD.FromUUID(session.SessionID) }, { "position", OSD.FromVector3(relativeStartPosition) }, { "look_at", OSD.FromVector3(lookAt) }, { "velocity", OSD.FromVector3(Vector3.Zero) }, { "child", OSD.FromBoolean(false) } }; OSDMap rezAvatarResponse = null; try { rezAvatarResponse = OSDParser.Deserialize(UntrustedHttpWebRequest.PostToUntrustedUrl( rezAvatarRequestCap, OSDParser.SerializeLLSDXmlString(rezAvatarRequest))) as OSDMap; } catch { } if (rezAvatarResponse != null) { // Parse the response data if (rezAvatarResponse["connect"].AsBoolean()) { return(rezAvatarResponse); } else { m_log.Warn("Cannot rez avatar " + session.User.Name + ", rez_avatar/request to " + rezAvatarRequestCap + " failed: " + rezAvatarResponse["message"].AsString()); } } } else { m_log.Warn("Cannot rez avatar " + session.User.Name + ", rez_avatar/request capability not found in public region seed capability: " + publicRegionCaps.ToString()); } } else { m_log.Warn("Cannot rez avatar " + session.User.Name + ", Failed to fetch public region seed capability from " + publicRegionSeedCap); } return(null); }
private void saveSessionArchiveToolStripMenuItem_Click(object sender, EventArgs e) { if (saveFileDialog1.ShowDialog() == DialogResult.OK) { OSDMap map = new OSDMap(1); OSDArray sessionArray = new OSDArray(); foreach (Session item in m_SessionViewItems) { OSDMap session = new OSDMap(); session["type"] = OSD.FromString(item.GetType().Name); session["tag"] = OSD.FromBinary(item.Serialize()); sessionArray.Add(session); } map["sessions"] = sessionArray; try { File.WriteAllText(saveFileDialog1.FileName, map.ToString()); } catch (Exception ex) { MessageBox.Show("Exception occurred trying to save session archive: " + ex); } } }
/// <summary> /// Start a friends confrence /// </summary> /// <param name="participants"><seealso cref="UUID"/> List of UUIDs to start a confrence with</param> /// <param name="tmp_session_id"><seealso cref="UUID"/>a Unique UUID that will be returned in the OnJoinedGroupChat callback></param> public void StartIMConfrence(List <UUID> participants,UUID tmp_session_id) { if (Client.Network.CurrentSim == null || Client.Network.CurrentSim.Caps == null) throw new Exception("ChatSessionRequest capability is not currently available"); Uri url = Client.Network.CurrentSim.Caps.CapabilityURI("ChatSessionRequest"); if (url != null) { OSDMap req = new OSDMap(); req.Add("method", OSD.FromString("start conference")); OSDArray members = new OSDArray(); foreach(UUID participant in participants) members.Add(OSD.FromUUID(participant)); req.Add("params",members); req.Add("session-id", OSD.FromUUID(tmp_session_id)); byte[] postData = StructuredData.OSDParser.SerializeLLSDXmlBytes(req); Console.WriteLine(req.ToString()); CapsClient request = new CapsClient(url); request.StartRequest(postData); } else { throw new Exception("ChatSessionRequest capability is not currently available"); } }
private void saveSessionArchiveToolStripMenuItem_Click(object sender, EventArgs e) { if (saveFileDialog1.ShowDialog() == DialogResult.OK) { OSDMap map = new OSDMap(1); OSDArray sessionArray = new OSDArray(); foreach (ListViewItem item in listViewSessions.Items) { if (item.Tag is Packet || item.Tag is IMessage || item.Tag is String || item.Tag is CapsRequest) { OSDMap session = new OSDMap(); session["name"] = OSD.FromString(item.Name); session["image_index"] = OSD.FromInteger(item.ImageIndex); session["id"] = OSD.FromString(item.SubItems[0].Text); session["protocol"] = OSD.FromString(item.SubItems[1].Text); session["packet"] = OSD.FromString(item.SubItems[2].Text); session["size"] = OSD.FromString(item.SubItems[3].Text); session["host"] = OSD.FromString(item.SubItems[4].Text); if (item.Tag is Packet) { session["tag"] = OSD.FromBinary(Utils.StringToBytes(DecodePacket.PacketToString((Packet)item.Tag))); } else if (item.Tag is IMessage) { IMessage m = (IMessage)item.Tag; session["tag"] = OSD.FromBinary(Utils.StringToBytes(m.Serialize().ToString())); } else if (item.Tag is System.String) { session["tag"] = OSD.FromBinary(Utils.StringToBytes(Tag.ToString())); } else { // we intentionally don't save login requests or responses session["tag"] = OSD.FromBinary(Utils.StringToBytes("Encoding disabled for this item type")); } sessionArray.Add(session); } } map["sessions"] = sessionArray; try { File.WriteAllText(saveFileDialog1.FileName, map.ToString()); } catch (Exception ex) { MessageBox.Show("Exception occurred trying to save session archive: " + ex); } } }
/// <summary> /// Convert active connections information to JSON string. Returns a structure: /// <pre> /// {"regionName": { /// "presenceName": { /// "name": "presenceName", /// "position": "<x,y,z>", /// "isRoot": "false", /// "throttle": { /// }, /// "queue": { /// } /// }, /// ... // multiple presences in the scene /// }, /// ... // multiple regions in the sim /// } /// /// </pre> /// </summary> /// <param name="pModelResult"></param> /// <returns></returns> public string RenderJson(Hashtable pModelResult) { List<Scene> all_scenes = (List<Scene>) pModelResult["hdata"]; OSDMap regionInfo = new OSDMap(); foreach (Scene scene in all_scenes) { OSDMap sceneInfo = new OpenMetaverse.StructuredData.OSDMap(); List<ScenePresence> avatarInScene = scene.GetScenePresences(); foreach (ScenePresence av in avatarInScene) { OSDMap presenceInfo = new OSDMap(); presenceInfo.Add("Name", new OSDString(av.Name)); Dictionary<string,string> queues = new Dictionary<string, string>(); if (av.ControllingClient is IStatsCollector) { IStatsCollector isClient = (IStatsCollector) av.ControllingClient; queues = decodeQueueReport(isClient.Report()); } OSDMap queueInfo = new OpenMetaverse.StructuredData.OSDMap(); foreach (KeyValuePair<string, string> kvp in queues) { queueInfo.Add(kvp.Key, new OSDString(kvp.Value)); } sceneInfo.Add("queues", queueInfo); if (av.IsChildAgent) presenceInfo.Add("isRoot", new OSDString("false")); else presenceInfo.Add("isRoot", new OSDString("true")); if (av.AbsolutePosition == DefaultNeighborPosition) { presenceInfo.Add("position", new OSDString("<0, 0, 0>")); } else { presenceInfo.Add("position", new OSDString(string.Format("<{0},{1},{2}>", (int)av.AbsolutePosition.X, (int) av.AbsolutePosition.Y, (int) av.AbsolutePosition.Z)) ); } Dictionary<string, int> throttles = DecodeClientThrottles(av.ControllingClient.GetThrottlesPacked(1)); OSDMap throttleInfo = new OpenMetaverse.StructuredData.OSDMap(); foreach (string throttlename in throttles.Keys) { throttleInfo.Add(throttlename, new OSDString(throttles[throttlename].ToString())); } presenceInfo.Add("throttle", throttleInfo); sceneInfo.Add(av.Name, presenceInfo); } regionInfo.Add(scene.RegionInfo.RegionName, sceneInfo); } return regionInfo.ToString(); }
/// <summary> /// Process any incoming events, check to see if we have a message created for the event, /// </summary> /// <param name="eventName"></param> /// <param name="body"></param> private void EventQueueEventHandler(string eventName, OSDMap body) { IMessage message = Messages.MessageUtils.DecodeEvent(eventName, body); if (message != null) { Simulator.Client.Network.CapsEvents.BeginRaiseEvent(eventName, message, Simulator); #region Stats Tracking if (Simulator.Client.Settings.TRACK_UTILIZATION) { Simulator.Client.Stats.Update(eventName, OpenMetaverse.Stats.Type.Message, 0, body.ToString().Length); } #endregion } else { Logger.Log("No Message handler exists for event " + eventName + ". Unable to decode. Will try Generic Handler next", Helpers.LogLevel.Warning); Logger.Log("Please report this information to http://jira.openmetaverse.co/: \n" + body, Helpers.LogLevel.Debug); // try generic decoder next which takes a caps event and tries to match it to an existing packet if (body.Type == OSDType.Map) { OSDMap map = (OSDMap)body; Packet packet = Packet.BuildPacket(eventName, map); if (packet != null) { NetworkManager.IncomingPacket incomingPacket; incomingPacket.Simulator = Simulator; incomingPacket.Packet = packet; Logger.DebugLog("Serializing " + packet.Type.ToString() + " capability with generic handler", Simulator.Client); Simulator.Client.Network.PacketInbox.Enqueue(incomingPacket); } else { Logger.Log("No Packet or Message handler exists for " + eventName, Helpers.LogLevel.Warning); } } } }
private Hashtable ProcessChatSessionRequest(Hashtable mDhttpMethod, UUID Agent) { OSDMap rm = (OSDMap)OSDParser.DeserializeLLSDXml((string)mDhttpMethod["requestbody"]); string method = rm["method"].AsString(); UUID sessionid = UUID.Parse(rm["session-id"].AsString()); IScenePresence SP = findScenePresence(Agent); IEventQueueService eq = SP.Scene.RequestModuleInterface <IEventQueueService>(); if (method == "start conference") { //Create the session. CreateSession(new ChatSession() { Members = new List <ChatSessionMember>(), SessionID = sessionid, Name = SP.Name + " Conference" }); OSDArray parameters = (OSDArray)rm["params"]; //Add other invited members. foreach (OSD param in parameters) { AddDefaultPermsMemberToSession(param.AsUUID(), sessionid); } //Add us to the session! AddMemberToGroup(new ChatSessionMember() { AvatarKey = Agent, CanVoiceChat = true, IsModerator = true, MuteText = false, MuteVoice = false, HasBeenAdded = true }, sessionid); //Inform us about our room OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock block = new OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock(); block.AgentID = Agent; block.CanVoiceChat = true; block.IsModerator = true; block.MuteText = false; block.MuteVoice = false; block.Transition = "ENTER"; eq.ChatterBoxSessionAgentListUpdates(sessionid, new OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock[] { block }, Agent, "ENTER", findScene(Agent).RegionInfo.RegionHandle); OpenMetaverse.Messages.Linden.ChatterBoxSessionStartReplyMessage cs = new OpenMetaverse.Messages.Linden.ChatterBoxSessionStartReplyMessage(); cs.VoiceEnabled = true; cs.TempSessionID = UUID.Random(); cs.Type = 1; cs.Success = true; cs.SessionID = sessionid; cs.SessionName = SP.Name + " Conference"; cs.ModeratedVoice = true; Hashtable responsedata = new Hashtable(); responsedata["int_response_code"] = 200; //501; //410; //404; responsedata["content_type"] = "text/plain"; responsedata["keepalive"] = false; OSDMap map = cs.Serialize(); responsedata["str_response_string"] = map.ToString(); return(responsedata); } else if (method == "accept invitation") { //They would like added to the group conversation List <OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock> Us = new List <OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock>(); List <OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock> NotUsAgents = new List <OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock>(); ChatSession session = GetSession(sessionid); if (session != null) { ChatSessionMember thismember = FindMember(sessionid, Agent); //Tell all the other members about the incoming member foreach (ChatSessionMember sessionMember in session.Members) { OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock block = new OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock(); block.AgentID = sessionMember.AvatarKey; block.CanVoiceChat = sessionMember.CanVoiceChat; block.IsModerator = sessionMember.IsModerator; block.MuteText = sessionMember.MuteText; block.MuteVoice = sessionMember.MuteVoice; block.Transition = "ENTER"; if (sessionMember.AvatarKey == thismember.AvatarKey) { Us.Add(block); } else { if (sessionMember.HasBeenAdded) // Don't add not joined yet agents. They don't watn to be here. { NotUsAgents.Add(block); } } } thismember.HasBeenAdded = true; foreach (ChatSessionMember member in session.Members) { if (member.AvatarKey == thismember.AvatarKey) { //Tell 'us' about all the other agents in the group eq.ChatterBoxSessionAgentListUpdates(session.SessionID, NotUsAgents.ToArray(), member.AvatarKey, "ENTER", findScene(Agent).RegionInfo.RegionHandle); } else { //Tell 'other' agents about the new agent ('us') eq.ChatterBoxSessionAgentListUpdates(session.SessionID, Us.ToArray(), member.AvatarKey, "ENTER", findScene(Agent).RegionInfo.RegionHandle); } } } Hashtable responsedata = new Hashtable(); responsedata["int_response_code"] = 200; //501; //410; //404; responsedata["content_type"] = "text/plain"; responsedata["keepalive"] = false; responsedata["str_response_string"] = "Accepted"; return(responsedata); } else if (method == "mute update") { //Check if the user is a moderator Hashtable responsedata = new Hashtable(); if (!CheckModeratorPermission(Agent, sessionid)) { responsedata["int_response_code"] = 200; //501; //410; //404; responsedata["content_type"] = "text/plain"; responsedata["keepalive"] = false; responsedata["str_response_string"] = "Accepted"; return(responsedata); } OSDMap parameters = (OSDMap)rm["params"]; UUID AgentID = parameters["agent_id"].AsUUID(); OSDMap muteInfoMap = (OSDMap)parameters["mute_info"]; ChatSessionMember thismember = FindMember(sessionid, Agent); if (muteInfoMap.ContainsKey("text")) { thismember.MuteText = muteInfoMap["text"].AsBoolean(); } if (muteInfoMap.ContainsKey("voice")) { thismember.MuteVoice = muteInfoMap["voice"].AsBoolean(); } OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock block = new OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock(); block.AgentID = thismember.AvatarKey; block.CanVoiceChat = thismember.CanVoiceChat; block.IsModerator = thismember.IsModerator; block.MuteText = thismember.MuteText; block.MuteVoice = thismember.MuteVoice; block.Transition = "ENTER"; // Send an update to the affected user eq.ChatterBoxSessionAgentListUpdates(sessionid, new OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock[] { block }, AgentID, "", findScene(Agent).RegionInfo.RegionHandle); responsedata["int_response_code"] = 200; //501; //410; //404; responsedata["content_type"] = "text/plain"; responsedata["keepalive"] = false; responsedata["str_response_string"] = "Accepted"; return(responsedata); } else { m_log.Warn("ChatSessionRequest : " + method); Hashtable responsedata = new Hashtable(); responsedata["int_response_code"] = 200; //501; //410; //404; responsedata["content_type"] = "text/plain"; responsedata["keepalive"] = false; responsedata["str_response_string"] = "Accepted"; return(responsedata); } }
/// <summary> /// Convert active connections information to JSON string. Returns a structure: /// <pre> /// {"regionName": { /// "presenceName": { /// "name": "presenceName", /// "position": "<x,y,z>", /// "isRoot": "false", /// "throttle": { /// }, /// "queue": { /// } /// }, /// ... // multiple presences in the scene /// }, /// ... // multiple regions in the sim /// } /// /// </pre> /// </summary> /// <param name="pModelResult"></param> /// <returns></returns> public string RenderJson(Hashtable pModelResult) { List <Scene> all_scenes = (List <Scene>)pModelResult["hdata"]; OSDMap regionInfo = new OSDMap(); foreach (Scene scene in all_scenes) { OSDMap sceneInfo = new OpenMetaverse.StructuredData.OSDMap(); List <ScenePresence> avatarInScene = scene.GetScenePresences(); foreach (ScenePresence av in avatarInScene) { OSDMap presenceInfo = new OSDMap(); presenceInfo.Add("Name", new OSDString(av.Name)); Dictionary <string, string> queues = new Dictionary <string, string>(); if (av.ControllingClient is IStatsCollector) { IStatsCollector isClient = (IStatsCollector)av.ControllingClient; queues = decodeQueueReport(isClient.Report()); } OSDMap queueInfo = new OpenMetaverse.StructuredData.OSDMap(); foreach (KeyValuePair <string, string> kvp in queues) { queueInfo.Add(kvp.Key, new OSDString(kvp.Value)); } sceneInfo.Add("queues", queueInfo); if (av.IsChildAgent) { presenceInfo.Add("isRoot", new OSDString("false")); } else { presenceInfo.Add("isRoot", new OSDString("true")); } if (av.AbsolutePosition == DefaultNeighborPosition) { presenceInfo.Add("position", new OSDString("<0, 0, 0>")); } else { presenceInfo.Add("position", new OSDString(string.Format("<{0},{1},{2}>", (int)av.AbsolutePosition.X, (int)av.AbsolutePosition.Y, (int)av.AbsolutePosition.Z))); } Dictionary <string, int> throttles = DecodeClientThrottles(av.ControllingClient.GetThrottlesPacked(1)); OSDMap throttleInfo = new OpenMetaverse.StructuredData.OSDMap(); foreach (string throttlename in throttles.Keys) { throttleInfo.Add(throttlename, new OSDString(throttles[throttlename].ToString())); } presenceInfo.Add("throttle", throttleInfo); sceneInfo.Add(av.Name, presenceInfo); } regionInfo.Add(scene.RegionInfo.RegionName, sceneInfo); } return(regionInfo.ToString()); }
public override byte[] Serialize() { OSDMap map = new OSDMap(7); map["Name"] = OSD.FromString(this.Name); map["Host"] = OSD.FromString(this.Host); map["ResponseBytes"] = OSD.FromBinary(this.ResponseBytes); map["Direction"] = OSD.FromInteger((int)this.Direction); map["ContentType"] = OSD.FromString(this.ContentType); map["Protocol"] = OSD.FromString(this.Protocol); OSDArray responseHeadersArray = new OSDArray(); foreach (String key in this.ResponseHeaders.Keys) { OSDMap rMap = new OSDMap(1); rMap[key] = OSD.FromString(this.ResponseHeaders[key]); responseHeadersArray.Add(rMap); } map["ResponseHeaders"] = responseHeadersArray; return Utils.StringToBytes(map.ToString()); }