Пример #1
0
 bool IAssetMetadataServiceInterface.TryGetValue(UUID key, out AssetMetadata metadata)
 {
     using (var conn = new MySqlConnection(m_ConnectionString))
     {
         conn.Open();
         using (var cmd = new MySqlCommand("SELECT * FROM assetrefs WHERE id=@id LIMIT 1", conn))
         {
             cmd.Parameters.AddParameter("@id", key);
             using (MySqlDataReader dbReader = cmd.ExecuteReader())
             {
                 if (dbReader.Read())
                 {
                     metadata = new AssetMetadata
                     {
                         ID         = dbReader.GetUUID("id"),
                         Type       = dbReader.GetEnum <AssetType>("assetType"),
                         Name       = dbReader.GetString("name"),
                         CreateTime = dbReader.GetDate("create_time"),
                         AccessTime = dbReader.GetDate("access_time"),
                         Flags      = dbReader.GetEnum <AssetFlags>("asset_flags"),
                         Temporary  = dbReader.GetBool("temporary")
                     };
                     return(true);
                 }
             }
         }
     }
     metadata = null;
     return(false);
 }
Пример #2
0
 public static GridUserInfo ToGridUser(this MySqlDataReader reader) => new GridUserInfo()
 {
     User         = new UUI(reader.GetUUID("ID")),
     HomeRegionID = reader.GetUUID("HomeRegionID"),
     HomeLookAt   = reader.GetVector3("HomeLookAt"),
     HomePosition = reader.GetVector3("HomePosition"),
     LastRegionID = reader.GetUUID("LastRegionID"),
     LastLookAt   = reader.GetVector3("LastLookAt"),
     LastPosition = reader.GetVector3("LastPosition"),
     IsOnline     = reader.GetBool("IsOnline"),
     LastLogin    = reader.GetDate("LastLogin"),
     LastLogout   = reader.GetDate("LastLogout")
 };
        public static InventoryItem ToItem(this MySqlDataReader reader)
        {
            var item = new InventoryItem(reader.GetUUID("ID"))
            {
                ParentFolderID = reader.GetUUID("ParentFolderID"),
                Name           = reader.GetString("Name"),
                Description    = reader.GetString("Description"),
                InventoryType  = reader.GetEnum <InventoryType>("InventoryType"),
                Flags          = reader.GetEnum <InventoryFlags>("Flags"),
                CreationDate   = reader.GetDate("CreationDate"),
                IsGroupOwned   = reader.GetBool("IsGroupOwned"),
                AssetID        = reader.GetUUID("AssetID"),
                AssetType      = reader.GetEnum <AssetType>("AssetType"),

                Owner     = reader.GetUGUI("OwnerID"),
                LastOwner = reader.GetUGUI("LastOwnerID"),

                Creator = reader.GetUGUI("CreatorID"),
                Group   = new UGI(reader.GetUUID("GroupID"))
            };

            item.Permissions.Base      = reader.GetEnum <InventoryPermissionsMask>("BasePermissionsMask");
            item.Permissions.Current   = reader.GetEnum <InventoryPermissionsMask>("CurrentPermissionsMask");
            item.Permissions.EveryOne  = reader.GetEnum <InventoryPermissionsMask>("EveryOnePermissionsMask");
            item.Permissions.NextOwner = reader.GetEnum <InventoryPermissionsMask>("NextOwnerPermissionsMask");
            item.Permissions.Group     = reader.GetEnum <InventoryPermissionsMask>("GroupPermissionsMask");
            item.SaleInfo.Price        = reader.GetInt32("SalePrice");
            item.SaleInfo.Type         = reader.GetEnum <InventoryItem.SaleInfoData.SaleType>("SaleType");
            item.SaleInfo.PermMask     = reader.GetEnum <InventoryPermissionsMask>("SalePermissionsMask");

            return(item);
        }
 public override bool TryGetValue(UUID scopeid, GridVector location, int zoomlevel, out MaptileData data)
 {
     data = default(MaptileData);
     using (var connection = new MySqlConnection(m_ConnectionString))
     {
         connection.Open();
         using (var cmd = new MySqlCommand("SELECT * FROM maptiles WHERE LocX = @locx AND LocY = @locy AND ZoomLevel = @zoomlevel", connection))
         {
             cmd.Parameters.AddParameter("@locx", location.X);
             cmd.Parameters.AddParameter("@locy", location.Y);
             cmd.Parameters.AddParameter("@zoomlevel", zoomlevel);
             using (MySqlDataReader reader = cmd.ExecuteReader())
             {
                 if (reader.Read())
                 {
                     data             = new MaptileData();
                     data.Location.X  = reader.GetUInt32("LocX");
                     data.Location.Y  = reader.GetUInt32("LocY");
                     data.ScopeID     = reader.GetUUID("ScopeID");
                     data.LastUpdate  = reader.GetDate("LastUpdate");
                     data.ContentType = reader.GetString("ContentType");
                     data.ZoomLevel   = reader.GetInt32("ZoomLevel");
                     data.Data        = reader.GetBytes("Data");
                     return(true);
                 }
             }
         }
     }
     return(false);
 }
