diff --git a/OpenSim/Framework/Data.DB4o/DB4oUserData.cs b/OpenSim/Framework/Data.DB4o/DB4oUserData.cs index e0973f1dc1..acd14fa269 100644 --- a/OpenSim/Framework/Data.DB4o/DB4oUserData.cs +++ b/OpenSim/Framework/Data.DB4o/DB4oUserData.cs @@ -133,6 +133,31 @@ namespace OpenSim.Framework.Data.DB4o } } + #region User Friends List Data + + public void AddNewUserFriend(LLUUID friendlistowner, LLUUID friend, uint perms) + { + //MainLog.Instance.Verbose("FRIEND", "Stub AddNewUserFriend called"); + } + + public void RemoveUserFriend(LLUUID friendlistowner, LLUUID friend) + { + //MainLog.Instance.Verbose("FRIEND", "Stub RemoveUserFriend called"); + } + public void UpdateUserFriendPerms(LLUUID friendlistowner, LLUUID friend, uint perms) + { + //MainLog.Instance.Verbose("FRIEND", "Stub UpdateUserFriendPerms called"); + } + + + public List GetUserFriendList(LLUUID friendlistowner) + { + //MainLog.Instance.Verbose("FRIEND", "Stub GetUserFriendList called"); + return new List(); + } + + #endregion + public List GeneratePickerResults(LLUUID queryID, string query) { //Do nothing yet diff --git a/OpenSim/Framework/Data.MSSQL/MSSQLUserData.cs b/OpenSim/Framework/Data.MSSQL/MSSQLUserData.cs index 01ef559c2f..2c1d6d5aa6 100644 --- a/OpenSim/Framework/Data.MSSQL/MSSQLUserData.cs +++ b/OpenSim/Framework/Data.MSSQL/MSSQLUserData.cs @@ -99,6 +99,31 @@ namespace OpenSim.Framework.Data.MSSQL } } + #region User Friends List Data + + public void AddNewUserFriend(LLUUID friendlistowner, LLUUID friend, uint perms) + { + MainLog.Instance.Verbose("FRIEND", "Stub AddNewUserFriend called"); + } + + public void RemoveUserFriend(LLUUID friendlistowner, LLUUID friend) + { + MainLog.Instance.Verbose("FRIEND", "Stub RemoveUserFriend called"); + } + public void UpdateUserFriendPerms(LLUUID friendlistowner, LLUUID friend, uint perms) + { + MainLog.Instance.Verbose("FRIEND", "Stub UpdateUserFriendPerms called"); + } + + + public List GetUserFriendList(LLUUID friendlistowner) + { + MainLog.Instance.Verbose("FRIEND", "Stub GetUserFriendList called"); + return new List(); + } + + #endregion + public List GeneratePickerResults(LLUUID queryID, string query) { List returnlist = new List(); diff --git a/OpenSim/Framework/Data.MySQL/MySQLUserData.cs b/OpenSim/Framework/Data.MySQL/MySQLUserData.cs index 2d96f6e620..c8f051731f 100644 --- a/OpenSim/Framework/Data.MySQL/MySQLUserData.cs +++ b/OpenSim/Framework/Data.MySQL/MySQLUserData.cs @@ -145,6 +145,31 @@ namespace OpenSim.Framework.Data.MySQL } } + #region User Friends List Data + + public void AddNewUserFriend(LLUUID friendlistowner, LLUUID friend, uint perms) + { + MainLog.Instance.Verbose("FRIEND", "Stub AddNewUserFriend called"); + } + + public void RemoveUserFriend(LLUUID friendlistowner, LLUUID friend) + { + MainLog.Instance.Verbose("FRIEND", "Stub RemoveUserFriend called"); + } + public void UpdateUserFriendPerms(LLUUID friendlistowner, LLUUID friend, uint perms) + { + MainLog.Instance.Verbose("FRIEND", "Stub UpdateUserFriendPerms called"); + } + + + public List GetUserFriendList(LLUUID friendlistowner) + { + MainLog.Instance.Verbose("FRIEND", "Stub GetUserFriendList called"); + return new List(); + } + + #endregion + public List GeneratePickerResults(LLUUID queryID, string query) { List returnlist = new List(); diff --git a/OpenSim/Framework/Data.SQLite/SQLiteUserData.cs b/OpenSim/Framework/Data.SQLite/SQLiteUserData.cs index a719fa2fce..48a09d31f3 100644 --- a/OpenSim/Framework/Data.SQLite/SQLiteUserData.cs +++ b/OpenSim/Framework/Data.SQLite/SQLiteUserData.cs @@ -117,6 +117,31 @@ namespace OpenSim.Framework.Data.SQLite } } + #region User Friends List Data + + public void AddNewUserFriend(LLUUID friendlistowner, LLUUID friend, uint perms) + { + MainLog.Instance.Verbose("FRIEND", "Stub AddNewUserFriend called"); + } + + public void RemoveUserFriend(LLUUID friendlistowner, LLUUID friend) + { + MainLog.Instance.Verbose("FRIEND", "Stub RemoveUserFriend called"); + } + public void UpdateUserFriendPerms(LLUUID friendlistowner, LLUUID friend, uint perms) + { + MainLog.Instance.Verbose("FRIEND", "Stub UpdateUserFriendPerms called"); + } + + + public List GetUserFriendList(LLUUID friendlistowner) + { + MainLog.Instance.Verbose("FRIEND", "Stub GetUserFriendList called"); + return new List(); + } + + #endregion + public List GeneratePickerResults(LLUUID queryID, string query) { List returnlist = new List(); diff --git a/OpenSim/Framework/FriendListItem.cs b/OpenSim/Framework/FriendListItem.cs new file mode 100644 index 0000000000..0d7cb756d3 --- /dev/null +++ b/OpenSim/Framework/FriendListItem.cs @@ -0,0 +1,47 @@ +/* +* Copyright (c) Contributors, http://opensimulator.org/ +* See CONTRIBUTORS.TXT for a full list of copyright holders. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are met: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* * Neither the name of the OpenSim Project nor the +* names of its contributors may be used to endorse or promote products +* derived from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY +* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY +* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + +using System; +using System.Collections.Generic; +using libsecondlife; + +namespace OpenSim.Framework +{ + public class FriendListItem + { + public LLUUID FriendListOwner; + public LLUUID Friend; + + // These are what the list owner gives the friend permission to do + public uint FriendPerms; + + // These are what the friend gives the listowner permission to do + public uint FriendListOwnerPerms; + + } +} diff --git a/OpenSim/Framework/IUserData.cs b/OpenSim/Framework/IUserData.cs index d06784c25d..4e576b9c3c 100644 --- a/OpenSim/Framework/IUserData.cs +++ b/OpenSim/Framework/IUserData.cs @@ -50,6 +50,12 @@ namespace OpenSim.Framework /// The user data profile UserProfileData GetUserByName(string fname, string lname); + /// + /// Returns a list of UUIDs firstnames and lastnames that match string query entered into the avatar picker. + /// + /// ID associated with the user's query. This must match what the client sent + /// The filtered contents of the search box when the user hit search. + /// The user data profile List GeneratePickerResults(LLUUID queryID, string query); /// @@ -92,6 +98,34 @@ namespace OpenSim.Framework /// The agent to add void AddNewUserAgent(UserAgentData agent); + /// + /// Adds a new friend to the database for XUser + /// + /// The agent that who's friends list is being added to + /// The agent that being added to the friends list of the friends list owner + /// A uint bit vector for set perms that the friend being added has; 0 = none, 1=This friend can see when they sign on, 2 = map, 4 edit objects + void AddNewUserFriend(LLUUID friendlistowner, LLUUID friend, uint perms); + + /// + /// Delete friend on friendlistowner's friendlist. + /// + /// The agent that who's friends list is being updated + /// The Ex-friend agent + void RemoveUserFriend(LLUUID friendlistowner, LLUUID friend); + + /// + /// Update permissions for friend on friendlistowner's friendlist. + /// + /// The agent that who's friends list is being updated + /// The agent that is getting or loosing permissions + /// A uint bit vector for set perms that the friend being added has; 0 = none, 1=This friend can see when they sign on, 2 = map, 4 edit objects + void UpdateUserFriendPerms(LLUUID friendlistowner, LLUUID friend, uint perms); + + /// + /// Returns a list of FriendsListItems that describe the friends and permissions in the friend relationship for LLUUID friendslistowner + /// + /// The agent that we're retreiving the friends Data. + List GetUserFriendList(LLUUID friendlistowner); /// /// Attempts to move currency units between accounts (NOT RELIABLE / TRUSTWORTHY. DONT TRY RUN YOUR OWN CURRENCY EXCHANGE WITH REAL VALUES) /// diff --git a/OpenSim/Region/Environment/Modules/FriendsModule.cs b/OpenSim/Region/Environment/Modules/FriendsModule.cs index d9f09f785f..d2fcba96f1 100644 --- a/OpenSim/Region/Environment/Modules/FriendsModule.cs +++ b/OpenSim/Region/Environment/Modules/FriendsModule.cs @@ -27,24 +27,61 @@ */ using Nini.Config; +using System; +using System.Collections; +using System.Collections.Generic; +using OpenSim.Framework; +using OpenSim.Framework.Console; using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Scenes; +using libsecondlife; +using libsecondlife.Packets; namespace OpenSim.Region.Environment.Modules { public class FriendsModule : IRegionModule { - private Scene m_scene; + private List m_scenes = new List(); + private LogBase m_log; public void Initialise(Scene scene, IConfigSource config) { - m_scene = scene; + m_log = MainLog.Instance; + if (!m_scenes.Contains(scene)) + { + m_scenes.Add(scene); + scene.EventManager.OnNewClient += OnNewClient; + } + } + + private void OnNewClient(IClientAPI client) + { + FormFriendship(client,new Guid("c43a67ab-b196-4d62-936c-b40369547dee")); + FormFriendship(client, new Guid("0a2f777b-f44c-4662-8b22-c90ae038a3e6")); } public void PostInitialise() { } + private void FormFriendship(IClientAPI client, Guid friend) + { + foreach (Scene scene in m_scenes) + { + if (scene.Entities.ContainsKey(client.AgentId) && scene.Entities[client.AgentId] is ScenePresence) + { + OnlineNotificationPacket ONPack = new OnlineNotificationPacket(); + OnlineNotificationPacket.AgentBlockBlock[] AgentBlock = new OnlineNotificationPacket.AgentBlockBlock[1]; + + AgentBlock[0] = new OnlineNotificationPacket.AgentBlockBlock(); + AgentBlock[0].AgentID = new LLUUID(friend); + ONPack.AgentBlock = AgentBlock; + client.OutPacket(ONPack,ThrottleOutPacketType.Task); + } + } + + } + public void Close() { } @@ -56,7 +93,7 @@ namespace OpenSim.Region.Environment.Modules public bool IsSharedModule { - get { return false; } + get { return true; } } } } \ No newline at end of file diff --git a/OpenSim/Region/ScriptEngine/RemoteServer/EventManager.cs b/OpenSim/Region/ScriptEngine/RemoteServer/EventManager.cs index d539dc47c1..1e56b947a1 100644 --- a/OpenSim/Region/ScriptEngine/RemoteServer/EventManager.cs +++ b/OpenSim/Region/ScriptEngine/RemoteServer/EventManager.cs @@ -29,6 +29,8 @@ using System; using libsecondlife; using OpenSim.Framework; +using OpenSim.Grid.ScriptServer; +using OpenSim.Region.ScriptEngine.DotNetEngine; namespace OpenSim.Region.ScriptEngine.RemoteServer { @@ -39,7 +41,7 @@ namespace OpenSim.Region.ScriptEngine.RemoteServer internal class EventManager { - System.Collections.Generic.Dictionary remoteScript = new System.Collections.Generic.Dictionary(); + System.Collections.Generic.Dictionary remoteScript = new System.Collections.Generic.Dictionary(); private ScriptEngine myScriptEngine; diff --git a/prebuild.xml b/prebuild.xml index 49a40e6a91..bc1165e7d5 100644 --- a/prebuild.xml +++ b/prebuild.xml @@ -1176,6 +1176,9 @@ + + + @@ -1201,11 +1204,14 @@ ../../../bin/ + + +