public bool ClassifiedUpdate(UserClassifiedAdd ad, ref string result) { if(!ProfilesData.UpdateClassifiedRecord(ad, ref result)) { return false; } result = "success"; return true; }
public bool GetClassifiedInfo(ref UserClassifiedAdd ad, ref string result) { string query = string.Empty; query += "SELECT * FROM classifieds WHERE "; query += "classifieduuid = :AdId"; try { using (NpgsqlConnection dbcon = new NpgsqlConnection(ConnectionString)) { dbcon.Open(); using (NpgsqlCommand cmd = new NpgsqlCommand(query, dbcon)) { cmd.Parameters.AddWithValue("AdId", ad.ClassifiedId.ToString()); using (NpgsqlDataReader reader = cmd.ExecuteReader()) { if(reader.Read ()) { ad.CreatorId = GetUUID(reader["creatoruuid"]); ad.ParcelId = GetUUID(reader["parceluuid"]); ad.SnapshotId = GetUUID(reader["snapshotuuid"]); ad.CreationDate = Convert.ToInt32(reader["creationdate"]); ad.ExpirationDate = Convert.ToInt32(reader["expirationdate"]); ad.ParentEstate = Convert.ToInt32(reader["parentestate"]); ad.Flags = (byte)Convert.ToInt16(reader["classifiedflags"]); ad.Category = Convert.ToInt32(reader["category"]); ad.Price = Convert.ToInt16(reader["priceforlisting"]); ad.Name = reader["name"].ToString(); ad.Description = reader["description"].ToString(); ad.SimName = reader["simname"].ToString(); ad.GlobalPos = reader["posglobal"].ToString(); ad.ParcelName = reader["parcelname"].ToString(); } } } dbcon.Close(); } } catch (Exception e) { m_log.DebugFormat("[PROFILES_DATA]" + ": GetPickInfo exception {0}", e.Message); } return true; }
public bool UpdateClassifiedRecord(UserClassifiedAdd ad, ref string result) { string query = @"INSERT INTO classifieds ( ""classifieduuid"",""creatoruuid"", ""creationdate"", ""expirationdate"", ""category"", ""name"", ""description"", ""parceluuid"", ""parentestate"", ""snapshotuuid"", ""simname"", ""posglobal"", ""parcelname"", ""classifiedflags"", ""priceforlisting"") Select :ClassifiedId, :CreatorId, :CreatedDate, :ExpirationDate, :Category, :Name, :Description, :ParcelId, :ParentEstate, :SnapshotId, :SimName :GlobalPos, :ParcelName, :Flags, :ListingPrice Where not exists( Select ""classifieduuid"" from classifieds where ""classifieduuid"" = :ClassifiedId ); update classifieds set category =:Category, expirationdate = :ExpirationDate, name = :Name, description = :Description, parentestate = :ParentEstate, posglobal = :GlobalPos, parcelname = :ParcelName, classifiedflags = :Flags, priceforlisting = :ListingPrice, snapshotuuid = :SnapshotId where classifieduuid = :ClassifiedId ; "; if(string.IsNullOrEmpty(ad.ParcelName)) ad.ParcelName = "Unknown"; if(ad.ParcelId == null) ad.ParcelId = UUID.Zero; if(string.IsNullOrEmpty(ad.Description)) ad.Description = "No Description"; DateTime epoch = new DateTime(1970, 1, 1); DateTime now = DateTime.Now; TimeSpan epochnow = now - epoch; TimeSpan duration; DateTime expiration; TimeSpan epochexp; if(ad.Flags == 2) { duration = new TimeSpan(7,0,0,0); expiration = now.Add(duration); epochexp = expiration - epoch; } else { duration = new TimeSpan(365,0,0,0); expiration = now.Add(duration); epochexp = expiration - epoch; } ad.CreationDate = (int)epochnow.TotalSeconds; ad.ExpirationDate = (int)epochexp.TotalSeconds; try { using (NpgsqlConnection dbcon = new NpgsqlConnection(ConnectionString)) { dbcon.Open(); using (NpgsqlCommand cmd = new NpgsqlCommand(query, dbcon)) { cmd.Parameters.AddWithValue("ClassifiedId", ad.ClassifiedId.ToString()); cmd.Parameters.AddWithValue("CreatorId", ad.CreatorId.ToString()); cmd.Parameters.AddWithValue("CreatedDate", ad.CreationDate.ToString()); cmd.Parameters.AddWithValue("ExpirationDate", ad.ExpirationDate.ToString()); cmd.Parameters.AddWithValue("Category", ad.Category.ToString()); cmd.Parameters.AddWithValue("Name", ad.Name.ToString()); cmd.Parameters.AddWithValue("Description", ad.Description.ToString()); cmd.Parameters.AddWithValue("ParcelId", ad.ParcelId.ToString()); cmd.Parameters.AddWithValue("ParentEstate", ad.ParentEstate.ToString()); cmd.Parameters.AddWithValue("SnapshotId", ad.SnapshotId.ToString ()); cmd.Parameters.AddWithValue("SimName", ad.SimName.ToString()); cmd.Parameters.AddWithValue("GlobalPos", ad.GlobalPos.ToString()); cmd.Parameters.AddWithValue("ParcelName", ad.ParcelName.ToString()); cmd.Parameters.AddWithValue("Flags", ad.Flags.ToString()); cmd.Parameters.AddWithValue("ListingPrice", ad.Price.ToString ()); cmd.ExecuteNonQuery(); } } } catch (Exception e) { m_log.DebugFormat("[PROFILES_DATA]" + ": ClassifiedesUpdate exception {0}", e.Message); result = e.Message; return false; } return true; }
public bool UpdateClassifiedRecord(UserClassifiedAdd ad, ref string result) { string query = string.Empty; query += "INSERT INTO classifieds ("; query += "`classifieduuid`,"; query += "`creatoruuid`,"; query += "`creationdate`,"; query += "`expirationdate`,"; query += "`category`,"; query += "`name`,"; query += "`description`,"; query += "`parceluuid`,"; query += "`parentestate`,"; query += "`snapshotuuid`,"; query += "`simname`,"; query += "`posglobal`,"; query += "`parcelname`,"; query += "`classifiedflags`,"; query += "`priceforlisting`) "; query += "VALUES ("; query += "?ClassifiedId,"; query += "?CreatorId,"; query += "?CreatedDate,"; query += "?ExpirationDate,"; query += "?Category,"; query += "?Name,"; query += "?Description,"; query += "?ParcelId,"; query += "?ParentEstate,"; query += "?SnapshotId,"; query += "?SimName,"; query += "?GlobalPos,"; query += "?ParcelName,"; query += "?Flags,"; query += "?ListingPrice ) "; query += "ON DUPLICATE KEY UPDATE "; query += "category=?Category, "; query += "expirationdate=?ExpirationDate, "; query += "name=?Name, "; query += "description=?Description, "; query += "parentestate=?ParentEstate, "; query += "posglobal=?GlobalPos, "; query += "parcelname=?ParcelName, "; query += "classifiedflags=?Flags, "; query += "priceforlisting=?ListingPrice, "; query += "snapshotuuid=?SnapshotId"; if(string.IsNullOrEmpty(ad.ParcelName)) ad.ParcelName = "Unknown"; if(ad.ParcelId == null) ad.ParcelId = UUID.Zero; if(string.IsNullOrEmpty(ad.Description)) ad.Description = "No Description"; DateTime epoch = new DateTime(1970, 1, 1); DateTime now = DateTime.Now; TimeSpan epochnow = now - epoch; TimeSpan duration; DateTime expiration; TimeSpan epochexp; if(ad.Flags == 2) { duration = new TimeSpan(7,0,0,0); expiration = now.Add(duration); epochexp = expiration - epoch; } else { duration = new TimeSpan(365,0,0,0); expiration = now.Add(duration); epochexp = expiration - epoch; } ad.CreationDate = (int)epochnow.TotalSeconds; ad.ExpirationDate = (int)epochexp.TotalSeconds; try { using (MySqlConnection dbcon = new MySqlConnection(ConnectionString)) { dbcon.Open(); using (MySqlCommand cmd = new MySqlCommand(query, dbcon)) { cmd.Parameters.AddWithValue("?ClassifiedId", ad.ClassifiedId.ToString()); cmd.Parameters.AddWithValue("?CreatorId", ad.CreatorId.ToString()); cmd.Parameters.AddWithValue("?CreatedDate", ad.CreationDate.ToString()); cmd.Parameters.AddWithValue("?ExpirationDate", ad.ExpirationDate.ToString()); cmd.Parameters.AddWithValue("?Category", ad.Category.ToString()); cmd.Parameters.AddWithValue("?Name", ad.Name.ToString()); cmd.Parameters.AddWithValue("?Description", ad.Description.ToString()); cmd.Parameters.AddWithValue("?ParcelId", ad.ParcelId.ToString()); cmd.Parameters.AddWithValue("?ParentEstate", ad.ParentEstate.ToString()); cmd.Parameters.AddWithValue("?SnapshotId", ad.SnapshotId.ToString ()); cmd.Parameters.AddWithValue("?SimName", ad.SimName.ToString()); cmd.Parameters.AddWithValue("?GlobalPos", ad.GlobalPos.ToString()); cmd.Parameters.AddWithValue("?ParcelName", ad.ParcelName.ToString()); cmd.Parameters.AddWithValue("?Flags", ad.Flags.ToString()); cmd.Parameters.AddWithValue("?ListingPrice", ad.Price.ToString ()); cmd.ExecuteNonQuery(); } } } catch (Exception e) { m_log.DebugFormat("[PROFILES_DATA]" + ": ClassifiedesUpdate exception {0}", e.Message); result = e.Message; return false; } return true; }
public bool UpdateClassifiedRecord(UserClassifiedAdd ad, ref string result) { string query = string.Empty; query += "INSERT OR REPLACE INTO classifieds ("; query += "`classifieduuid`,"; query += "`creatoruuid`,"; query += "`creationdate`,"; query += "`expirationdate`,"; query += "`category`,"; query += "`name`,"; query += "`description`,"; query += "`parceluuid`,"; query += "`parentestate`,"; query += "`snapshotuuid`,"; query += "`simname`,"; query += "`posglobal`,"; query += "`parcelname`,"; query += "`classifiedflags`,"; query += "`priceforlisting`) "; query += "VALUES ("; query += ":ClassifiedId,"; query += ":CreatorId,"; query += ":CreatedDate,"; query += ":ExpirationDate,"; query += ":Category,"; query += ":Name,"; query += ":Description,"; query += ":ParcelId,"; query += ":ParentEstate,"; query += ":SnapshotId,"; query += ":SimName,"; query += ":GlobalPos,"; query += ":ParcelName,"; query += ":Flags,"; query += ":ListingPrice ) "; if(string.IsNullOrEmpty(ad.ParcelName)) ad.ParcelName = "Unknown"; if(ad.ParcelId == null) ad.ParcelId = UUID.Zero; if(string.IsNullOrEmpty(ad.Description)) ad.Description = "No Description"; DateTime epoch = new DateTime(1970, 1, 1); DateTime now = DateTime.Now; TimeSpan epochnow = now - epoch; TimeSpan duration; DateTime expiration; TimeSpan epochexp; if(ad.Flags == 2) { duration = new TimeSpan(7,0,0,0); expiration = now.Add(duration); epochexp = expiration - epoch; } else { duration = new TimeSpan(365,0,0,0); expiration = now.Add(duration); epochexp = expiration - epoch; } ad.CreationDate = (int)epochnow.TotalSeconds; ad.ExpirationDate = (int)epochexp.TotalSeconds; try { using (SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand()) { cmd.CommandText = query; cmd.Parameters.AddWithValue(":ClassifiedId", ad.ClassifiedId.ToString()); cmd.Parameters.AddWithValue(":CreatorId", ad.CreatorId.ToString()); cmd.Parameters.AddWithValue(":CreatedDate", ad.CreationDate.ToString()); cmd.Parameters.AddWithValue(":ExpirationDate", ad.ExpirationDate.ToString()); cmd.Parameters.AddWithValue(":Category", ad.Category.ToString()); cmd.Parameters.AddWithValue(":Name", ad.Name.ToString()); cmd.Parameters.AddWithValue(":Description", ad.Description.ToString()); cmd.Parameters.AddWithValue(":ParcelId", ad.ParcelId.ToString()); cmd.Parameters.AddWithValue(":ParentEstate", ad.ParentEstate.ToString()); cmd.Parameters.AddWithValue(":SnapshotId", ad.SnapshotId.ToString ()); cmd.Parameters.AddWithValue(":SimName", ad.SimName.ToString()); cmd.Parameters.AddWithValue(":GlobalPos", ad.GlobalPos.ToString()); cmd.Parameters.AddWithValue(":ParcelName", ad.ParcelName.ToString()); cmd.Parameters.AddWithValue(":Flags", ad.Flags.ToString()); cmd.Parameters.AddWithValue(":ListingPrice", ad.Price.ToString ()); cmd.ExecuteNonQuery(); } } catch (Exception e) { m_log.ErrorFormat("[PROFILES_DATA]" + ": ClassifiedesUpdate exception {0}", e.Message); result = e.Message; return false; } return true; }
public bool UpdateClassifiedRecord(UserClassifiedAdd ad, ref string result) { string query = string.Empty; query = @"WITH upsert AS ( UPDATE classifieds SET classifieduuid = :ClassifiedId, creatoruuid = :CreatorId, creationdate = :CreatedDate, expirationdate = :ExpirationDate,category =:Category, name = :Name, description = :Description, parceluuid = :ParcelId, parentestate = :ParentEstate, snapshotuuid = :SnapshotId, simname = :SimName, posglobal = :GlobalPos, parcelname = :ParcelName, classifiedflags = :Flags, priceforlisting = :ListingPrice RETURNING * ) INSERT INTO classifieds (classifieduuid,creatoruuid,creationdate,expirationdate,category,name, description,parceluuid,parentestate,snapshotuuid,simname,posglobal,parcelname,classifiedflags, priceforlisting) SELECT :ClassifiedId,:CreatorId,:CreatedDate,:ExpirationDate,:Category,:Name,:Description, :ParcelId,:ParentEstate,:SnapshotId,:SimName,:GlobalPos,:ParcelName,:Flags,:ListingPrice WHERE NOT EXISTS ( SELECT * FROM upsert )"; if(string.IsNullOrEmpty(ad.ParcelName)) ad.ParcelName = "Unknown"; if(ad.ParcelId == null) ad.ParcelId = UUID.Zero; if(string.IsNullOrEmpty(ad.Description)) ad.Description = "No Description"; DateTime epoch = new DateTime(1970, 1, 1); DateTime now = DateTime.Now; TimeSpan epochnow = now - epoch; TimeSpan duration; DateTime expiration; TimeSpan epochexp; if(ad.Flags == 2) { duration = new TimeSpan(7,0,0,0); expiration = now.Add(duration); epochexp = expiration - epoch; } else { duration = new TimeSpan(365,0,0,0); expiration = now.Add(duration); epochexp = expiration - epoch; } ad.CreationDate = (int)epochnow.TotalSeconds; ad.ExpirationDate = (int)epochexp.TotalSeconds; try { using (NpgsqlConnection dbcon = new NpgsqlConnection(ConnectionString)) { dbcon.Open(); using (NpgsqlCommand cmd = new NpgsqlCommand(query, dbcon)) { cmd.Parameters.Add(m_database.CreateParameter("ClassifiedId", ad.ClassifiedId)); cmd.Parameters.Add(m_database.CreateParameter("CreatorId", ad.CreatorId)); cmd.Parameters.Add(m_database.CreateParameter("CreatedDate", (int)ad.CreationDate)); cmd.Parameters.Add(m_database.CreateParameter("ExpirationDate", (int)ad.ExpirationDate)); cmd.Parameters.Add(m_database.CreateParameter("Category", ad.Category.ToString())); cmd.Parameters.Add(m_database.CreateParameter("Name", ad.Name.ToString())); cmd.Parameters.Add(m_database.CreateParameter("Description", ad.Description.ToString())); cmd.Parameters.Add(m_database.CreateParameter("ParcelId", ad.ParcelId)); cmd.Parameters.Add(m_database.CreateParameter("ParentEstate", (int)ad.ParentEstate)); cmd.Parameters.Add(m_database.CreateParameter("SnapshotId", ad.SnapshotId)); cmd.Parameters.Add(m_database.CreateParameter("SimName", ad.SimName.ToString())); cmd.Parameters.Add(m_database.CreateParameter("GlobalPos", ad.GlobalPos.ToString())); cmd.Parameters.Add(m_database.CreateParameter("ParcelName", ad.ParcelName.ToString())); cmd.Parameters.Add(m_database.CreateParameter("Flags", (int)Convert.ToInt32(ad.Flags))); cmd.Parameters.Add(m_database.CreateParameter("ListingPrice", (int)Convert.ToInt32(ad.Price))); cmd.ExecuteNonQuery(); } } } catch (Exception e) { m_log.Error("[PROFILES_DATA]: ClassifiedsUpdate exception ", e); result = e.Message; return false; } return true; }
/// <summary> /// Classifieds info update. /// </summary> /// <param name='queryclassifiedID'> /// Queryclassified I. /// </param> /// <param name='queryCategory'> /// Query category. /// </param> /// <param name='queryName'> /// Query name. /// </param> /// <param name='queryDescription'> /// Query description. /// </param> /// <param name='queryParcelID'> /// Query parcel I. /// </param> /// <param name='queryParentEstate'> /// Query parent estate. /// </param> /// <param name='querySnapshotID'> /// Query snapshot I. /// </param> /// <param name='queryGlobalPos'> /// Query global position. /// </param> /// <param name='queryclassifiedFlags'> /// Queryclassified flags. /// </param> /// <param name='queryclassifiedPrice'> /// Queryclassified price. /// </param> /// <param name='remoteClient'> /// Remote client. /// </param> public void ClassifiedInfoUpdate(UUID queryclassifiedID, uint queryCategory, string queryName, string queryDescription, UUID queryParcelID, uint queryParentEstate, UUID querySnapshotID, Vector3 queryGlobalPos, byte queryclassifiedFlags, int queryclassifiedPrice, IClientAPI remoteClient) { UserClassifiedAdd ad = new UserClassifiedAdd(); Scene s = (Scene) remoteClient.Scene; Vector3 pos = remoteClient.SceneAgent.AbsolutePosition; ILandObject land = s.LandChannel.GetLandObject(pos.X, pos.Y); ScenePresence p = FindPresence(remoteClient.AgentId); string serverURI = string.Empty; GetUserProfileServerURI(remoteClient.AgentId, out serverURI); if (land == null) { ad.ParcelName = string.Empty; } else { ad.ParcelName = land.LandData.Name; } ad.CreatorId = remoteClient.AgentId; ad.ClassifiedId = queryclassifiedID; ad.Category = Convert.ToInt32(queryCategory); ad.Name = queryName; ad.Description = queryDescription; ad.ParentEstate = Convert.ToInt32(queryParentEstate); ad.SnapshotId = querySnapshotID; ad.SimName = remoteClient.Scene.RegionInfo.RegionName; ad.GlobalPos = queryGlobalPos.ToString (); ad.Flags = queryclassifiedFlags; ad.Price = queryclassifiedPrice; ad.ParcelId = p.currentParcelUUID; object Ad = ad; OSD.SerializeMembers(Ad); if(!rpc.JsonRpcRequest(ref Ad, "classified_update", serverURI, UUID.Random().ToString())) { remoteClient.SendAgentAlertMessage( "Error updating classified", false); return; } }
public void ClassifiedInfoRequest(UUID queryClassifiedID, IClientAPI remoteClient) { UUID target = remoteClient.AgentId; UserClassifiedAdd ad = new UserClassifiedAdd(); ad.ClassifiedId = queryClassifiedID; lock (m_classifiedCache) { if (m_classifiedCache.ContainsKey(queryClassifiedID)) { target = m_classifiedCache[queryClassifiedID]; m_classifiedInterest[queryClassifiedID] --; if (m_classifiedInterest[queryClassifiedID] == 0) { m_classifiedInterest.Remove(queryClassifiedID); m_classifiedCache.Remove(queryClassifiedID); } } } string serverURI = string.Empty; GetUserProfileServerURI(target, out serverURI); object Ad = (object)ad; if(!rpc.JsonRpcRequest(ref Ad, "classifieds_info_query", serverURI, UUID.Random().ToString())) { remoteClient.SendAgentAlertMessage( "Error getting classified info", false); return; } ad = (UserClassifiedAdd) Ad; if(ad.CreatorId == UUID.Zero) return; Vector3 globalPos = new Vector3(); Vector3.TryParse(ad.GlobalPos, out globalPos); remoteClient.SendClassifiedInfoReply(ad.ClassifiedId, ad.CreatorId, (uint)ad.CreationDate, (uint)ad.ExpirationDate, (uint)ad.Category, ad.Name, ad.Description, ad.ParcelId, (uint)ad.ParentEstate, ad.SnapshotId, ad.SimName, globalPos, ad.ParcelName, ad.Flags, ad.Price); }
public bool ClassifiedUpdate(OSDMap json, ref JsonRpcResponse response) { if(!json.ContainsKey("params")) { response.Error.Code = ErrorCode.ParseError; response.Error.Message = "Error parsing classified update request"; m_log.DebugFormat ("Classified Update Request"); return false; } string result = string.Empty; UserClassifiedAdd ad = new UserClassifiedAdd(); object Ad = (object)ad; OSD.DeserializeMembers(ref Ad, (OSDMap)json["params"]); if(Service.ClassifiedUpdate(ad, ref result)) { response.Result = OSD.SerializeMembers(ad); return true; } response.Error.Code = ErrorCode.InternalError; response.Error.Message = string.Format("{0}", result); return false; }
public bool ClassifiedInfoRequest(ref UserClassifiedAdd ad, ref string result) { if(ProfilesData.GetClassifiedInfo(ref ad, ref result)) return true; return false; }
/// <summary> /// Classifieds info update. /// </summary> /// <param name='queryclassifiedID'> /// Queryclassified I. /// </param> /// <param name='queryCategory'> /// Query category. /// </param> /// <param name='queryName'> /// Query name. /// </param> /// <param name='queryDescription'> /// Query description. /// </param> /// <param name='queryParcelID'> /// Query parcel I. /// </param> /// <param name='queryParentEstate'> /// Query parent estate. /// </param> /// <param name='querySnapshotID'> /// Query snapshot I. /// </param> /// <param name='queryGlobalPos'> /// Query global position. /// </param> /// <param name='queryclassifiedFlags'> /// Queryclassified flags. /// </param> /// <param name='queryclassifiedPrice'> /// Queryclassified price. /// </param> /// <param name='remoteClient'> /// Remote client. /// </param> public void ClassifiedInfoUpdate(UUID queryclassifiedID, uint queryCategory, string queryName, string queryDescription, UUID queryParcelID, uint queryParentEstate, UUID querySnapshotID, Vector3 queryGlobalPos, byte queryclassifiedFlags, int queryclassifiedPrice, IClientAPI remoteClient) { Scene s = (Scene)remoteClient.Scene; Vector3 pos = remoteClient.SceneAgent.AbsolutePosition; ILandObject land = s.LandChannel.GetLandObject(pos.X, pos.Y); UUID creatorId = remoteClient.AgentId; ScenePresence p = FindPresence(creatorId); UserProfileCacheEntry uce = null; lock(m_profilesCache) m_profilesCache.TryGetValue(remoteClient.AgentId, out uce); string serverURI = string.Empty; bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI); if(string.IsNullOrWhiteSpace(serverURI)) { return; } if(foreign) { remoteClient.SendAgentAlertMessage("Please change classifieds on your home grid", true); if(uce != null && uce.classifiedsLists != null) remoteClient.SendAvatarClassifiedReply(remoteClient.AgentId, uce.classifiedsLists); return; } OSDMap parameters = new OSDMap {{"creatorId", OSD.FromUUID(creatorId)}}; OSD Params = (OSD)parameters; if (!rpc.JsonRpcRequest(ref Params, "avatarclassifiedsrequest", serverURI, UUID.Random().ToString())) { remoteClient.SendAgentAlertMessage("Error fetching classifieds", false); return; } parameters = (OSDMap)Params; OSDArray list = (OSDArray)parameters["result"]; bool exists = list.Cast<OSDMap>().Where(map => map.ContainsKey("classifieduuid")) .Any(map => map["classifieduuid"].AsUUID().Equals(queryclassifiedID)); IMoneyModule money = null; if (!exists) { money = s.RequestModuleInterface<IMoneyModule>(); if (money != null) { if (!money.AmountCovered(remoteClient.AgentId, queryclassifiedPrice)) { remoteClient.SendAgentAlertMessage("You do not have enough money to create this classified.", false); if(uce != null && uce.classifiedsLists != null) remoteClient.SendAvatarClassifiedReply(remoteClient.AgentId, uce.classifiedsLists); return; } // money.ApplyCharge(remoteClient.AgentId, queryclassifiedPrice, MoneyTransactionType.ClassifiedCharge); } } UserClassifiedAdd ad = new UserClassifiedAdd(); ad.ParcelName = land == null ? string.Empty : land.LandData.Name; ad.CreatorId = remoteClient.AgentId; ad.ClassifiedId = queryclassifiedID; ad.Category = Convert.ToInt32(queryCategory); ad.Name = queryName; ad.Description = queryDescription; ad.ParentEstate = Convert.ToInt32(queryParentEstate); ad.SnapshotId = querySnapshotID; ad.SimName = remoteClient.Scene.RegionInfo.RegionName; ad.GlobalPos = queryGlobalPos.ToString (); ad.Flags = queryclassifiedFlags; ad.Price = queryclassifiedPrice; ad.ParcelId = p.currentParcelUUID; object Ad = ad; OSD.SerializeMembers(Ad); if(!rpc.JsonRpcRequest(ref Ad, "classified_update", serverURI, UUID.Random().ToString())) { remoteClient.SendAgentAlertMessage("Error updating classified", false); if(uce != null && uce.classifiedsLists != null) remoteClient.SendAvatarClassifiedReply(remoteClient.AgentId, uce.classifiedsLists); return; } // only charge if it worked if (money != null) money.ApplyCharge(remoteClient.AgentId, queryclassifiedPrice, MoneyTransactionType.ClassifiedCharge); // just flush cache for now lock(m_profilesCache) { if(m_profilesCache.TryGetValue(remoteClient.AgentId, out uce) && uce != null) { uce.classifieds = null; uce.classifiedsLists = null; } } }
public void ClassifiedInfoRequest(UUID queryClassifiedID, IClientAPI remoteClient) { UUID target = remoteClient.AgentId; UserClassifiedAdd ad = new UserClassifiedAdd(); ad.ClassifiedId = queryClassifiedID; lock (m_classifiedCache) { if (m_classifiedCache.ContainsKey(queryClassifiedID)) { target = m_classifiedCache[queryClassifiedID]; m_classifiedInterest[queryClassifiedID] --; if (m_classifiedInterest[queryClassifiedID] == 0) { m_classifiedInterest.Remove(queryClassifiedID); m_classifiedCache.Remove(queryClassifiedID); } } } UserProfileCacheEntry uce = null; lock(m_profilesCache) { if(m_profilesCache.TryGetValue(target, out uce) && uce != null) { if(uce.classifieds != null && uce.classifieds.ContainsKey(queryClassifiedID)) { ad = uce.classifieds[queryClassifiedID]; Vector3 gPos = new Vector3(); Vector3.TryParse(ad.GlobalPos, out gPos); remoteClient.SendClassifiedInfoReply(ad.ClassifiedId, ad.CreatorId, (uint)ad.CreationDate, (uint)ad.ExpirationDate, (uint)ad.Category, ad.Name, ad.Description, ad.ParcelId, (uint)ad.ParentEstate, ad.SnapshotId, ad.SimName, gPos, ad.ParcelName, ad.Flags, ad.Price); return; } } } string serverURI = string.Empty; bool foreign = GetUserProfileServerURI(target, out serverURI); if(string.IsNullOrWhiteSpace(serverURI)) { return; } object Ad = (object)ad; if(!rpc.JsonRpcRequest(ref Ad, "classifieds_info_query", serverURI, UUID.Random().ToString())) { remoteClient.SendAgentAlertMessage( "Error getting classified info", false); return; } ad = (UserClassifiedAdd) Ad; if(ad.CreatorId == UUID.Zero) return; if(foreign) cacheForeignImage(target, ad.SnapshotId); lock(m_profilesCache) { if(!m_profilesCache.TryGetValue(target, out uce) || uce == null) uce = new UserProfileCacheEntry(); if(uce.classifieds == null) uce.classifieds = new Dictionary<UUID, UserClassifiedAdd>(); uce.classifieds[ad.ClassifiedId] = ad; m_profilesCache.AddOrUpdate(target, uce, PROFILECACHEEXPIRE); } Vector3 globalPos = new Vector3(); Vector3.TryParse(ad.GlobalPos, out globalPos); remoteClient.SendClassifiedInfoReply(ad.ClassifiedId, ad.CreatorId, (uint)ad.CreationDate, (uint)ad.ExpirationDate, (uint)ad.Category, ad.Name, ad.Description, ad.ParcelId, (uint)ad.ParentEstate, ad.SnapshotId, ad.SimName, globalPos, ad.ParcelName, ad.Flags, ad.Price); }
/// <summary> /// Classifieds info update. /// </summary> /// <param name='queryclassifiedID'> /// Queryclassified I. /// </param> /// <param name='queryCategory'> /// Query category. /// </param> /// <param name='queryName'> /// Query name. /// </param> /// <param name='queryDescription'> /// Query description. /// </param> /// <param name='queryParcelID'> /// Query parcel I. /// </param> /// <param name='queryParentEstate'> /// Query parent estate. /// </param> /// <param name='querySnapshotID'> /// Query snapshot I. /// </param> /// <param name='queryGlobalPos'> /// Query global position. /// </param> /// <param name='queryclassifiedFlags'> /// Queryclassified flags. /// </param> /// <param name='queryclassifiedPrice'> /// Queryclassified price. /// </param> /// <param name='remoteClient'> /// Remote client. /// </param> public void ClassifiedInfoUpdate(UUID queryclassifiedID, uint queryCategory, string queryName, string queryDescription, UUID queryParcelID, uint queryParentEstate, UUID querySnapshotID, Vector3 queryGlobalPos, byte queryclassifiedFlags, int queryclassifiedPrice, IClientAPI remoteClient) { Scene s = (Scene)remoteClient.Scene; IMoneyModule money = s.RequestModuleInterface<IMoneyModule>(); if (money != null) { if (!money.AmountCovered(remoteClient.AgentId, queryclassifiedPrice)) { remoteClient.SendAgentAlertMessage("You do not have enough money to create requested classified.", false); return; } money.ApplyCharge(remoteClient.AgentId, queryclassifiedPrice, MoneyTransactionType.ClassifiedCharge); } UserClassifiedAdd ad = new UserClassifiedAdd(); Vector3 pos = remoteClient.SceneAgent.AbsolutePosition; ILandObject land = s.LandChannel.GetLandObject(pos.X, pos.Y); string serverURI = string.Empty; GetUserProfileServerURI(remoteClient.AgentId, out serverURI); if (land == null) { ad.ParcelName = string.Empty; } else { ad.ParcelName = land.LandData.Name; } ad.CreatorId = remoteClient.AgentId; ad.ClassifiedId = queryclassifiedID; ad.Category = Convert.ToInt32(queryCategory); ad.Name = queryName; ad.Description = queryDescription; ad.ParentEstate = Convert.ToInt32(queryParentEstate); ad.SnapshotId = querySnapshotID; ad.SimName = remoteClient.Scene.RegionInfo.RegionName; ad.GlobalPos = queryGlobalPos.ToString (); ad.Flags = queryclassifiedFlags; ad.Price = queryclassifiedPrice; ad.ParcelId = p.currentParcelUUID; object Ad = ad; OSD.SerializeMembers(Ad); if(!rpc.JsonRpcRequest(ref Ad, "classified_update", serverURI, UUID.Random().ToString())) { remoteClient.SendAgentAlertMessage( "Error updating classified", false); return; } }