Пример #5
0
 public override bool Exists(UUID key)
 {
     using (var conn = new MySqlConnection(m_ConnectionString))
     {
         conn.Open();
         bool needsUpdateAccessTime = false;
         using (var cmd = new MySqlCommand("SELECT id, access_time FROM assetrefs WHERE id = @id LIMIT 1", conn))
         {
             cmd.Parameters.AddParameter("@id", key);
             using (MySqlDataReader dbReader = cmd.ExecuteReader())
             {
                 if (!dbReader.Read())
                 {
                     return(false);
                 }
                 needsUpdateAccessTime = DateTime.UtcNow - dbReader.GetDate("access_time") > TimeSpan.FromHours(1);
             }
         }
         if (needsUpdateAccessTime)
         {
             /* update access_time */
             using (var cmd = new MySqlCommand("UPDATE assetrefs SET access_time = @access WHERE id = @id", conn))
             {
                 cmd.Parameters.AddWithValue("@access", Date.GetUnixTime());
                 cmd.Parameters.AddWithValue("@id", key);
                 cmd.ExecuteNonQuery();
             }
         }
         return(true);
     }
 }
        public override List <MaptileInfo> GetUpdateTimes(UUID scopeid, GridVector minloc, GridVector maxloc, int zoomlevel)
        {
            var infos = new List <MaptileInfo>();

            using (var connection = new MySqlConnection(m_ConnectionString))
            {
                connection.Open();
                using (var cmd = new MySqlCommand("SELECT LocX, LocY, LastUpdate FROM maptiles WHERE ScopeID = @scopeid AND ZoomLevel = @zoomlevel AND locX >= @locxlow AND locY >= @locylow AND locX <= @locxhigh AND locY <= @locyhigh", connection))
                {
                    cmd.Parameters.AddParameter("@scopeid", scopeid);
                    cmd.Parameters.AddParameter("@zoomlevel", zoomlevel);
                    cmd.Parameters.AddParameter("@locxlow", minloc.X);
                    cmd.Parameters.AddParameter("@locylow", minloc.Y);
                    cmd.Parameters.AddParameter("@locxhigh", maxloc.X);
                    cmd.Parameters.AddParameter("@locyhigh", maxloc.Y);
                    using (MySqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            var info = new MaptileInfo()
                            {
                                Location = new GridVector {
                                    X = reader.GetUInt32("LocX"), Y = reader.GetUInt32("LocY")
                                },
                                LastUpdate = reader.GetDate("LastUpdate"),
                                ScopeID    = scopeid,
                                ZoomLevel  = zoomlevel
                            };
                            infos.Add(info);
                        }
                    }
                }
            }
            return(infos);
        }
 public static GroupInvite ToGroupInvite(this MySqlDataReader reader) => new GroupInvite()
 {
     ID        = reader.GetUUID("InviteID"),
     Group     = new UGI(reader.GetUUID("GroupID")),
     RoleID    = reader.GetUUID("RoleID"),
     Principal = new UUI(reader.GetUUID("PrincipalID")),
     Timestamp = reader.GetDate("Timestamp")
 };
Пример #8
0
 public static TravelingDataInfo ToTravelingData(this MySqlDataReader reader) => new TravelingDataInfo()
 {
     SessionID        = reader.GetUUID("SessionID"),
     UserID           = reader.GetUUID("UserID"),
     GridExternalName = reader.GetString("GridExternalName"),
     ServiceToken     = reader.GetString("ServiceToken"),
     ClientIPAddress  = reader.GetString("ClientIPAddress"),
     Timestamp        = reader.GetDate("Timestamp")
 };
