OSDN Git Service

add polling for auto reconnection
authoronuxy <n.nanatunoko@gmail.com>
Sat, 15 Sep 2012 09:23:37 +0000 (18:23 +0900)
committeronuxy <n.nanatunoko@gmail.com>
Sat, 15 Sep 2012 09:23:37 +0000 (18:23 +0900)
CUTEn/src/jp/ac/titech/sharp4k/cuten/AchievementsSenderTask.java

index 56d9f1e..5b5200c 100644 (file)
@@ -15,7 +15,9 @@ public class AchievementsSenderTask extends TimerTask implements ServerAccess {
        private LinkedList<Achievement> list;
        private HttpPutAchievementTask httpTasks;
        private Timer timer = null;
-       private final static int periodTime = 1000;
+       private final static int periodTime = 0;
+       private final static int periodReconnectionTime = 5000;
+       private boolean reconnectionMode = false;
        private Achievement nowAchievement;
 
        public AchievementsSenderTask(Context context, LinkedList<Achievement> list) {
@@ -51,7 +53,8 @@ public class AchievementsSenderTask extends TimerTask implements ServerAccess {
 
        @Override
        public void postExecute(String result) {
-               if (result != null) {
+               boolean sucessful = (result != null);
+               if (sucessful) {
                        // データベース読み取りor作成
                        SQLiteOpenHelper h = new SQLHelper(context);
                        final SQLiteDatabase db = h.getReadableDatabase();
@@ -59,13 +62,25 @@ public class AchievementsSenderTask extends TimerTask implements ServerAccess {
                        nowAchievement.setSubmitted(true);
                        nowAchievement.merge(db);
                        db.close();
+                       reconnectionMode = false;
+               } else {
+                       reconnectionMode = true;
                }
                synchronized (list) {
                        list.remove(nowAchievement);
+                       if (!sucessful) {
+                               list.push(nowAchievement);
+                       }
                        if (list.size() > 0) {
                                timer = new Timer(true);
+                               int period;
+                               if (!reconnectionMode) {
+                                       period = periodTime;
+                               } else {
+                                       period = periodReconnectionTime;
+                               }
                                timer.schedule(new AchievementsSenderTask(context, list),
-                                               periodTime);
+                                               period);
                        }
                }
        }