/*
* 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 OpenMetaverse;
using OpenSim.Framework;
namespace OpenSim.Data
{
///
/// An interface for connecting to user storage servers.
///
public interface IUserDataPlugin : IPlugin
{
///
/// Returns a user profile from a database via their UUID
///
/// The user's UUID
/// The user data profile. Returns null if no user is found
UserProfileData GetUserByUUID(UUID user);
///
/// Returns a users profile by searching their username parts
///
/// Account firstname
/// Account lastname
/// The user data profile. Null if no user is found
UserProfileData GetUserByName(string fname, string lname);
///
/// Get a user from a given uri.
///
///
/// The user data profile. Null if no user is found.
UserProfileData GetUserByUri(Uri uri);
///
/// 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.
/// A list of user details. If there are no results than either an empty list or null can be returned
List GeneratePickerResults(UUID queryID, string query);
///
/// Returns the current agent for a user searching by it's UUID
///
/// The users UUID
/// The current agent session. Null if no session was found
UserAgentData GetAgentByUUID(UUID user);
///
/// Returns the current session agent for a user searching by username
///
/// The users account name
/// The current agent session
UserAgentData GetAgentByName(string name);
///
/// Returns the current session agent for a user searching by username parts
///
/// The users first account name
/// The users account surname
/// The current agent session
UserAgentData GetAgentByName(string fname, string lname);
///
/// Stores new web-login key for user during web page login
///
///
void StoreWebLoginKey(UUID agentID, UUID webLoginKey);
///
/// Adds a new User profile to the database
///
/// UserProfile to add
void AddNewUserProfile(UserProfileData user);
///
/// Updates an existing user profile
///
/// UserProfile to update
bool UpdateUserProfile(UserProfileData user);
///
/// Adds a new agent to the database
///
/// 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(UUID friendlistowner, UUID 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(UUID friendlistowner, UUID 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(UUID friendlistowner, UUID friend, uint perms);
///
/// Returns a list of FriendsListItems that describe the friends and permissions in the friend relationship for UUID friendslistowner
///
/// The agent that we're retreiving the friends Data.
List GetUserFriendList(UUID friendlistowner);
///
/// Returns a list of
/// A of , mapping the s to s.
///
Dictionary GetFriendRegionInfos(List uuids);
///
/// Attempts to move currency units between accounts (NOT RELIABLE / TRUSTWORTHY. DONT TRY RUN YOUR OWN CURRENCY EXCHANGE WITH REAL VALUES)
///
/// The account to transfer from
/// The account to transfer to
/// The amount to transfer
/// Successful?
bool MoneyTransferRequest(UUID from, UUID to, uint amount);
///
/// Attempts to move inventory between accounts, if inventory is copyable it will be copied into the target account.
///
/// User to transfer from
/// User to transfer to
/// Specified inventory item
/// Successful?
bool InventoryTransferRequest(UUID from, UUID to, UUID inventory);
///
/// Initialises the plugin (artificial constructor)
///
void Initialise(string connect);
///
/// Gets the user appearance
///
AvatarAppearance GetUserAppearance(UUID user);
void UpdateUserAppearance(UUID user, AvatarAppearance appearance);
void ResetAttachments(UUID userID);
void LogoutUsers(UUID regionID);
}
public class UserDataInitialiser : PluginInitialiserBase
{
private string connect;
public UserDataInitialiser (string s) { connect = s; }
public override void Initialise (IPlugin plugin)
{
IUserDataPlugin p = plugin as IUserDataPlugin;
p.Initialise (connect);
}
}
}