Пример #9
0
 public override bool TryGetValue(UUID key, out AssetMetadata metadata, out int length)
 {
     metadata = null;
     length   = 0;
     using (var conn = new MySqlConnection(m_ConnectionString))
     {
         conn.Open();
         using (var cmd = new MySqlCommand("SELECT id, LENGTH(data) AS dataLength, assetrefs.assetType, name, create_time, access_time, asset_flags, temporary FROM assetrefs INNER JOIN assetdata ON assetrefs.hash = assetdata.hash AND assetrefs.assetType = assetdata.assetType WHERE id = @id LIMIT 1", conn))
         {
             cmd.Parameters.AddParameter("@id", key);
             using (MySqlDataReader dbReader = cmd.ExecuteReader())
             {
                 if (!dbReader.Read())
                 {
                     return(false);
                 }
                 metadata = new AssetMetadata
                 {
                     ID         = dbReader.GetUUID("id"),
                     Type       = dbReader.GetEnum <AssetType>("assetType"),
                     Name       = dbReader.GetString("name"),
                     CreateTime = dbReader.GetDate("create_time"),
                     AccessTime = dbReader.GetDate("access_time"),
                     Flags      = dbReader.GetEnum <AssetFlags>("asset_flags"),
                     Temporary  = dbReader.GetBool("temporary")
                 };
                 length = dbReader.GetInt32("dataLength");
             }
         }
         if (DateTime.UtcNow - metadata.AccessTime > TimeSpan.FromHours(1))
         {
             /* update access_time */
             using (var cmd = new MySqlCommand("UPDATE assetrefs SET access_time = @access WHERE id = @id", conn))
             {
                 cmd.Parameters.AddWithValue("@access", Date.GetUnixTime());
                 cmd.Parameters.AddWithValue("@id", key);
                 cmd.ExecuteNonQuery();
             }
         }
         return(true);
     }
 }
Пример #10
0
 public override bool TryGetValue(UUID key, out AssetData asset)
 {
     asset = null;
     using (var conn = new MySqlConnection(m_ConnectionString))
     {
         conn.Open();
         using (var cmd = new MySqlCommand("SELECT * FROM assetrefs INNER JOIN assetdata ON assetrefs.hash = assetdata.hash AND assetrefs.assetType = assetdata.assetType WHERE id = @id", conn))
         {
             cmd.Parameters.AddParameter("@id", key);
             using (MySqlDataReader dbReader = cmd.ExecuteReader())
             {
                 if (!dbReader.Read())
                 {
                     return(false);
                 }
                 asset = new AssetData()
                 {
                     ID         = dbReader.GetUUID("id"),
                     Data       = dbReader.GetBytes("data"),
                     Type       = dbReader.GetEnum <AssetType>("assetType"),
                     Name       = dbReader.GetString("name"),
                     CreateTime = dbReader.GetDate("create_time"),
                     AccessTime = dbReader.GetDate("access_time"),
                     Flags      = dbReader.GetEnum <AssetFlags>("asset_flags"),
                     Temporary  = dbReader.GetBool("temporary")
                 };
             }
         }
         if (DateTime.UtcNow - asset.AccessTime > TimeSpan.FromHours(1))
         {
             /* update access_time */
             using (var cmd = new MySqlCommand("UPDATE assetrefs SET access_time = @access WHERE id = @id", conn))
             {
                 cmd.Parameters.AddWithValue("@access", Date.GetUnixTime());
                 cmd.Parameters.AddWithValue("@id", key);
                 cmd.ExecuteNonQuery();
             }
         }
         return(true);
     }
 }
        public static UserAccount ToUserAccount(this MySqlDataReader reader, Uri homeURI)
        {
            var            info = new UserAccount();
            string         gkUri;
            UserRegionData regData;

            info.Principal.ID              = reader.GetUUID("ID");
            info.Principal.FirstName       = reader.GetString("FirstName");
            info.Principal.LastName        = reader.GetString("LastName");
            info.Principal.HomeURI         = homeURI;
            info.Principal.IsAuthoritative = true;
            info.Email          = reader.GetString("Email");
            info.Created        = reader.GetDate("Created");
            info.UserLevel      = reader.GetInt32("UserLevel");
            info.UserFlags      = reader.GetEnum <UserFlags>("UserFlags");
            info.UserTitle      = reader.GetString("UserTitle");
            info.IsLocalToGrid  = true;
            info.IsEverLoggedIn = reader.GetBool("IsEverLoggedIn");

            gkUri   = reader.GetString("LastGatekeeperURI");
            regData = new UserRegionData
            {
                RegionID = reader.GetUUID("LastRegionID"),
                Position = reader.GetVector3("LastPosition"),
                LookAt   = reader.GetVector3("LastLookAt"),
            };
            if (!string.IsNullOrEmpty(gkUri))
            {
                regData.GatekeeperURI = new URI(gkUri);
            }
            if (regData.RegionID != UUID.Zero)
            {
                info.LastRegion = regData;
            }

            gkUri   = reader.GetString("HomeGatekeeperURI");
            regData = new UserRegionData
            {
                RegionID = reader.GetUUID("HomeRegionID"),
                Position = reader.GetVector3("HomePosition"),
                LookAt   = reader.GetVector3("HomeLookAt"),
            };
            if (!string.IsNullOrEmpty(gkUri))
            {
                regData.GatekeeperURI = new URI(gkUri);
            }
            if (regData.RegionID != UUID.Zero)
            {
                info.HomeRegion = regData;
            }

            return(info);
        }
