• Downloader调用WCF服务返回文件


    Generator

      1 using System;
      2 using System.Collections.Generic;
      3 using System.IO;
      4 
      5 namespace Downloader
      6 {
      7     public class Generator : StatusProcess
      8     {
      9         private readonly string _appPath = AppDomain.CurrentDomain.BaseDirectory;
     10         protected void GenerateFileList(string dir, List<FileEntity> fileEntities)
     11         {
     12             var files = Directory.GetFiles(dir);
     13             foreach (var tem in files)
     14             {
     15                 var fileInfo = new FileInfo(tem);
     16                 var file = new FileEntity()
     17                 {
     18                     FileName = tem.Replace(_appPath, "").Replace("\", "\\"),
     19                     LastUpdate = fileInfo.LastWriteTime.ToString("yyyyMMddHHmmss")
     20                 };
     21                 fileEntities.Add(file);
     22             }
     23 
     24             var directories = Directory.GetDirectories(dir);
     25             foreach (var directory in directories)
     26             {
     27                 GenerateFileList(directory, fileEntities);
     28             }
     29         }
     30 
     31         public void GenerateFileList()
     32         {
     33             var filelist = new FileListEntity() { FileCode = Guid.NewGuid().ToString().ToUpper().Replace("-", "") };
     34             GenerateFileList(_appPath, filelist.FileEntities);
     35             filelist.SerializeConfig(Path.Combine(_appPath, "filelist.xml"));
     36         }
     37 
     38         public void DownloadFileList(string path, string url, string customerCode, string token, string mac)
     39         {
     40             #region 请求filelist.xml
     41 
     42             var client = new RestClient
     43             {
     44                 EndPoint = url,
     45                 Method = HttpVerb.Post
     46             };
     47 
     48             const string curfilename = "curfilelist.xml";
     49             const string newfilename = "filelist.xml";
     50             InvokeStatus(string.Format("正在请求{0}", newfilename));
     51             string filename = newfilename;
     52             string postdata =
     53                 string.Format(""CustomerCode":"{0}","Token":"{1}","Mac":"{2}","Filename":"{3}"",
     54                     customerCode, token, mac, filename);
     55             var makeRequest = client.MakeRequest("", postdata);
     56 
     57             #endregion
     58 
     59             if (makeRequest.Length > 0)
     60             {
     61                 InvokeStatus(string.Format("正在保存{0}", newfilename));
     62 
     63                 #region 正在保存filelist.xml
     64 
     65                 filename = Path.Combine(path, filename);
     66                 var directoryName = Path.GetDirectoryName(filename);
     67                 if (!Directory.Exists(directoryName))
     68                 {
     69                     Directory.CreateDirectory(directoryName);
     70                 }
     71                 using (var file = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite))
     72                 {
     73                     file.Write(makeRequest, 0, makeRequest.Length);
     74                 }
     75 
     76                 #endregion
     77 
     78                 #region 判断是否需要更新
     79 
     80                 var curfileListEntity = new FileListEntity();
     81                 var fileListEntity = filename.DeserializeConfig<FileListEntity>();
     82 
     83                 if (File.Exists(Path.Combine(path, curfilename)))
     84                 {
     85                     curfileListEntity = Path.Combine(path, curfilename).DeserializeConfig<FileListEntity>();
     86                     if (fileListEntity.FileCode == curfileListEntity.FileCode)
     87                     {
     88                         File.Delete(Path.Combine(path, newfilename));
     89                         InvokeStatus("不需要更新");
     90                         return;
     91                     }
     92                 }
     93 
     94                 #endregion
     95 
     96                 #region 更新文件列表
     97 
     98                 foreach (var fileEntity in fileListEntity.FileEntities)
     99                 {
    100                     var find = curfileListEntity.FileEntities.Find(entity => entity.FileName == fileEntity.FileName);
    101 
    102                     if (find != null && fileEntity.LastUpdate == find.LastUpdate)
    103                     {
    104                         continue;
    105                     }
    106                     filename = fileEntity.FileName;
    107                     InvokeStatus("正在更新" + filename);
    108                     postdata = string.Format(""CustomerCode":"{0}","Token":"{1}","Mac":"{2}","Filename":"{3}"", customerCode, token, mac, filename);
    109                     makeRequest = client.MakeRequest("", postdata);
    110                     if (makeRequest.Length > 0)
    111                     {
    112                         InvokeStatus("正在保存" + filename);
    113                         filename = Path.Combine(path, filename);
    114                         directoryName = Path.GetDirectoryName(filename);
    115                         if (!Directory.Exists(directoryName))
    116                         {
    117                             Directory.CreateDirectory(directoryName);
    118                         }
    119                         using (var file = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite))
    120                         {
    121                             file.Write(makeRequest, 0, makeRequest.Length);
    122                         }
    123                     }
    124                 }
    125 
    126                 #endregion
    127 
    128                 File.Delete(Path.Combine(path, curfilename));
    129                 File.Move(Path.Combine(path, newfilename), Path.Combine(path, curfilename));
    130                 InvokeStatus("update ok");
    131             }
    132             else
    133             {
    134                 InvokeStatus("请求更新失败,请确认配置信息");
    135             }
    136         }
    137     }
    138 
    139     public class FileEntity
    140     {
    141         public string LastUpdate { get; set; }
    142         public string FileName { get; set; }
    143     }
    144 
    145     public class FileListEntity
    146     {
    147         private List<FileEntity> _fileEntities = new List<FileEntity>();
    148         public string FileCode { get; set; }
    149 
    150         public List<FileEntity> FileEntities
    151         {
    152             get { return _fileEntities; }
    153             set { _fileEntities = value; }
    154         }
    155     }
    156 }

    StatusProcess

     1 /* Jonney Create 2015-3-22 */
     2 using System.Diagnostics;
     3 using System.Windows.Forms;
     4 
     5 namespace Downloader
     6 {
     7     public delegate void DownloadStatusHandler(string status);
     8 
     9     public class StatusProcess
    10     {
    11         /// <summary>
    12         /// 下载状态事件,状态改变都会触发
    13         /// </summary>
    14         public event DownloadStatusHandler DownloadStatus;
    15 
    16         protected readonly Stopwatch Stopwatch;
    17 
    18         public StatusProcess()
    19         {
    20             Stopwatch = new Stopwatch();
    21         }
    22 
    23         /// <summary>
    24         /// 如果DownloadStatus事件被注册,都会被执行
    25         /// </summary>
    26         /// <param name="status"></param>
    27         protected void InvokeStatus(string status)
    28         {
    29             if (DownloadStatus != null)
    30             {
    31                 DownloadStatus.Invoke(status);
    32                 Application.DoEvents();
    33             }
    34         }
    35     }
    36 
    37 
    38 }

    Downloader

     1         private void btnUpdater_Click(object sender, EventArgs e)
     2         {
     3             var thread = new Thread(DownloadFilelist) {IsBackground = true};
     4             thread.Start();
     5         }
     6 
     7         private void DownloadFilelist()
     8         {
     9             try
    10             {
    11                 SetEnable(false);
    12                 const string cfg = "CustomerInfo.xml";
    13                 var generator = new Generator();
    14                 generator.DownloadStatus += generator_DownloadStatus;
    15 
    16                 string file = Path.Combine(Application.StartupPath, cfg);
    17                 if (!File.Exists(file))
    18                 {
    19                     generator_DownloadStatus(string.Format("配置信息{0}损坏", cfg));
    20                     return;
    21                 }
    22                 var customerInfo = file.DeserializeConfig<CustomerInfo>();
    23                 if (customerInfo == null)
    24                 {
    25                     generator_DownloadStatus(string.Format("配置信息{0}损坏", cfg));
    26                     return;
    27                 }
    28 
    29                 var mac = GetMacString();
    30                 customerInfo.Mac = mac[0];
    31                 generator.DownloadFileList(Application.StartupPath
    32                     , customerInfo.ServerUrl
    33                     , customerInfo.CustomerCode
    34                     , customerInfo.Token
    35                     , customerInfo.Mac);
    36 
    37                 this.Invoke(new Action(Boot));
    38             }
    39             catch (Exception err)
    40             {
    41                 generator_DownloadStatus(string.Format("{0}", err.Message));
    42             }
    43             finally
    44             {
    45                 /*SetEnable(true);*/
    46             }
    47         }
    48 
    49         private void SetEnable(bool isEnable)
    50         {
    51             this.Invoke(new Action(() =>
    52             {
    53                 btnClose.Enabled = isEnable;
    54                 btnUpdater.Enabled = isEnable;
    55             }));
    56         }
    57 
    58         private void generator_DownloadStatus(string status)
    59         {
    60             this.Invoke(new Action(() =>
    61             {
    62                 label1.Text = status;
    63                 Application.DoEvents();
    64             }));
    65         }
    66 
    67         public string[] GetMacString()
    68         {
    69             string strMac = "";
    70             NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
    71             foreach (NetworkInterface ni in interfaces)
    72             {
    73                 if (ni.OperationalStatus == OperationalStatus.Up)
    74                 {
    75                     strMac += ni.GetPhysicalAddress() + "|";
    76                 }
    77             }
    78             return strMac.Split('|');
    79 
    80         }
  • 相关阅读:
    [转]关于WM_NCHITTEST消息
    微信小程序的年月日-年月日选择器基于picker的mode = multiSelector日期范围
    解决移动端浏览器 HTML 音频不能自动播放的三种方法
    小程序反编译
    CSS实现背景透明,文字不透明
    event.target 属性返回哪个 DOM 元素触发了事件。
    微信小程序去除button边框
    jQuery setInterval倒计时精确到毫秒
    获取openid [微信小程序]
    array_column() 函数[二维数组转为一维数组]
  • 原文地址:https://www.cnblogs.com/jonney-wang/p/5724266.html
Copyright © 2020-2023  润新知