From 9f6b3e2357e76b9b85b447da189b4bf4163edd3c Mon Sep 17 00:00:00 2001 From: Teravus Ovares Date: Tue, 13 Nov 2007 22:48:19 +0000 Subject: * Added AvatarPicker in Standalone mode. Works for finding avatar to ban, manually trying to add a friend (with the add button) or useful to those who are curious which usernames have visited your standalone sim. Important for future development :D. * Grid mode always returns 0 results until the Grid Communications portion is done. --- OpenSim/Region/ClientStack/ClientView.API.cs | 5 +++ .../ClientStack/ClientView.ProcessPackets.cs | 11 +++++- OpenSim/Region/ClientStack/ClientView.cs | 15 ++++++--- .../Region/Communications/OGS1/OGS1UserServices.cs | 8 +++++ .../Environment/Scenes/Scene.PacketHandlers.cs | 39 ++++++++++++++++++++++ OpenSim/Region/Environment/Scenes/Scene.cs | 5 +-- OpenSim/Region/Environment/Scenes/ScenePresence.cs | 4 +++ .../Region/Examples/SimpleApp/MyNpcCharacter.cs | 4 +++ 8 files changed, 83 insertions(+), 8 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/ClientStack/ClientView.API.cs b/OpenSim/Region/ClientStack/ClientView.API.cs index b24b207..77c1701 100644 --- a/OpenSim/Region/ClientStack/ClientView.API.cs +++ b/OpenSim/Region/ClientStack/ClientView.API.cs @@ -55,6 +55,7 @@ namespace OpenSim.Region.ClientStack public event UpdateAgent OnAgentUpdate; public event AgentRequestSit OnAgentRequestSit; public event AgentSit OnAgentSit; + public event AvatarPickerRequest OnAvatarPickerRequest; public event StartAnim OnStartAnim; public event Action OnRequestAvatarsData; public event LinkObjects OnLinkObjects; @@ -705,6 +706,10 @@ namespace OpenSim.Region.ClientStack sendXfer.DataPacket.Data = data; OutPacket(sendXfer); } + public void SendAvatarPickerReply(AvatarPickerReplyPacket replyPacket) + { + OutPacket(replyPacket); + } /// /// diff --git a/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs b/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs index 82ad1c8..1383ad9 100644 --- a/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs +++ b/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs @@ -217,7 +217,16 @@ namespace OpenSim.Region.ClientStack OnAgentSit(this, agentSit.AgentData.AgentID); } break; - + case PacketType.AvatarPickerRequest: + AvatarPickerRequestPacket avRequestQuery = (AvatarPickerRequestPacket)Pack; + AvatarPickerRequestPacket.AgentDataBlock Requestdata = avRequestQuery.AgentData; + AvatarPickerRequestPacket.DataBlock querydata = avRequestQuery.Data; + //System.Console.WriteLine("Agent Sends:" + Helpers.FieldToUTF8String(querydata.Name)); + if (OnAvatarPickerRequest != null) + { + OnAvatarPickerRequest(this, Requestdata.AgentID, Requestdata.QueryID, Helpers.FieldToUTF8String(querydata.Name)); + } + break; #endregion #region Objects/m_sceneObjects diff --git a/OpenSim/Region/ClientStack/ClientView.cs b/OpenSim/Region/ClientStack/ClientView.cs index 839556d..353a24c 100644 --- a/OpenSim/Region/ClientStack/ClientView.cs +++ b/OpenSim/Region/ClientStack/ClientView.cs @@ -295,11 +295,16 @@ namespace OpenSim.Region.ClientStack queuedLast = false; // TODO: May be a bit expensive doing this twice. - throttleSentPeriod += nextPacket.Packet.ToBytes().Length; - - //is a out going packet - DebugPacket("OUT", nextPacket.Packet); - ProcessOutPacket(nextPacket.Packet); + + //Don't throttle AvatarPickerReplies!, they return a null .ToBytes()! + if (nextPacket.Packet.Type != PacketType.AvatarPickerReply) + throttleSentPeriod += nextPacket.Packet.ToBytes().Length; + + + //is a out going packet + DebugPacket("OUT", nextPacket.Packet); + ProcessOutPacket(nextPacket.Packet); + } } } diff --git a/OpenSim/Region/Communications/OGS1/OGS1UserServices.cs b/OpenSim/Region/Communications/OGS1/OGS1UserServices.cs index 990998e..cd60ac2 100644 --- a/OpenSim/Region/Communications/OGS1/OGS1UserServices.cs +++ b/OpenSim/Region/Communications/OGS1/OGS1UserServices.cs @@ -28,6 +28,7 @@ using System; using System.Collections; +using System.Collections.Generic; using System.Net; using libsecondlife; using Nwc.XmlRpc; @@ -85,6 +86,13 @@ namespace OpenSim.Region.Communications.OGS1 return GetUserProfile(firstName + " " + lastName); } + + public List GenerateAgentPickerRequestResponse(LLUUID queryID, string query) + { + List pickerlist = new List(); + + return pickerlist; + } public UserProfileData GetUserProfile(string name) { try diff --git a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs index 74e9a43..435022b 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs @@ -29,6 +29,7 @@ using System.Collections.Generic; using libsecondlife; using libsecondlife.Packets; using OpenSim.Framework; +using OpenSim.Framework.UserManagement; using OpenSim.Framework.Console; namespace OpenSim.Region.Environment.Scenes @@ -155,5 +156,43 @@ namespace OpenSim.Region.Environment.Scenes } } } + public void ProcessAvatarPickerRequest(IClientAPI client, LLUUID avatarID, LLUUID RequestID, string query) + { + //EventManager.TriggerAvatarPickerRequest(); + + + List AvatarResponses = new List(); + AvatarResponses = CommsManager.GenerateAgentPickerRequestResponse(RequestID, query); + + AvatarPickerReplyPacket replyPacket = new AvatarPickerReplyPacket(); + AvatarPickerReplyPacket.DataBlock[] searchData = new AvatarPickerReplyPacket.DataBlock[AvatarResponses.Count]; + AvatarPickerReplyPacket.AgentDataBlock agentData = new AvatarPickerReplyPacket.AgentDataBlock(); + + agentData.AgentID = avatarID; + agentData.QueryID = RequestID; + replyPacket.AgentData = agentData; + byte[] bytes = new byte[AvatarResponses.Count * 32]; + + int i = 0; + foreach (AvatarPickerAvatar item in AvatarResponses) + { + LLUUID translatedIDtem = item.AvatarID; + searchData[i] = new AvatarPickerReplyPacket.DataBlock(); + searchData[i].AvatarID = translatedIDtem; + searchData[i].FirstName = Helpers.StringToField((string)item.firstName); + searchData[i].LastName = Helpers.StringToField((string)item.lastName); + i++; + + } + if (AvatarResponses.Count == 0) + { + searchData = new AvatarPickerReplyPacket.DataBlock[0]; + } + replyPacket.Data = searchData; + client.SendAvatarPickerReply(replyPacket); + + + } + } } \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index bf56fe8..d7e36c5 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -38,10 +38,10 @@ using OpenSim.Framework; using OpenSim.Framework.Communications; using OpenSim.Framework.Communications.Cache; using OpenSim.Framework.Console; +using OpenSim.Region.Environment.LandManagement; using OpenSim.Framework.Servers; using OpenSim.Region.Capabilities; using OpenSim.Region.Environment.Interfaces; -using OpenSim.Region.Environment.LandManagement; using OpenSim.Region.Environment.Modules; using OpenSim.Region.Environment.Scenes.Scripting; using OpenSim.Region.Environment.Types; @@ -732,7 +732,8 @@ namespace OpenSim.Region.Environment.Scenes client.OnRemoveTaskItem += RemoveTaskInventory; client.OnGrabObject += ProcessObjectGrab; - + client.OnAvatarPickerRequest += ProcessAvatarPickerRequest; + EventManager.TriggerOnNewClient(client); } diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index c9c24fe..3c6cad8 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs @@ -32,9 +32,11 @@ using libsecondlife; using libsecondlife.Packets; using OpenSim.Framework; using OpenSim.Framework.Console; +using OpenSim.Framework.Communications; using OpenSim.Region.Environment.Types; using OpenSim.Region.Physics.Manager; + namespace OpenSim.Region.Environment.Scenes { public partial class ScenePresence : EntityBase @@ -274,6 +276,7 @@ namespace OpenSim.Region.Environment.Scenes m_controllingClient.OnAgentRequestSit += HandleAgentRequestSit; m_controllingClient.OnAgentSit += HandleAgentSit; m_controllingClient.OnSetAlwaysRun += HandleSetAlwaysRun; + // ControllingClient.OnStartAnim += new StartAnim(this.SendAnimPack); // ControllingClient.OnChildAgentStatus += new StatusChange(this.ChildStatusChange); //ControllingClient.OnStopMovement += new GenericCall2(this.StopMovement); @@ -1227,5 +1230,6 @@ namespace OpenSim.Region.Environment.Scenes { m_controllingClient.SendWearables(m_wearables, m_wearablesSerial++); } + } } diff --git a/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs index 86bb532..61402be 100644 --- a/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs +++ b/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs @@ -71,6 +71,7 @@ namespace SimpleApp public event UpdateAgent OnAgentUpdate; public event AgentRequestSit OnAgentRequestSit; public event AgentSit OnAgentSit; + public event AvatarPickerRequest OnAvatarPickerRequest; public event Action OnRequestAvatarsData; public event AddNewPrim OnAddPrim; public event ObjectDuplicate OnObjectDuplicate; @@ -179,7 +180,10 @@ namespace SimpleApp public virtual void SendStartPingCheck(byte seq) { } + public virtual void SendAvatarPickerReply(AvatarPickerReplyPacket response) + { + } public virtual void SendKillObject(ulong regionHandle, uint localID) { } -- cgit v1.1