Пример #12
0
        public override Dictionary <UUID, bool> Exists(List <UUID> assets)
        {
            var res = new Dictionary <UUID, bool>();

            if (assets.Count == 0)
            {
                return(res);
            }

            foreach (UUID id in assets)
            {
                res[id] = false;
            }

            string ids            = "'" + string.Join("','", assets) + "'";
            string sql            = $"SELECT id, access_time FROM assetrefs WHERE id IN ({ids})";
            var    updaterequired = new List <UUID>();

            using (var dbcon = new MySqlConnection(m_ConnectionString))
            {
                dbcon.Open();
                using (var cmd = new MySqlCommand(sql, dbcon))
                {
                    using (MySqlDataReader dbReader = cmd.ExecuteReader())
                    {
                        while (dbReader.Read())
                        {
                            UUID id = dbReader.GetUUID("id");
                            res[id] = true;
                            if (DateTime.UtcNow - dbReader.GetDate("access_time") > TimeSpan.FromHours(1))
                            {
                                updaterequired.Add(id);
                            }
                        }
                    }
                }

                /* update access_time */
                if (updaterequired.Count != 0)
                {
                    ids = "'" + string.Join("','", updaterequired) + "'";
                    sql = $"UPDATE assetrefs SET access_time = @access WHERE id IN ({ids})";
                    using (var cmd = new MySqlCommand(sql, dbcon))
                    {
                        cmd.Parameters.AddWithValue("@access", Date.GetUnixTime());
                        cmd.ExecuteNonQuery();
                    }
                }
            }

            return(res);
        }
Пример #13
0
        private ObjectPartInventoryItem ObjectPartInventoryItemFromDbReader(MySqlDataReader dbReader)
        {
            var item = new ObjectPartInventoryItem(dbReader.GetUUID("InventoryID"))
            {
                AssetID          = dbReader.GetUUID("AssetID"),
                AssetType        = dbReader.GetEnum <AssetType>("AssetType"),
                CreationDate     = dbReader.GetDate("CreationDate"),
                Creator          = dbReader.GetUGUI("Creator"),
                Description      = dbReader.GetString("Description"),
                Flags            = dbReader.GetEnum <InventoryFlags>("Flags"),
                Group            = dbReader.GetUGI("Group"),
                IsGroupOwned     = dbReader.GetBool("GroupOwned"),
                InventoryType    = dbReader.GetEnum <InventoryType>("InventoryType"),
                LastOwner        = dbReader.GetUGUI("LastOwner"),
                Name             = dbReader.GetString("Name"),
                Owner            = dbReader.GetUGUI("Owner"),
                ParentFolderID   = dbReader.GetUUID("PrimID"),
                NextOwnerAssetID = dbReader.GetUUID("NextOwnerAssetID"),
                ExperienceID     = dbReader.GetUEI("ExperienceID"),
                CollisionFilter  = new ObjectPartInventoryItem.CollisionFilterParam
                {
                    DbSerialization = dbReader.GetBytes("CollisionFilterData")
                }
            };

            item.Permissions.Base      = dbReader.GetEnum <InventoryPermissionsMask>("BasePermissions");
            item.Permissions.Current   = dbReader.GetEnum <InventoryPermissionsMask>("CurrentPermissions");
            item.Permissions.EveryOne  = dbReader.GetEnum <InventoryPermissionsMask>("EveryOnePermissions");
            item.Permissions.Group     = dbReader.GetEnum <InventoryPermissionsMask>("GroupPermissions");
            item.Permissions.NextOwner = dbReader.GetEnum <InventoryPermissionsMask>("NextOwnerPermissions");
            item.SaleInfo.Type         = dbReader.GetEnum <InventoryItem.SaleInfoData.SaleType>("SaleType");
            item.SaleInfo.Price        = dbReader.GetInt32("SalePrice");
            item.SaleInfo.PermMask     = dbReader.GetEnum <InventoryPermissionsMask>("SalePermMask");
            var grantinfo = new ObjectPartInventoryItem.PermsGranterInfo();

            if (((string)dbReader["PermsGranter"]).Length != 0)
            {
                try
                {
                    grantinfo.PermsGranter = dbReader.GetUGUI("PermsGranter");
                }
                catch
                {
                    /* no action required */
                }
            }
            grantinfo.PermsMask          = dbReader.GetEnum <ScriptPermissions>("PermsMask");
            grantinfo.DebitPermissionKey = dbReader.GetUUID("DebitPermissionKey");
            item.PermsGranter            = grantinfo;

            return(item);
        }
