| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406 |
- 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
- {
- /// <summary>
- /// 与服务器文件引擎交互的客户端类,支持操作Advanced引擎和Ultimate引擎
- /// </summary>
- public class IntegrationFileClient : FileClientBase
- {
- #region Constructor
- /// <summary>
- /// 实例化一个对象
- /// </summary>
- public IntegrationFileClient()
- {
-
- }
- #endregion
- #region Delete File
- /// <summary>
- /// 删除服务器的文件操作
- /// </summary>
- /// <param name="fileName">文件名称,带后缀</param>
- /// <param name="factory">第一大类</param>
- /// <param name="group">第二大类</param>
- /// <param name="id">第三大类</param>
- /// <returns></returns>
- public OperateResult DeleteFile(
- string fileName,
- string factory,
- string group,
- string id )
- {
- return DeleteFileBase( fileName, factory, group, id );
- }
- #endregion
- #region Download File
- /// <summary>
- /// 下载服务器的文件到本地的文件操作
- /// </summary>
- /// <param name="fileName">文件名称,带后缀</param>
- /// <param name="factory">第一大类</param>
- /// <param name="group">第二大类</param>
- /// <param name="id">第三大类</param>
- /// <param name="processReport">下载的进度报告</param>
- /// <param name="fileSaveName">准备本地保存的名称</param>
- /// <returns></returns>
- public OperateResult DownloadFile(
- string fileName,
- string factory,
- string group,
- string id,
- Action<long, long> processReport,
- string fileSaveName
- )
- {
- return DownloadFileBase( factory, group, id, fileName, processReport, fileSaveName );
- }
- /// <summary>
- /// 下载服务器的文件到本地的数据流中
- /// </summary>
- /// <param name="fileName">文件名称,带后缀</param>
- /// <param name="factory">第一大类</param>
- /// <param name="group">第二大类</param>
- /// <param name="id">第三大类</param>
- /// <param name="processReport">下载的进度报告</param>
- /// <param name="stream">流数据</param>
- /// <returns></returns>
- public OperateResult DownloadFile(
- string fileName,
- string factory,
- string group,
- string id,
- Action<long, long> processReport,
- Stream stream
- )
- {
- return DownloadFileBase( factory, group, id, fileName, processReport, stream );
- }
- /// <summary>
- /// 下载服务器的文件到本地的数据流中
- /// </summary>
- /// <param name="fileName">文件名称,带后缀</param>
- /// <param name="factory">第一大类</param>
- /// <param name="group">第二大类</param>
- /// <param name="id">第三大类</param>
- /// <param name="processReport">下载的进度报告</param>
- /// <param name="bitmap">内存文件</param>
- /// <returns></returns>
- public OperateResult DownloadFile(
- string fileName,
- string factory,
- string group,
- string id,
- Action<long, long> 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
- /// <summary>
- /// 上传本地的文件到服务器操作
- /// </summary>
- /// <param name="fileName">本地的完整路径的文件名称</param>
- /// <param name="serverName">服务器存储的文件名称,带后缀</param>
- /// <param name="factory">第一大类</param>
- /// <param name="group">第二大类</param>
- /// <param name="id">第三大类</param>
- /// <param name="fileTag">文件的额外描述</param>
- /// <param name="fileUpload">文件的上传人</param>
- /// <param name="processReport">上传的进度报告</param>
- /// <returns></returns>
- public OperateResult UploadFile(
- string fileName,
- string serverName,
- string factory,
- string group,
- string id,
- string fileTag,
- string fileUpload,
- Action<long, long> processReport )
- {
- return UploadFileBase( fileName, serverName, factory, group, id, fileTag, fileUpload, processReport );
- }
- /// <summary>
- /// 上传数据流到服务器操作
- /// </summary>
- /// <param name="stream">数据流内容</param>
- /// <param name="serverName">服务器存储的文件名称,带后缀</param>
- /// <param name="factory">第一大类</param>
- /// <param name="group">第二大类</param>
- /// <param name="id">第三大类</param>
- /// <param name="fileTag">文件的额外描述</param>
- /// <param name="fileUpload">文件的上传人</param>
- /// <param name="processReport">上传的进度报告</param>
- /// <returns></returns>
- public OperateResult UploadFile(
- Stream stream,
- string serverName,
- string factory,
- string group,
- string id,
- string fileTag,
- string fileUpload,
- Action<long, long> processReport )
- {
- return UploadFileBase( stream, serverName, factory, group, id, fileTag, fileUpload, processReport );
- }
- /// <summary>
- /// 上传内存图片到服务器操作
- /// </summary>
- /// <param name="bitmap">内存图片,不能为空</param>
- /// <param name="serverName">服务器存储的文件名称,带后缀</param>
- /// <param name="factory">第一大类</param>
- /// <param name="group">第二大类</param>
- /// <param name="id">第三大类</param>
- /// <param name="fileTag">文件的额外描述</param>
- /// <param name="fileUpload">文件的上传人</param>
- /// <param name="processReport">上传的进度报告</param>
- /// <returns></returns>
- /// <exception cref="ArgumentNullException"></exception>
- public OperateResult UploadFile(
- Bitmap bitmap,
- string serverName,
- string factory,
- string group,
- string id,
- string fileTag,
- string fileUpload,
- Action<long, long> 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
- /// <summary>
- /// 根据三种分类信息,还原成在服务器的相对路径,包含文件
- /// </summary>
- /// <param name="fileName">文件名称,包含后缀名</param>
- /// <param name="factory">第一类</param>
- /// <param name="group">第二类</param>
- /// <param name="id">第三类</param>
- /// <returns></returns>
- 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;
- }
- /// <summary>
- /// 根据三种分类信息,还原成在服务器的相对路径,仅仅路径
- /// </summary>
- /// <param name="factory">第一类</param>
- /// <param name="group">第二类</param>
- /// <param name="id">第三类</param>
- /// <returns></returns>
- 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
- /// <summary>
- /// 获取指定路径下的所有的文档
- /// </summary>
- /// <param name="fileNames">获取得到的文件合集</param>
- /// <param name="factory">第一大类</param>
- /// <param name="group">第二大类</param>
- /// <param name="id">第三大类</param>
- /// <returns></returns>
- 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
- /// <summary>
- /// 获取指定路径下的所有的文档
- /// </summary>
- /// <param name="folders"></param>
- /// <param name="factory"></param>
- /// <param name="group"></param>
- /// <param name="id"></param>
- /// <returns></returns>
- 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
- /// <summary>
- /// 获取指定路径下的所有的文档
- /// </summary>
- /// <param name="arrays">想要获取的队列</param>
- /// <param name="protocol">指令</param>
- /// <param name="factory">第一大类</param>
- /// <param name="group">第二大类</param>
- /// <param name="id">第三大类</param>
- /// <typeparam name="T">数组的类型</typeparam>
- /// <returns></returns>
- private OperateResult DownloadStringArrays<T>(
- out T[] arrays,
- int protocol,
- string factory,
- string group,
- string id
- )
- {
- OperateResult result = new OperateResult( );
- // 连接服务器
- // connect server
- OperateResult<Socket> 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<int,string> 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<T[]>( );
- return OperateResult.CreateSuccessResult( );
- }
- catch(Exception ex)
- {
- arrays = new T[0];
- return new OperateResult( )
- {
- Message = ex.Message
- };
- }
-
- }
- #endregion
- }
- }
|