|
@@ -9,15 +9,17 @@ namespace Client
|
|
|
{
|
|
|
public class ClientApp
|
|
|
{
|
|
|
- TaskNettyClient client;
|
|
|
- SimpleMessageHandler simpleHandler;
|
|
|
+ static TaskNettyClient client;
|
|
|
+ static SimpleMessageHandler simpleHandler;
|
|
|
TaskService taskService;
|
|
|
TaskDownloadManager taskDownloadManager;
|
|
|
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();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|