Пример #14
0
 bool IClassifiedsInterface.TryGetValue(UGUI user, UUID id, out ProfileClassified classified)
 {
     using (var conn = new MySqlConnection(m_ConnectionString))
     {
         conn.Open();
         using (var cmd = new MySqlCommand("SELECT * FROM classifieds WHERE classifieduuid = @uuid LIMIT 1", conn))
         {
             cmd.Parameters.AddParameter("@uuid", id);
             using (MySqlDataReader reader = cmd.ExecuteReader())
             {
                 if (reader.Read())
                 {
                     classified = new ProfileClassified
                     {
                         ClassifiedID   = reader.GetUUID("classifieduuid"),
                         Category       = reader.GetInt32("category"),
                         CreationDate   = reader.GetDate("creationdate"),
                         Creator        = reader.GetUGUI("creatoruuid"),
                         Description    = reader.GetString("description"),
                         ExpirationDate = reader.GetDate("expirationdate"),
                         Flags          = reader.GetByte("classifiedflags"),
                         GlobalPos      = reader.GetVector3("posglobal"),
                         Name           = reader.GetString("name"),
                         ParcelID       = reader.GetParcelID("parceluuid"),
                         ParcelName     = reader.GetString("parcelname"),
                         ParentEstate   = reader.GetInt32("parentestate"),
                         Price          = reader.GetInt32("priceforlisting"),
                         SimName        = reader.GetString("simname"),
                         SnapshotID     = reader.GetUUID("snapshotuuid")
                     };
                     return(true);
                 }
             }
         }
     }
     classified = default(ProfileClassified);
     return(false);
 }
 public static GroupNotice ToGroupNotice(this MySqlDataReader reader) => new GroupNotice()
 {
     Group            = new UGI(reader.GetUUID("GroupID")),
     ID               = reader.GetUUID("NoticeID"),
     Timestamp        = reader.GetDate("Timestamp"),
     FromName         = reader.GetString("FromName"),
     Subject          = reader.GetString("Subject"),
     Message          = reader.GetString("Message"),
     HasAttachment    = reader.GetBool("HasAttachment"),
     AttachmentType   = reader.GetEnum <AssetType>("AttachmentType"),
     AttachmentName   = reader.GetString("AttachmentName"),
     AttachmentItemID = reader.GetUUID("AttachmentItemID"),
     AttachmentOwner  = new UUI(reader.GetUUID("AttachmentOwnerID"))
 };
