Browse Source

merge AriaNg commit(https://github.com/mayswind/AriaNg/commit/a69301f18eb7b684be35e24d6fc288451b22d472)

MaysWind 3 years ago
parent
commit
87829c3c3a
1 changed files with 49 additions and 5 deletions
  1. 49 5
      app/scripts/services/aria2WebSocketRpcService.js

+ 49 - 5
app/scripts/services/aria2WebSocketRpcService.js

@@ -12,6 +12,41 @@
         var sendIdStates = {};
         var eventCallbacks = {};
 
+        var processRequestFailed = function (request) {
+            var content = angular.fromJson(request);
+
+            if (!content) {
+                return;
+            }
+
+            var uniqueId = content.id;
+
+            if (!uniqueId) {
+                return;
+            }
+
+            var state = sendIdStates[uniqueId];
+
+            if (!state) {
+                return;
+            }
+
+            var context = state.context;
+
+            state.deferred.reject({
+                success: false,
+                context: context
+            });
+
+            if (context.errorCallback) {
+                ariaNgLogService.debug('[aria2WebSocketRpcService.processRequestFailed] ' + (context && context.requestBody && context.requestBody.method ? context.requestBody.method + ' ' : '') + 'request failed');
+
+                context.errorCallback(context.id, { message: 'Cannot connect to aria2!' });
+            }
+
+            delete sendIdStates[uniqueId];
+        };
+
         var processMethodCallback = function (content) {
             var uniqueId = content.id;
 
@@ -39,13 +74,13 @@
             }
 
             if (content.result && context.successCallback) {
-                ariaNgLogService.debug('[aria2WebSocketRpcService.request] ' + (context && context.requestBody && context.requestBody.method ? context.requestBody.method + ' ' : '') + 'response success', content);
+                ariaNgLogService.debug('[aria2WebSocketRpcService.processMethodCallback] ' + (context && context.requestBody && context.requestBody.method ? context.requestBody.method + ' ' : '') + 'response success', content);
 
                 context.successCallback(context.id, content.result);
             }
 
             if (content.error && context.errorCallback) {
-                ariaNgLogService.debug('[aria2WebSocketRpcService.request] ' + (context && context.requestBody && context.requestBody.method ? context.requestBody.method + ' ' : '') + 'response error', content);
+                ariaNgLogService.debug('[aria2WebSocketRpcService.processMethodCallback] ' + (context && context.requestBody && context.requestBody.method ? context.requestBody.method + ' ' : '') + 'response error', content);
 
                 context.errorCallback(context.id, content.error);
             }
@@ -77,11 +112,15 @@
             if (socketClient === null) {
                 try {
                     socketClient = ariaNgNativeElectronService.createWebSocketClient(rpcUrl, {
-                        maxTimeout: 1 // ms
+                        maxTimeout: 1, // ms
+                        reconnectInterval: ariaNgSettingService.getWebSocketReconnectInterval()
                     });
 
                     socketClient.onMessage(function (message) {
                         if (!message || !message.data) {
+                            if (message.request) {
+                                processRequestFailed(message.request);
+                            }
                             return;
                         }
 
@@ -111,11 +150,16 @@
                     socketClient.onClose(function (e) {
                         ariaNgLogService.warn('[aria2WebSocketRpcService.onClose] websocket is closed', e);
 
-                        if (ariaNgSettingService.getWebSocketReconnectInterval() > 0 && context && context.connectionWaitingToReconnectCallback) {
+                        var enableAutoReconnect = ariaNgSettingService.getWebSocketReconnectInterval() > 0;
+
+                        if (enableAutoReconnect) {
+                            planToReconnect(context);
+                        }
+
+                        if (enableAutoReconnect && context && context.connectionWaitingToReconnectCallback) {
                             context.connectionWaitingToReconnectCallback({
                                 rpcUrl: rpcUrl
                             });
-                            planToReconnect(context);
                         } else if (context && context.connectionFailedCallback) {
                             context.connectionFailedCallback({
                                 rpcUrl: rpcUrl