public bool PicksUpdate(OSDMap json, ref JsonRpcResponse response) { if (!json.ContainsKey("params")) { response.Error.Code = ErrorCode.ParseError; response.Error.Message = "no parameters supplied"; m_log.DebugFormat("Avatar Picks Update Request"); return(false); } string result = string.Empty; UserProfilePick pick = new UserProfilePick(); object Pick = (object)pick; OSD.DeserializeMembers(ref Pick, (OSDMap)json["params"]); if (Service.PicksUpdate(ref pick, ref result)) { response.Result = OSD.SerializeMembers(pick); return(true); } response.Error.Code = ErrorCode.InternalError; response.Error.Message = "unable to update pick"; return(false); }
public bool PickInfoRequest(OSDMap json, ref JsonRpcResponse response) { OSD tmpParams; if (!json.TryGetValue("params", out tmpParams) || !(tmpParams is OSDMap)) { response.Error.Code = ErrorCode.ParseError; response.Error.Message = "no parameters supplied"; m_log.DebugFormat("Avatar Picks Info Request"); return(false); } string result = string.Empty; UserProfilePick pick = new UserProfilePick(); object Pick = (object)pick; OSD.DeserializeMembers(ref Pick, (OSDMap)tmpParams); if (Service.PickInfoRequest(ref pick, ref result)) { response.Result = OSD.SerializeMembers(pick); return(true); } response.Error.Code = ErrorCode.InternalError; response.Error.Message = string.Format("{0}", result); return(false); }
public bool UpdatePicksRecord(UserProfilePick pick) { string query = string.Empty; query += "INSERT INTO userpicks VALUES ("; query += "?PickId,"; query += "?CreatorId,"; query += "?TopPick,"; query += "?ParcelId,"; query += "?Name,"; query += "?Desc,"; query += "?SnapshotId,"; query += "?User,"; query += "?Original,"; query += "?SimName,"; query += "?GlobalPos,"; query += "?SortOrder,"; query += "?Enabled) "; query += "ON DUPLICATE KEY UPDATE "; query += "parceluuid=?ParcelId,"; query += "name=?Name,"; query += "description=?Desc,"; query += "snapshotuuid=?SnapshotId,"; query += "pickuuid=?PickId,"; query += "posglobal=?GlobalPos"; try { using (MySqlConnection dbcon = new MySqlConnection(ConnectionString)) { dbcon.Open(); using (MySqlCommand cmd = new MySqlCommand(query, dbcon)) { cmd.Parameters.AddWithValue("?PickId", pick.PickId.ToString()); cmd.Parameters.AddWithValue("?CreatorId", pick.CreatorId.ToString()); cmd.Parameters.AddWithValue("?TopPick", pick.TopPick.ToString()); cmd.Parameters.AddWithValue("?ParcelId", pick.ParcelId.ToString()); cmd.Parameters.AddWithValue("?Name", pick.Name.ToString()); cmd.Parameters.AddWithValue("?Desc", pick.Desc.ToString()); cmd.Parameters.AddWithValue("?SnapshotId", pick.SnapshotId.ToString()); cmd.Parameters.AddWithValue("?User", pick.User.ToString()); cmd.Parameters.AddWithValue("?Original", pick.OriginalName.ToString()); cmd.Parameters.AddWithValue("?SimName", pick.SimName.ToString()); cmd.Parameters.AddWithValue("?GlobalPos", pick.GlobalPos); cmd.Parameters.AddWithValue("?SortOrder", pick.SortOrder.ToString()); cmd.Parameters.AddWithValue("?Enabled", pick.Enabled.ToString()); cmd.ExecuteNonQuery(); } } } catch (Exception e) { m_log.DebugFormat("[PROFILES_DATA]" + ": UpdateAvatarNotes exception {0}", e.Message); return(false); } return(true); }
public UserProfilePick GetPickInfo(UUID avatarId, UUID pickId) { string query = string.Empty; UserProfilePick pick = new UserProfilePick(); query += "SELECT * FROM userpicks WHERE "; query += "creatoruuid = ?CreatorId AND "; query += "pickuuid = ?PickId"; try { using (MySqlConnection dbcon = new MySqlConnection(ConnectionString)) { dbcon.Open(); using (MySqlCommand cmd = new MySqlCommand(query, dbcon)) { cmd.Parameters.AddWithValue("?CreatorId", avatarId.ToString()); cmd.Parameters.AddWithValue("?PickId", pickId.ToString()); using (MySqlDataReader reader = cmd.ExecuteReader()) { if (reader.HasRows) { reader.Read(); string description = (string)reader["description"]; if (string.IsNullOrEmpty(description)) { description = "No description given."; } UUID.TryParse((string)reader["pickuuid"], out pick.PickId); UUID.TryParse((string)reader["creatoruuid"], out pick.CreatorId); UUID.TryParse((string)reader["parceluuid"], out pick.ParcelId); UUID.TryParse((string)reader["snapshotuuid"], out pick.SnapshotId); pick.GlobalPos = (string)reader["posglobal"]; pick.Gatekeeper = (string)reader["gatekeeper"]; bool.TryParse((string)reader["toppick"], out pick.TopPick); bool.TryParse((string)reader["enabled"], out pick.Enabled); pick.Name = (string)reader["name"]; pick.Desc = description; pick.User = (string)reader["user"]; pick.OriginalName = (string)reader["originalname"]; pick.SimName = (string)reader["simname"]; pick.SortOrder = (int)reader["sortorder"]; } } } dbcon.Close(); } } catch (Exception e) { m_log.ErrorFormat("[PROFILES_DATA]" + ": GetPickInfo exception {0}", e.Message); } return(pick); }
public UserProfilePick GetPickInfo(UUID avatarId, UUID pickId) { string query = string.Empty; UserProfilePick pick = new UserProfilePick(); query += "SELECT * FROM userpicks WHERE "; query += "creatoruuid = :CreatorId AND "; query += "pickuuid = :PickId"; try { using (NpgsqlConnection dbcon = new NpgsqlConnection(ConnectionString)) { dbcon.Open(); using (NpgsqlCommand cmd = new NpgsqlCommand(query, dbcon)) { cmd.Parameters.Add(m_database.CreateParameter("CreatorId", avatarId)); cmd.Parameters.Add(m_database.CreateParameter("PickId", pickId)); using (NpgsqlDataReader reader = cmd.ExecuteReader()) { if (reader.HasRows) { reader.Read(); string description = (string)reader["description"]; if (string.IsNullOrEmpty(description)) { description = "No description given."; } pick.PickId = DBGuid.FromDB(reader["pickuuid"]); pick.CreatorId = DBGuid.FromDB(reader["creatoruuid"]); pick.ParcelId = DBGuid.FromDB(reader["parceluuid"]); pick.SnapshotId = DBGuid.FromDB(reader["snapshotuuid"]); pick.GlobalPos = (string)reader["posglobal"].ToString(); pick.TopPick = Convert.ToBoolean(reader["toppick"]); pick.Enabled = Convert.ToBoolean(reader["enabled"]); pick.Name = reader["name"].ToString(); pick.Desc = reader["description"].ToString(); pick.ParcelName = reader["user"].ToString(); pick.OriginalName = reader["originalname"].ToString(); pick.SimName = reader["simname"].ToString(); pick.SortOrder = (int)reader["sortorder"]; } } } dbcon.Close(); } } catch (Exception e) { m_log.Error("[PROFILES_DATA]: GetPickInfo exception ", e); } return(pick); }
/// <summary> /// Updates the userpicks /// </summary> /// <param name='remoteClient'> /// Remote client. /// </param> /// <param name='pickID'> /// Pick I. /// </param> /// <param name='creatorID'> /// the creator of the pick /// </param> /// <param name='topPick'> /// Top pick. /// </param> /// <param name='name'> /// Name. /// </param> /// <param name='desc'> /// Desc. /// </param> /// <param name='snapshotID'> /// Snapshot I. /// </param> /// <param name='sortOrder'> /// Sort order. /// </param> /// <param name='enabled'> /// Enabled. /// </param> public void PickInfoUpdate(IClientAPI remoteClient, UUID pickID, UUID creatorID, bool topPick, string name, string desc, UUID snapshotID, int sortOrder, bool enabled) { m_log.DebugFormat("[PROFILES]: Start PickInfoUpdate Name: {0} PickId: {1} SnapshotId: {2}", name, pickID.ToString(), snapshotID.ToString()); UserProfilePick pick = new UserProfilePick(); string serverURI = string.Empty; GetUserProfileServerURI(remoteClient.AgentId, out serverURI); ScenePresence p = FindPresence(remoteClient.AgentId); Vector3 avaPos = p.AbsolutePosition; // Getting the global position for the Avatar Vector3 posGlobal = new Vector3(remoteClient.Scene.RegionInfo.RegionLocX * Constants.RegionSize + avaPos.X, remoteClient.Scene.RegionInfo.RegionLocY * Constants.RegionSize + avaPos.Y, avaPos.Z); string landOwnerName = string.Empty; ILandObject land = p.Scene.LandChannel.GetLandObject(avaPos.X, avaPos.Y); if (land.LandData.IsGroupOwned) { IGroupsModule groupMod = p.Scene.RequestModuleInterface <IGroupsModule>(); UUID groupId = land.LandData.GroupID; GroupRecord groupRecord = groupMod.GetGroupRecord(groupId); landOwnerName = groupRecord.GroupName; } else { IUserAccountService accounts = p.Scene.RequestModuleInterface <IUserAccountService>(); UserAccount user = accounts.GetUserAccount(p.Scene.RegionInfo.ScopeID, land.LandData.OwnerID); landOwnerName = user.Name; } pick.PickId = pickID; pick.CreatorId = creatorID; pick.TopPick = topPick; pick.Name = name; pick.Desc = desc; pick.ParcelId = p.currentParcelUUID; pick.SnapshotId = snapshotID; pick.User = landOwnerName; pick.SimName = remoteClient.Scene.RegionInfo.RegionName; pick.GlobalPos = posGlobal.ToString(); pick.SortOrder = sortOrder; pick.Enabled = enabled; object Pick = (object)pick; if (!JsonRpcRequest(ref Pick, "picks_update", serverURI, UUID.Random().ToString())) { remoteClient.SendAgentAlertMessage( "Error updating pick", false); } m_log.DebugFormat("[PROFILES]: Finish PickInfoUpdate {0} {1}", pick.Name, pick.PickId.ToString()); }
public bool UpdatePicksRecord(UserProfilePick pick) { string query = string.Empty; query = @"WITH upsert AS ( UPDATE userpicks SET pickuuid = :PickId, creatoruuid = :CreatorId, toppick = :TopPick, parceluuid = :ParcelId, name = :Name, description = :Desc, snapshotuuid = :SnapshotId, ""user"" = :User, originalname = :Original, simname = :SimName, posglobal = :GlobalPos, sortorder = :SortOrder, enabled = :Enabled RETURNING * ) INSERT INTO userpicks (pickuuid,creatoruuid,toppick,parceluuid,name,description, snapshotuuid,""user"",originalname,simname,posglobal,sortorder,enabled) SELECT :PickId,:CreatorId,:TopPick,:ParcelId,:Name,:Desc,:SnapshotId,:User, :Original,:SimName,:GlobalPos,:SortOrder,:Enabled WHERE NOT EXISTS ( SELECT * FROM upsert )"; try { using (NpgsqlConnection dbcon = new NpgsqlConnection(ConnectionString)) { dbcon.Open(); using (NpgsqlCommand cmd = new NpgsqlCommand(query, dbcon)) { cmd.Parameters.Add(m_database.CreateParameter("PickId", pick.PickId)); cmd.Parameters.Add(m_database.CreateParameter("CreatorId", pick.CreatorId)); cmd.Parameters.Add(m_database.CreateParameter("TopPick", pick.TopPick)); cmd.Parameters.Add(m_database.CreateParameter("ParcelId", pick.ParcelId)); cmd.Parameters.Add(m_database.CreateParameter("Name", pick.Name)); cmd.Parameters.Add(m_database.CreateParameter("Desc", pick.Desc)); cmd.Parameters.Add(m_database.CreateParameter("SnapshotId", pick.SnapshotId)); cmd.Parameters.Add(m_database.CreateParameter("User", pick.ParcelName)); cmd.Parameters.Add(m_database.CreateParameter("Original", pick.OriginalName)); cmd.Parameters.Add(m_database.CreateParameter("SimName", pick.SimName)); cmd.Parameters.Add(m_database.CreateParameter("GlobalPos", pick.GlobalPos)); cmd.Parameters.Add(m_database.CreateParameter("SortOrder", pick.SortOrder)); cmd.Parameters.Add(m_database.CreateParameter("Enabled", pick.Enabled)); cmd.ExecuteNonQuery(); } } } catch (Exception e) { m_log.Error("[PROFILES_DATA]: UpdateAvatarNotes exception ", e); return(false); } return(true); }
public bool UpdatePicksRecord(UserProfilePick pick) { string query = string.Empty; query = @"INSERT INTO userpicks VALUES ( :PickId, :CreatorId, :TopPick, :ParcelId,:Name, :Desc, :SnapshotId,:User, :Original, :SimName, :GlobalPos, :SortOrder, :Enabled) where not exists ( select pickid from userpicks where pickid = :pickid); Update userpicks set parceluuid = :ParcelId, name = :Name, description = :Desc, snapshotuuid = :SnapshotId, pickuuid = :PickId, posglobal = :GlobalPos where pickid = :PickId; "; try { using (NpgsqlConnection dbcon = new NpgsqlConnection(ConnectionString)) { dbcon.Open(); using (NpgsqlCommand cmd = new NpgsqlCommand(query, dbcon)) { cmd.Parameters.AddWithValue("PickId", pick.PickId.ToString()); cmd.Parameters.AddWithValue("CreatorId", pick.CreatorId.ToString()); cmd.Parameters.AddWithValue("TopPick", pick.TopPick.ToString()); cmd.Parameters.AddWithValue("ParcelId", pick.ParcelId.ToString()); cmd.Parameters.AddWithValue("Name", pick.Name.ToString()); cmd.Parameters.AddWithValue("Desc", pick.Desc.ToString()); cmd.Parameters.AddWithValue("SnapshotId", pick.SnapshotId.ToString()); cmd.Parameters.AddWithValue("User", pick.User.ToString()); cmd.Parameters.AddWithValue("Original", pick.OriginalName.ToString()); cmd.Parameters.AddWithValue("SimName", pick.SimName.ToString()); cmd.Parameters.AddWithValue("GlobalPos", pick.GlobalPos); cmd.Parameters.AddWithValue("SortOrder", pick.SortOrder.ToString()); cmd.Parameters.AddWithValue("Enabled", pick.Enabled.ToString()); cmd.ExecuteNonQuery(); } } } catch (Exception e) { m_log.DebugFormat("[PROFILES_DATA]" + ": UpdateAvatarNotes exception {0}", e.Message); return(false); } return(true); }
/// <summary> /// Handles the pick info request. /// </summary> /// <param name='sender'> /// Sender. /// </param> /// <param name='method'> /// Method. /// </param> /// <param name='args'> /// Arguments. /// </param> public void PickInfoRequest(Object sender, string method, List <String> args) { if (!(sender is IClientAPI)) { return; } UUID targetID; UUID.TryParse(args[0], out targetID); string serverURI = string.Empty; GetUserProfileServerURI(targetID, out serverURI); IClientAPI remoteClient = (IClientAPI)sender; UserProfilePick pick = new UserProfilePick(); UUID.TryParse(args[0], out pick.CreatorId); UUID.TryParse(args[1], out pick.PickId); object Pick = (object)pick; if (!JsonRpcRequest(ref Pick, "pickinforequest", serverURI, UUID.Random().ToString())) { remoteClient.SendAgentAlertMessage( "Error selecting pick", false); } pick = (UserProfilePick)Pick; if (pick.SnapshotId == UUID.Zero) { // In case of a new UserPick, the data may not be ready and we would send wrong data, skip it... m_log.DebugFormat("[PROFILES]: PickInfoRequest: SnapshotID is {0}", UUID.Zero.ToString()); return; } Vector3 globalPos; Vector3.TryParse(pick.GlobalPos, out globalPos); m_log.DebugFormat("[PROFILES]: PickInfoRequest: {0} : {1}", pick.Name.ToString(), pick.SnapshotId.ToString()); remoteClient.SendPickInfoReply(pick.PickId, pick.CreatorId, pick.TopPick, pick.ParcelId, pick.Name, pick.Desc, pick.SnapshotId, pick.User, pick.OriginalName, pick.SimName, globalPos, pick.SortOrder, pick.Enabled); }
public bool UpdatePicksRecord(UserProfilePick pick) { string query = string.Empty; query += "INSERT OR REPLACE INTO userpicks ("; query += "pickuuid, "; query += "creatoruuid, "; query += "toppick, "; query += "parceluuid, "; query += "name, "; query += "description, "; query += "snapshotuuid, "; query += "user, "; query += "originalname, "; query += "simname, "; query += "posglobal, "; query += "sortorder, "; query += "enabled ) "; query += "VALUES ("; query += ":PickId,"; query += ":CreatorId,"; query += ":TopPick,"; query += ":ParcelId,"; query += ":Name,"; query += ":Desc,"; query += ":SnapshotId,"; query += ":User,"; query += ":Original,"; query += ":SimName,"; query += ":GlobalPos,"; query += ":SortOrder,"; query += ":Enabled) "; try { using (SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand()) { int top_pick; int.TryParse(pick.TopPick.ToString(), out top_pick); int enabled; int.TryParse(pick.Enabled.ToString(), out enabled); cmd.CommandText = query; cmd.Parameters.AddWithValue(":PickId", pick.PickId.ToString()); cmd.Parameters.AddWithValue(":CreatorId", pick.CreatorId.ToString()); cmd.Parameters.AddWithValue(":TopPick", top_pick); cmd.Parameters.AddWithValue(":ParcelId", pick.ParcelId.ToString()); cmd.Parameters.AddWithValue(":Name", pick.Name.ToString()); cmd.Parameters.AddWithValue(":Desc", pick.Desc.ToString()); cmd.Parameters.AddWithValue(":SnapshotId", pick.SnapshotId.ToString()); cmd.Parameters.AddWithValue(":User", pick.User.ToString()); cmd.Parameters.AddWithValue(":Original", pick.OriginalName.ToString()); cmd.Parameters.AddWithValue(":SimName", pick.SimName.ToString()); cmd.Parameters.AddWithValue(":GlobalPos", pick.GlobalPos); cmd.Parameters.AddWithValue(":SortOrder", pick.SortOrder.ToString()); cmd.Parameters.AddWithValue(":Enabled", enabled); cmd.ExecuteNonQuery(); } } catch (Exception e) { m_log.DebugFormat("[PROFILES_DATA]" + ": UpdateAvatarNotes exception {0}", e.Message); return(false); } return(true); }
public bool PicksUpdate(ref UserProfilePick pick, ref string result) { return(ProfilesData.UpdatePicksRecord(pick)); }
public bool PickInfoRequest(ref UserProfilePick pick, ref string result) { pick = ProfilesData.GetPickInfo(pick.CreatorId, pick.PickId); result = "OK"; return(true); }
/// <summary> /// Updates the userpicks /// </summary> /// <param name='remoteClient'> /// Remote client. /// </param> /// <param name='pickID'> /// Pick I. /// </param> /// <param name='creatorID'> /// the creator of the pick /// </param> /// <param name='topPick'> /// Top pick. /// </param> /// <param name='name'> /// Name. /// </param> /// <param name='desc'> /// Desc. /// </param> /// <param name='snapshotID'> /// Snapshot I. /// </param> /// <param name='sortOrder'> /// Sort order. /// </param> /// <param name='enabled'> /// Enabled. /// </param> public void PickInfoUpdate(IClientAPI remoteClient, UUID pickID, UUID creatorID, bool topPick, string name, string desc, UUID snapshotID, int sortOrder, bool enabled) { //TODO: See how this works with NPC, May need to test m_log.DebugFormat("[PROFILES]: Start PickInfoUpdate Name: {0} PickId: {1} SnapshotId: {2}", name, pickID.ToString(), snapshotID.ToString()); UserProfilePick pick = new UserProfilePick(); string serverURI = string.Empty; GetUserProfileServerURI(remoteClient.AgentId, out serverURI); ScenePresence p = FindPresence(remoteClient.AgentId); Vector3 avaPos = p.AbsolutePosition; // Getting the global position for the Avatar Vector3 posGlobal = new Vector3(remoteClient.Scene.RegionInfo.WorldLocX + avaPos.X, remoteClient.Scene.RegionInfo.WorldLocY + avaPos.Y, avaPos.Z); string landParcelName = "My Parcel"; UUID landParcelID = p.currentParcelUUID; ILandObject land = p.Scene.LandChannel.GetLandObject(avaPos.X, avaPos.Y); if (land != null) { // If land found, use parcel uuid from here because the value from SP will be blank if the avatar hasnt moved landParcelName = land.LandData.Name; landParcelID = land.LandData.GlobalID; } else { m_log.WarnFormat( "[PROFILES]: PickInfoUpdate found no parcel info at {0},{1} in {2}", avaPos.X, avaPos.Y, p.Scene.Name); } pick.PickId = pickID; pick.CreatorId = creatorID; pick.TopPick = topPick; pick.Name = name; pick.Desc = desc; pick.ParcelId = landParcelID; pick.SnapshotId = snapshotID; pick.ParcelName = landParcelName; pick.SimName = remoteClient.Scene.RegionInfo.RegionName; pick.Gatekeeper = MyGatekeeper; pick.GlobalPos = posGlobal.ToString(); pick.SortOrder = sortOrder; pick.Enabled = enabled; object Pick = (object)pick; if (!rpc.JsonRpcRequest(ref Pick, "picks_update", serverURI, UUID.Random().ToString())) { remoteClient.SendAgentAlertMessage( "Error updating pick", false); return; } m_log.DebugFormat("[PROFILES]: Finish PickInfoUpdate {0} {1}", pick.Name, pick.PickId.ToString()); }
/// <summary> /// Handles the pick info request. /// </summary> /// <param name='sender'> /// Sender. /// </param> /// <param name='method'> /// Method. /// </param> /// <param name='args'> /// Arguments. /// </param> public void PickInfoRequest(Object sender, string method, List <String> args) { if (!(sender is IClientAPI)) { return; } UUID targetID; UUID.TryParse(args [0], out targetID); string serverURI = string.Empty; GetUserProfileServerURI(targetID, out serverURI); string theirGatekeeperURI; GetUserGatekeeperURI(targetID, out theirGatekeeperURI); IClientAPI remoteClient = (IClientAPI)sender; UserProfilePick pick = new UserProfilePick(); UUID.TryParse(args [0], out pick.CreatorId); UUID.TryParse(args [1], out pick.PickId); object Pick = (object)pick; if (!rpc.JsonRpcRequest(ref Pick, "pickinforequest", serverURI, UUID.Random().ToString())) { remoteClient.SendAgentAlertMessage( "Error selecting pick", false); return; } pick = (UserProfilePick)Pick; Vector3 globalPos = new Vector3(Vector3.Zero); // Smoke and mirrors if (pick.Gatekeeper == MyGatekeeper) { Vector3.TryParse(pick.GlobalPos, out globalPos); } else { // Setup the illusion string region = string.Format("{0} {1}", pick.Gatekeeper, pick.SimName); GridRegion target = Scene.GridService.GetRegionByName(Scene.RegionInfo.ScopeID, region); if (target == null) { // This is a dead or unreachable region } else { // Work our slight of hand int x = target.RegionLocX; int y = target.RegionLocY; dynamic synthX = globalPos.X - (globalPos.X / Constants.RegionSize) * Constants.RegionSize; synthX += x; globalPos.X = synthX; dynamic synthY = globalPos.Y - (globalPos.Y / Constants.RegionSize) * Constants.RegionSize; synthY += y; globalPos.Y = synthY; } } m_log.DebugFormat("[PROFILES]: PickInfoRequest: {0} : {1}", pick.Name.ToString(), pick.SnapshotId.ToString()); // Pull the rabbit out of the hat remoteClient.SendPickInfoReply(pick.PickId, pick.CreatorId, pick.TopPick, pick.ParcelId, pick.Name, pick.Desc, pick.SnapshotId, pick.ParcelName, pick.OriginalName, pick.SimName, globalPos, pick.SortOrder, pick.Enabled); }