Пример #16
0
 public static EstateInfo ToEstateInfo(this MySqlDataReader reader) => new EstateInfo
 {
     ID                = reader.GetUInt32("ID"),
     Name              = reader.GetString("Name"),
     Owner             = reader.GetUGUI("Owner"),
     Flags             = reader.GetEnum <RegionOptionFlags>("Flags"),
     PricePerMeter     = reader.GetInt32("PricePerMeter"),
     BillableFactor    = reader.GetDouble("BillableFactor"),
     SunPosition       = reader.GetDouble("SunPosition"),
     AbuseEmail        = reader.GetString("AbuseEmail"),
     CovenantID        = reader.GetUUID("CovenantID"),
     CovenantTimestamp = reader.GetDate("CovenantTimestamp"),
     UseGlobalTime     = reader.GetBool("UseGlobalTime"),
     ParentEstateID    = reader.GetUInt32("ParentEstateID")
 };
        public static UserAccount ToUserAccount(this MySqlDataReader reader, Uri homeURI)
        {
            var info = new UserAccount();

            info.Principal.ID              = reader.GetUUID("ID");
            info.Principal.FirstName       = reader.GetString("FirstName");
            info.Principal.LastName        = reader.GetString("LastName");
            info.Principal.HomeURI         = homeURI;
            info.Principal.IsAuthoritative = true;
            info.ScopeID        = reader.GetUUID("ScopeID");
            info.Email          = reader.GetString("Email");
            info.Created        = reader.GetDate("Created");
            info.UserLevel      = reader.GetInt32("UserLevel");
            info.UserFlags      = reader.GetUInt32("UserFlags");
            info.UserTitle      = reader.GetString("UserTitle");
            info.IsLocalToGrid  = true;
            info.IsEverLoggedIn = reader.GetBool("IsEverLoggedIn");

            return(info);
        }
        public override List <GridInstantMessage> GetOfflineIMs(UUID principalID)
        {
            var ims = new List <GridInstantMessage>();

            using (var connection = new MySqlConnection(m_ConnectionString))
            {
                connection.Open();
                using (var cmd = new MySqlCommand("SELECT * FROM offlineim WHERE ToAgentID = @id", connection))
                {
                    cmd.Parameters.AddParameter("@id", principalID);
                    using (MySqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            var im = new GridInstantMessage()
                            {
                                ID             = reader.GetUInt64("ID"),
                                FromAgent      = reader.GetUUI("FromAgent"),
                                FromGroup      = reader.GetUGI("FromGroup"),
                                ToAgent        = new UUI(reader.GetUUID("ToAgentID")),
                                Dialog         = reader.GetEnum <GridInstantMessageDialog>("Dialog"),
                                IsFromGroup    = reader.GetBool("IsFromGroup"),
                                Message        = reader.GetString("Message"),
                                IMSessionID    = reader.GetUUID("IMSessionID"),
                                Position       = reader.GetVector3("Position"),
                                BinaryBucket   = reader.GetBytes("BinaryBucket"),
                                ParentEstateID = reader.GetUInt32("ParentEstateID"),
                                RegionID       = reader.GetUUID("RegionID"),
                                Timestamp      = reader.GetDate("Timestamp"),
                                IsOffline      = true
                            };
                            ims.Add(im);
                        }
                    }
                }
            }
            return(ims);
        }
        ParcelInfo ISimulationDataParcelStorageInterface.this[UUID regionID, UUID parcelID]
        {
            get
            {
                using (var connection = new MySqlConnection(m_ConnectionString))
                {
                    connection.Open();
                    using (var cmd = new MySqlCommand("SELECT * FROM parcels WHERE RegionID = '" + regionID.ToString() + "' AND ParcelID = '" + parcelID.ToString() + "' LIMIT 1", connection))
                    {
                        using (MySqlDataReader dbReader = cmd.ExecuteReader())
                        {
                            if (!dbReader.Read())
                            {
                                throw new KeyNotFoundException();
                            }

                            var pi = new ParcelInfo((int)dbReader["BitmapWidth"], (int)dbReader["BitmapHeight"])
                            {
                                Area              = dbReader.GetInt32("Area"),
                                AuctionID         = dbReader.GetUInt32("AuctionID"),
                                AuthBuyer         = dbReader.GetUGUI("AuthBuyer"),
                                Category          = dbReader.GetEnum <ParcelCategory>("Category"),
                                ClaimDate         = dbReader.GetDate("ClaimDate"),
                                ClaimPrice        = dbReader.GetInt32("ClaimPrice"),
                                ID                = dbReader.GetUUID("ParcelID"),
                                Group             = dbReader.GetUGI("Group"),
                                GroupOwned        = dbReader.GetBool("IsGroupOwned"),
                                Description       = dbReader.GetString("Description"),
                                Flags             = dbReader.GetEnum <ParcelFlags>("Flags"),
                                LandingType       = dbReader.GetEnum <TeleportLandingType>("LandingType"),
                                LandingPosition   = dbReader.GetVector3("LandingPosition"),
                                LandingLookAt     = dbReader.GetVector3("LandingLookAt"),
                                Name              = dbReader.GetString("Name"),
                                LocalID           = dbReader.GetInt32("LocalID"),
                                MediaID           = dbReader.GetUUID("MediaID"),
                                Owner             = dbReader.GetUGUI("Owner"),
                                SnapshotID        = dbReader.GetUUID("SnapshotID"),
                                SalePrice         = dbReader.GetInt32("SalePrice"),
                                OtherCleanTime    = dbReader.GetInt32("OtherCleanTime"),
                                MediaAutoScale    = dbReader.GetBool("MediaAutoScale"),
                                MediaType         = dbReader.GetString("MediaType"),
                                MediaWidth        = dbReader.GetInt32("MediaWidth"),
                                MediaHeight       = dbReader.GetInt32("MediaHeight"),
                                MediaLoop         = dbReader.GetBool("MediaLoop"),
                                ObscureMedia      = dbReader.GetBool("ObscureMedia"),
                                ObscureMusic      = dbReader.GetBool("ObscureMusic"),
                                MediaDescription  = dbReader.GetString("MediaDescription"),
                                RentPrice         = dbReader.GetInt32("RentPrice"),
                                AABBMin           = dbReader.GetVector3("AABBMin"),
                                AABBMax           = dbReader.GetVector3("AABBMax"),
                                ParcelPrimBonus   = dbReader.GetDouble("ParcelPrimBonus"),
                                PassPrice         = dbReader.GetInt32("PassPrice"),
                                PassHours         = dbReader.GetDouble("PassHours"),
                                ActualArea        = dbReader.GetInt32("ActualArea"),
                                BillableArea      = dbReader.GetInt32("BillAbleArea"),
                                Status            = dbReader.GetEnum <ParcelStatus>("Status"),
                                SeeAvatars        = dbReader.GetBool("SeeAvatars"),
                                AnyAvatarSounds   = dbReader.GetBool("AnyAvatarSounds"),
                                GroupAvatarSounds = dbReader.GetBool("GroupAvatarSounds"),
                                IsPrivate         = dbReader.GetBool("IsPrivate")
                            };
                            pi.LandBitmap.DataNoAABBUpdate = dbReader.GetBytes("Bitmap");

                            var uri = (string)dbReader["MusicURI"];
                            if (!string.IsNullOrEmpty(uri))
                            {
                                pi.MusicURI = new URI(uri);
                            }
                            uri = (string)dbReader["MediaURI"];
                            if (!string.IsNullOrEmpty(uri))
                            {
                                pi.MediaURI = new URI(uri);
                            }

                            return(pi);
                        }
                    }
                }
            }
        }
        private ObjectPart ObjectPartFromDbReader(MySqlDataReader dbReader)
        {
            var objpart = new ObjectPart(dbReader.GetUUID("ID"))
            {
                LoadedLinkNumber     = dbReader.GetInt32("LinkNumber"),
                Position             = dbReader.GetVector3("Position"),
                Rotation             = dbReader.GetQuaternion("Rotation"),
                SitText              = dbReader.GetString("SitText"),
                TouchText            = dbReader.GetString("TouchText"),
                Name                 = dbReader.GetString("Name"),
                Description          = dbReader.GetString("Description"),
                SitTargetOffset      = dbReader.GetVector3("SitTargetOffset"),
                SitTargetOrientation = dbReader.GetQuaternion("SitTargetOrientation"),
                Creator              = dbReader.GetUUI("Creator"),
                CreationDate         = dbReader.GetDate("CreationDate"),
                RezDate              = dbReader.GetDate("RezDate"),
                Flags                = dbReader.GetEnum <PrimitiveFlags>("Flags"),

                CameraAtOffset  = dbReader.GetVector3("CameraAtOffset"),
                CameraEyeOffset = dbReader.GetVector3("CameraEyeOffset"),

                PhysicsShapeType          = dbReader.GetEnum <PrimitivePhysicsShapeType>("PhysicsShapeType"),
                PathfindingType           = dbReader.GetEnum <PathfindingType>("PathfindingType"),
                WalkableCoefficientAvatar = dbReader.GetDouble("WalkableCoefficientAvatar"),
                WalkableCoefficientA      = dbReader.GetDouble("WalkableCoefficientA"),
                WalkableCoefficientB      = dbReader.GetDouble("WalkableCoefficientB"),
                WalkableCoefficientC      = dbReader.GetDouble("WalkableCoefficientC"),
                WalkableCoefficientD      = dbReader.GetDouble("WalkableCoefficientD"),
                Material = dbReader.GetEnum <PrimitiveMaterial>("Material"),
                Size     = dbReader.GetVector3("Size"),
                Slice    = dbReader.GetVector3("Slice"),

                MediaURL = dbReader.GetString("MediaURL"),

                AngularVelocity = dbReader.GetVector3("AngularVelocity"),
                PointLight      = new ObjectPart.PointLightParam
                {
                    DbSerialization = dbReader.GetBytes("LightData")
                },
                Projection = new ObjectPart.ProjectionParam
                {
                    DbSerialization = dbReader.GetBytes("ProjectionData")
                },
                Text = new ObjectPart.TextParam
                {
                    Serialization = dbReader.GetBytes("HoverTextData")
                },
                Flexible = new ObjectPart.FlexibleParam
                {
                    DbSerialization = dbReader.GetBytes("FlexibleData")
                },
                Sound = new ObjectPart.SoundParam
                {
                    Serialization = dbReader.GetBytes("LoopedSoundData")
                },
                CollisionSound = new ObjectPart.CollisionSoundParam
                {
                    Serialization = dbReader.GetBytes("ImpactSoundData")
                },
                Shape = new ObjectPart.PrimitiveShape
                {
                    Serialization = dbReader.GetBytes("PrimitiveShapeData")
                },
                ParticleSystemBytes   = dbReader.GetBytes("ParticleSystem"),
                TextureEntryBytes     = dbReader.GetBytes("TextureEntryBytes"),
                TextureAnimationBytes = dbReader.GetBytes("TextureAnimationBytes"),

                ScriptAccessPin          = dbReader.GetInt32("ScriptAccessPin"),
                ForceMouselook           = dbReader.GetBoolean("ForceMouselook"),
                BaseMask                 = dbReader.GetEnum <InventoryPermissionsMask>("BasePermissions"),
                OwnerMask                = dbReader.GetEnum <InventoryPermissionsMask>("CurrentPermissions"),
                EveryoneMask             = dbReader.GetEnum <InventoryPermissionsMask>("EveryOnePermissions"),
                GroupMask                = dbReader.GetEnum <InventoryPermissionsMask>("GroupPermissions"),
                NextOwnerMask            = dbReader.GetEnum <InventoryPermissionsMask>("NextOwnerPermissions"),
                ClickAction              = dbReader.GetEnum <ClickActionType>("ClickAction"),
                PassCollisionMode        = dbReader.GetEnum <PassEventMode>("PassCollisionMode"),
                PassTouchMode            = dbReader.GetEnum <PassEventMode>("PassTouchMode"),
                Velocity                 = dbReader.GetVector3("Velocity"),
                IsSoundQueueing          = dbReader.GetBool("IsSoundQueueing"),
                IsAllowedDrop            = dbReader.GetBool("IsAllowedDrop"),
                PhysicsDensity           = dbReader.GetDouble("PhysicsDensity"),
                PhysicsFriction          = dbReader.GetDouble("PhysicsFriction"),
                PhysicsRestitution       = dbReader.GetDouble("PhysicsRestitution"),
                PhysicsGravityMultiplier = dbReader.GetDouble("PhysicsGravityMultiplier"),

                IsVolumeDetect    = dbReader.GetBool("IsVolumeDetect"),
                IsPhantom         = dbReader.GetBool("IsPhantom"),
                IsPhysics         = dbReader.GetBool("IsPhysics"),
                IsRotateXEnabled  = dbReader.GetBool("IsRotateXEnabled"),
                IsRotateYEnabled  = dbReader.GetBool("IsRotateYEnabled"),
                IsRotateZEnabled  = dbReader.GetBool("IsRotateZEnabled"),
                IsBlockGrab       = dbReader.GetBool("IsBlockGrab"),
                IsSandbox         = dbReader.GetBool("IsSandbox"),
                IsDieAtEdge       = dbReader.GetBool("IsDieAtEdge"),
                IsReturnAtEdge    = dbReader.GetBool("IsReturnAtEdge"),
                IsBlockGrabObject = dbReader.GetBool("IsBlockGrabObject"),
                SandboxOrigin     = dbReader.GetVector3("SandboxOrigin"),
                ExtendedMesh      = new ObjectPart.ExtendedMeshParams {
                    DbSerialization = dbReader.GetBytes("ExtendedMeshData")
                }
            };

            using (var ms = new MemoryStream(dbReader.GetBytes("DynAttrs")))
            {
                foreach (KeyValuePair <string, IValue> kvp in (Map)LlsdBinary.Deserialize(ms))
                {
                    objpart.DynAttrs.Add(kvp.Key, kvp.Value);
                }
            }

            return(objpart);
        }