ClientApp.cs 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using HttpDownload;
  2. using NettyClient;
  3. using NettyClient.proto;
  4. using System;
  5. using System.Threading;
  6. using TaskDatabase;
  7. namespace Client
  8. {
  9. public class ClientApp
  10. {
  11. TaskNettyClient client; // 网络传输客户端
  12. SimpleMessageHandler simpleHandler; // 网络传输处理
  13. TaskService taskService; // 持久化任务
  14. TaskDownloadManager taskDownloadManager; // 下载任务文件(Http)
  15. MessageHandler messageHandler; // 处理客户端收到的消息
  16. TaskHandler taskHandler; // 处理服务端发送的任务(监视下载状况等待)
  17. int maxTaskCount; // 能处理的最大任务数量, 影响是否拒绝服务器分发的任务
  18. string defaultFileDir; // 默认文件目录
  19. IRevitCommandExcutor revitCommandExcutor;
  20. public ClientApp(string ip, int port, string dir, int maxTaskCount, IRevitCommandExcutor revitCommandExcutor, int maxDownTaskCount=5) {
  21. client = new TaskNettyClient(ip, port);
  22. taskService = new TaskService();
  23. taskDownloadManager = new TaskDownloadManager(maxDownTaskCount);
  24. this.maxTaskCount = maxTaskCount;
  25. defaultFileDir = dir;
  26. this.revitCommandExcutor = revitCommandExcutor;
  27. }
  28. public void Start() {
  29. simpleHandler = new SimpleMessageHandler();
  30. if (messageHandler == null)
  31. {
  32. taskHandler = new TaskHandler(simpleHandler, taskService, taskDownloadManager, defaultFileDir, revitCommandExcutor);
  33. taskHandler.SyncAllTask();
  34. messageHandler = new MessageHandler(simpleHandler, maxTaskCount, taskHandler);
  35. messageHandler.ResumeAllTasks();
  36. ThreadPool.QueueUserWorkItem(messageHandler.HandleMessage);
  37. ThreadPool.QueueUserWorkItem(taskHandler.RunTasks);
  38. }
  39. else
  40. {
  41. messageHandler.setSimpleMessageHandler(simpleHandler);
  42. taskHandler.setSimpleMessageHandler(simpleHandler);
  43. }
  44. // 起动心跳线程
  45. Action<SimpleMessageHandler> heartbeat = SendHeartbeat;
  46. heartbeat.BeginInvoke(simpleHandler, null, null);
  47. client.RunClientAsync(simpleHandler).Wait();
  48. }
  49. static void SendHeartbeat(SimpleMessageHandler simpleHandler)
  50. {
  51. while (true)
  52. {
  53. try
  54. {
  55. Thread.Sleep(30000);
  56. var retMsg = MessageUtil.generateMessage(Command.Useless.ToString(), 0, "{}");
  57. simpleHandler.WriteMessage(retMsg);
  58. }
  59. catch (Exception e)
  60. {
  61. Console.WriteLine(e);
  62. throw;
  63. }
  64. }
  65. }
  66. public void Close() {
  67. client.CloseAsync().Wait();
  68. }
  69. public void PauseAllTask() {
  70. taskDownloadManager.pauseAllTasks();
  71. messageHandler.PauseAllTasks();
  72. }
  73. public void ResumeAllTask()
  74. {
  75. taskDownloadManager.resumeAllTasks();
  76. messageHandler.ResumeAllTasks();
  77. }
  78. }
  79. }