⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbtransportmanger.cs

📁 破解的飞信源代码
💻 CS
字号:
namespace Imps.Client.Core.P2P
{
    using Imps.Client.Core;
    using Imps.Client.Data;
    using System;
    using System.Text;

    public class DbTransportManger : ITransportManager, IDisposable
    {
        private User _currentUser;
        private static object _locker = new object();
        private static DbTransportManger instance;

        private DbTransportManger(User currentUser)
        {
            this._currentUser = currentUser;
            this.InitializeDatabase();
        }

        public bool DeleteCompletedFile(string fileId)
        {
            try
            {
                return (this._dbHelper.ExecuteNonQuery("DELETE [TransFileInfo] WHERE [ID] = @ID", new object[] { fileId }) > 0);
            }
            catch
            {
                return false;
            }
        }

        public void Dispose()
        {
            this.Dispose(true);
            GC.SuppressFinalize(this);
        }

        protected void Dispose(bool disposed)
        {
        }

        ~DbTransportManger()
        {
            this.Dispose(false);
        }

        public bool GetFileInfo(TransFileInfo fileInfo)
        {
            try
            {
                if (fileInfo == null)
                {
                    return false;
                }
                bool flag = false;
                this._dbHelper.JoinTransaction();
                using (SQLiteDataReader reader = this._dbHelper.ExecuteReader("SELECT * FROM [TransFileInfo] WHERE [SourceSID] = @SID AND [SourceFileName] = @FileName AND [FileSize] = @FileSize AND [First100MD5] = @FirstMd5", new object[] { fileInfo.SourceSID, fileInfo.SourceFileName, fileInfo.FileSize, fileInfo.First100MMd5 }))
                {
                    if (reader.Read())
                    {
                        fileInfo.Id = reader["ID"].ToString();
                        fileInfo.CompletedSize = (long) reader["CompletedSize"];
                        fileInfo.LocalFilePath = reader["LocalFilePath"].ToString();
                        flag = true;
                    }
                    else
                    {
                        fileInfo.Id = Guid.NewGuid().ToString("D");
                        if (this._dbHelper.ExecuteNonQuery("INSERT INTO [TransFileInfo] ([ID], [LocalFilePath], [SourceSID] ,[SourceFileName] , [FileSize] ,[First100MD5], [CompletedSize]) VALUES (@ID, @LocalFilePath, @SourceSID ,@SourceFileName , @FileSize ,@First100MD5, @CompletedSize)", new object[] { fileInfo.Id, fileInfo.LocalFilePath, fileInfo.SourceSID, fileInfo.SourceFileName, fileInfo.FileSize, fileInfo.First100MMd5, fileInfo.CompletedSize }) != 1)
                        {
                            return false;
                        }
                        flag = false;
                    }
                }
                this._dbHelper.CommitTransaction();
                return flag;
            }
            catch
            {
                this._dbHelper.RollbackTransaction();
                return false;
            }
        }

        public static DbTransportManger GetInstance(User currentUser)
        {
            lock (_locker)
            {
                if (instance == null)
                {
                    instance = new DbTransportManger(currentUser);
                }
                else if (instance._currentUser.Uri.Raw != currentUser.Uri.Raw)
                {
                    instance.Dispose();
                    instance = new DbTransportManger(currentUser);
                }
                return instance;
            }
        }

        private void InitializeDatabase()
        {
            if (!this._dbHelper.Objects.Contains("TransFileInfo"))
            {
                StringBuilder builder = new StringBuilder();
                builder.AppendLine("CREATE TABLE TransFileInfo(");
                builder.AppendLine("ID VARCHAR(32) PRIMARY KEY,");
                builder.AppendLine("LocalFilePath NVARCHAR(256),");
                builder.AppendLine("SourceSID BIGINT ,");
                builder.AppendLine("SourceFileName NVARCHAR(256),");
                builder.AppendLine("FileSize BIGINT,");
                builder.AppendLine("CompletedSize BIGINT,");
                builder.AppendLine("First100MD5 NVARCHAR(32))");
                builder.AppendLine("");
                this._dbHelper.ExecuteNonQuery(builder.ToString(), null);
            }
        }

        public bool UpdateCompletedSize(string fileId, long newSize)
        {
            try
            {
                return (this._dbHelper.ExecuteNonQuery("UPDATE [TransFileInfo] SET [CompletedSize] = @CompletedSize WHERE [ID] = @ID", new object[] { newSize, fileId }) > 0);
            }
            catch
            {
                return false;
            }
        }

        public bool UpdateLocalFilePath(string fileId, string localFilePath)
        {
            try
            {
                return (this._dbHelper.ExecuteNonQuery("UPDATE [TransFileInfo] SET [LocalFilePath] = @LocalFilePath WHERE [ID] = @ID", new object[] { localFilePath, fileId }) > 0);
            }
            catch
            {
                return false;
            }
        }

        private DbHelper _dbHelper
        {
            get
            {
                return DbHelper.Instance;
            }
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -