|
@@ -9,15 +9,17 @@ namespace Client
|
|
|
{
|
|
|
public class ClientApp
|
|
|
{
|
|
|
- TaskNettyClient client; // 网络传输客户端
|
|
|
- SimpleMessageHandler simpleHandler; // 网络传输处理
|
|
|
+ static TaskNettyClient client; // 网络传输客户端
|
|
|
+ static SimpleMessageHandler simpleHandler; // 网络传输处理
|
|
|
TaskService taskService; // 持久化任务
|
|
|
TaskDownloadManager taskDownloadManager; // 下载任务文件(Http)
|
|
|
MessageHandler messageHandler; // 处理客户端收到的消息
|
|
|
TaskHandler taskHandler; // 处理服务端发送的任务(监视下载状况等待)
|
|
|
int maxTaskCount; // 能处理的最大任务数量, 影响是否拒绝服务器分发的任务
|
|
|
string defaultFileDir; // 默认文件目录
|
|
|
- IRevitCommandExcutor revitCommandExcutor;
|
|
|
+ private Action<SimpleMessageHandler> heartbeat;
|
|
|
+ IRevitCommandExcutor revitCommandExcutor;
|
|
|
+ private Action<int> reconnectAction;
|
|
|
public ClientApp(string ip, int port, string dir, int maxTaskCount, IRevitCommandExcutor revitCommandExcutor, int maxDownTaskCount=5) {
|
|
|
client = new TaskNettyClient(ip, port);
|
|
|
taskService = new TaskService();
|
|
@@ -46,13 +48,29 @@ namespace Client
|
|
|
}
|
|
|
|
|
|
// 起动心跳线程
|
|
|
- Action<SimpleMessageHandler> heartbeat = SendHeartbeat;
|
|
|
+ heartbeat = SendHeartbeat;
|
|
|
heartbeat.BeginInvoke(simpleHandler, null, null);
|
|
|
|
|
|
client.RunClientAsync(simpleHandler).Wait();
|
|
|
+
|
|
|
+ = Reconnect;
|
|
|
+ reconnectAction.BeginInvoke(30, null, null);
|
|
|
}
|
|
|
|
|
|
- static void SendHeartbeat(SimpleMessageHandler simpleHandler)
|
|
|
+ void Reconnect(int interval)
|
|
|
+ {
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ if (!TaskNettyClient.isConnected)
|
|
|
+ {
|
|
|
+ Console.WriteLine(DateTime.Now + ": reconnecting....");
|
|
|
+ Restart();
|
|
|
+ }
|
|
|
+ Thread.Sleep(interval * 1000);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ void SendHeartbeat(SimpleMessageHandler simpleHandler)
|
|
|
{
|
|
|
while (true)
|
|
|
{
|
|
@@ -83,6 +101,28 @@ namespace Client
|
|
|
taskDownloadManager.resumeAllTasks();
|
|
|
messageHandler.ResumeAllTasks();
|
|
|
}
|
|
|
+
|
|
|
+ public void Restart()
|
|
|
+ {
|
|
|
+ simpleHandler = new SimpleMessageHandler();
|
|
|
+ if (messageHandler == null)
|
|
|
+ {
|
|
|
+ taskHandler = new TaskHandler(simpleHandler, taskService, taskDownloadManager, defaultFileDir, revitCommandExcutor);
|
|
|
+ taskHandler.SyncAllTask();
|
|
|
+ messageHandler = new MessageHandler(simpleHandler, maxTaskCount, taskHandler);
|
|
|
+ messageHandler.ResumeAllTasks();
|
|
|
+
|
|
|
+ ThreadPool.QueueUserWorkItem(messageHandler.HandleMessage);
|
|
|
+ ThreadPool.QueueUserWorkItem(taskHandler.RunTasks);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ messageHandler.setSimpleMessageHandler(simpleHandler);
|
|
|
+ taskHandler.setSimpleMessageHandler(simpleHandler);
|
|
|
+ }
|
|
|
+
|
|
|
+ client.RunClientAsync(simpleHandler).Wait();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|