Пример #1
0
 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;
        }
Пример #6
0
        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;
 }
Пример #10
0
 public bool ClassifiedInfoRequest(ref UserClassifiedAdd ad, ref string result)
 {
     if(ProfilesData.GetClassifiedInfo(ref ad, ref result))
         return true;
     
     return false;
 }
Пример #11
0
        /// <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;
                }
            }

        }
Пример #12
0
        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;
            }
        }