From b84090305166723fcdf2e8e642e46889299caebe Mon Sep 17 00:00:00 2001
From: Adhidarma Hadiwinoto <gua@adhisimon.org>
Date: Tue, 3 May 2016 23:45:13 +0700
Subject: [PATCH] max retry

---
 partner-cjk.js | 31 ++++++++++++++++++++++---------
 1 file changed, 22 insertions(+), 9 deletions(-)

diff --git a/partner-cjk.js b/partner-cjk.js
index 234a6f5..ad5b911 100644
--- a/partner-cjk.js
+++ b/partner-cjk.js
@@ -119,6 +119,12 @@ function topupResponseHandler(body) {
             trxid = result.ciwaru.trxid[0];
         }
         
+        var task = taskCache.get(trxid);
+        if (!task) {
+            logger.warn('Got reply for undefined task');
+            return;
+        }
+        
         if (message.indexOf('PENDING') >= 0) {
             rc = '68';
         }
@@ -133,16 +139,21 @@ function topupResponseHandler(body) {
             }
         }
         
-        callbackReport(trxid, rc, message);
+        if ((task.retry == maxRetry) || (rc != '68')) {
+            callbackReport(trxid, rc, message);
+        }
         
         if (rc == '68') {
-            task = taskCache.get(trxid);
-            if (!task) {
-                return;
+            task.retry--;
+            taskCache.set(trxid, task);
+                
+            if (task.retry) {
+                logger.info('Got pending status, retrying in ' +  sleepBeforeRetry + 's');
+                setTimeout(topupRequest, sleepBeforeRetry * 1000, task);
+            }
+            else {
+                logger.warn('Maximum retry for pending status exceeded', {task: task});
             }
-            
-            logger.info('Got pending status, retrying in ' +  sleepBeforeRetry + 's');
-            setTimeout(topupRequest, sleepBeforeRetry * 1000, task);
         } else {
             taskCache.del(trxid);
         }
@@ -150,8 +161,10 @@ function topupResponseHandler(body) {
 }
 
 function topupRequest(task, retry) {
-    
-    logger.info('Executing task', {retry: retry});
+        
+    if (retry === undefined) {
+        task.retry = maxRetry;
+    }
     
     taskCache.set(task.requestId, task);
     
-- 
1.9.0