📄 dbtransportmanger.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 + -