using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net.Sockets;
using System.Text;
namespace HslCommunication.Enthernet
{
///
/// 与服务器文件引擎交互的客户端类,支持操作Advanced引擎和Ultimate引擎
///
public class IntegrationFileClient : FileClientBase
{
#region Constructor
///
/// 实例化一个对象
///
public IntegrationFileClient()
{
}
#endregion
#region Delete File
///
/// 删除服务器的文件操作
///
/// 文件名称,带后缀
/// 第一大类
/// 第二大类
/// 第三大类
///
public OperateResult DeleteFile(
string fileName,
string factory,
string group,
string id )
{
return DeleteFileBase( fileName, factory, group, id );
}
#endregion
#region Download File
///
/// 下载服务器的文件到本地的文件操作
///
/// 文件名称,带后缀
/// 第一大类
/// 第二大类
/// 第三大类
/// 下载的进度报告
/// 准备本地保存的名称
///
public OperateResult DownloadFile(
string fileName,
string factory,
string group,
string id,
Action processReport,
string fileSaveName
)
{
return DownloadFileBase( factory, group, id, fileName, processReport, fileSaveName );
}
///
/// 下载服务器的文件到本地的数据流中
///
/// 文件名称,带后缀
/// 第一大类
/// 第二大类
/// 第三大类
/// 下载的进度报告
/// 流数据
///
public OperateResult DownloadFile(
string fileName,
string factory,
string group,
string id,
Action processReport,
Stream stream
)
{
return DownloadFileBase( factory, group, id, fileName, processReport, stream );
}
///
/// 下载服务器的文件到本地的数据流中
///
/// 文件名称,带后缀
/// 第一大类
/// 第二大类
/// 第三大类
/// 下载的进度报告
/// 内存文件
///
public OperateResult DownloadFile(
string fileName,
string factory,
string group,
string id,
Action processReport,
out Bitmap bitmap
)
{
MemoryStream stream = new MemoryStream( );
OperateResult result = DownloadFileBase( factory, group, id, fileName, processReport, stream );
if (result.IsSuccess)
{
bitmap = new Bitmap( stream );
}
else
{
bitmap = null;
result.IsSuccess = false;
}
stream.Dispose( );
return result;
}
#endregion
#region Upload File
///
/// 上传本地的文件到服务器操作
///
/// 本地的完整路径的文件名称
/// 服务器存储的文件名称,带后缀
/// 第一大类
/// 第二大类
/// 第三大类
/// 文件的额外描述
/// 文件的上传人
/// 上传的进度报告
///
public OperateResult UploadFile(
string fileName,
string serverName,
string factory,
string group,
string id,
string fileTag,
string fileUpload,
Action processReport )
{
return UploadFileBase( fileName, serverName, factory, group, id, fileTag, fileUpload, processReport );
}
///
/// 上传数据流到服务器操作
///
/// 数据流内容
/// 服务器存储的文件名称,带后缀
/// 第一大类
/// 第二大类
/// 第三大类
/// 文件的额外描述
/// 文件的上传人
/// 上传的进度报告
///
public OperateResult UploadFile(
Stream stream,
string serverName,
string factory,
string group,
string id,
string fileTag,
string fileUpload,
Action processReport )
{
return UploadFileBase( stream, serverName, factory, group, id, fileTag, fileUpload, processReport );
}
///
/// 上传内存图片到服务器操作
///
/// 内存图片,不能为空
/// 服务器存储的文件名称,带后缀
/// 第一大类
/// 第二大类
/// 第三大类
/// 文件的额外描述
/// 文件的上传人
/// 上传的进度报告
///
///
public OperateResult UploadFile(
Bitmap bitmap,
string serverName,
string factory,
string group,
string id,
string fileTag,
string fileUpload,
Action processReport )
{
MemoryStream stream = new MemoryStream( );
if (bitmap.RawFormat != null) bitmap.Save( stream, bitmap.RawFormat );
else bitmap.Save( stream, System.Drawing.Imaging.ImageFormat.Bmp );
OperateResult result = UploadFileBase( stream, serverName, factory, group, id, fileTag, fileUpload, processReport );
stream.Dispose( );
return result;
}
#endregion
#region Private Method
///
/// 根据三种分类信息,还原成在服务器的相对路径,包含文件
///
/// 文件名称,包含后缀名
/// 第一类
/// 第二类
/// 第三类
///
private string TranslateFileName( string fileName, string factory, string group, string id )
{
string file_save_server_name = fileName;
if (id.IndexOf( '\\' ) >= 0) id = id.Replace( '\\', '_' );
if (group.IndexOf( '\\' ) >= 0) group = id.Replace( '\\', '_' );
if (factory.IndexOf( '\\' ) >= 0) id = factory.Replace( '\\', '_' );
if (id?.Length > 0) file_save_server_name = id + @"\" + file_save_server_name;
if (group?.Length > 0) file_save_server_name = group + @"\" + file_save_server_name;
if (factory?.Length > 0) file_save_server_name = factory + @"\" + file_save_server_name;
return file_save_server_name;
}
///
/// 根据三种分类信息,还原成在服务器的相对路径,仅仅路径
///
/// 第一类
/// 第二类
/// 第三类
///
private string TranslatePathName( string factory, string group, string id )
{
string file_save_server_name = "";
if (id.IndexOf( '\\' ) >= 0) id = id.Replace( '\\', '_' );
if (group.IndexOf( '\\' ) >= 0) group = id.Replace( '\\', '_' );
if (factory.IndexOf( '\\' ) >= 0) id = factory.Replace( '\\', '_' );
if (id?.Length > 0) file_save_server_name = @"\" + id;
if (group?.Length > 0) file_save_server_name = @"\" + group + file_save_server_name;
if (factory?.Length > 0) file_save_server_name = @"\" + factory + file_save_server_name;
return file_save_server_name;
}
#endregion
#region Get FileNames
///
/// 获取指定路径下的所有的文档
///
/// 获取得到的文件合集
/// 第一大类
/// 第二大类
/// 第三大类
///
public OperateResult DownloadPathFileNames(
out GroupFileItem[] fileNames,
string factory,
string group,
string id
)
{
return DownloadStringArrays(
out fileNames,
HslProtocol.ProtocolFileDirectoryFiles,
factory,
group,
id
);
}
#endregion
#region Get FolderNames
///
/// 获取指定路径下的所有的文档
///
///
///
///
///
///
public OperateResult DownloadPathFolders(
out string[] folders,
string factory,
string group,
string id
)
{
return DownloadStringArrays(
out folders,
HslProtocol.ProtocolFileDirectories,
factory,
group,
id );
}
#endregion
#region Private Method
///
/// 获取指定路径下的所有的文档
///
/// 想要获取的队列
/// 指令
/// 第一大类
/// 第二大类
/// 第三大类
/// 数组的类型
///
private OperateResult DownloadStringArrays(
out T[] arrays,
int protocol,
string factory,
string group,
string id
)
{
OperateResult result = new OperateResult( );
// 连接服务器
// connect server
OperateResult socketResult = CreateSocketAndConnect( ServerIpEndPoint, ConnectTimeOut );
if (!socketResult.IsSuccess) {
arrays = new T[0];
return socketResult;
}
// 上传信息
OperateResult send = SendStringAndCheckReceive( socketResult.Content, protocol, "nosense" );
if (!send.IsSuccess) {
arrays = new T[0];
return send;
}
// 上传三级分类
OperateResult sendClass = SendFactoryGroupId( socketResult.Content, factory, group, id );
if (!sendClass.IsSuccess)
{
arrays = new T[0];
return sendClass;
}
// 接收数据信息
OperateResult receive = ReceiveStringContentFromSocket( socketResult.Content );
if(!receive.IsSuccess)
{
arrays = new T[0];
return receive;
}
socketResult.Content?.Close( );
// 数据转化
try
{
arrays = Newtonsoft.Json.Linq.JArray.Parse( receive.Content2 ).ToObject( );
return OperateResult.CreateSuccessResult( );
}
catch(Exception ex)
{
arrays = new T[0];
return new OperateResult( )
{
Message = ex.Message
};
}
}
#endregion
}
}