OSDN Git Service

panasonic機で状態のpollingをするようにした。
authorMRSa <mrsa@myad.jp>
Sun, 28 Jun 2020 12:25:42 +0000 (21:25 +0900)
committerMRSa <mrsa@myad.jp>
Sun, 28 Jun 2020 12:25:42 +0000 (21:25 +0900)
app/src/main/java/net/osdn/gokigen/pkremote/camera/vendor/panasonic/wrapper/PanasonicCameraWrapper.java
app/src/main/java/net/osdn/gokigen/pkremote/camera/vendor/panasonic/wrapper/eventlistener/CameraEventObserver.java
app/src/main/java/net/osdn/gokigen/pkremote/camera/vendor/panasonic/wrapper/eventlistener/CameraStatusHolder.java

index 59ea0c8..9d22cfb 100644 (file)
@@ -161,6 +161,7 @@ public class PanasonicCameraWrapper implements IPanasonicCameraHolder, IPanasoni
     @Override
     public void startEventWatch(@Nullable ICameraChangeListener listener)
     {
+        Log.v(TAG, " startEventWatch ");
         try
         {
             if (eventObserver != null)
index 4fa9a3d..95a046b 100644 (file)
@@ -6,11 +6,9 @@ import android.util.Log;
 import androidx.annotation.NonNull;
 
 import net.osdn.gokigen.pkremote.camera.interfaces.status.ICameraChangeListener;
+import net.osdn.gokigen.pkremote.camera.utils.SimpleHttpClient;
 import net.osdn.gokigen.pkremote.camera.vendor.panasonic.wrapper.IPanasonicCamera;
 
-import org.json.JSONArray;
-import org.json.JSONObject;
-
 /**
  *
  *
@@ -18,12 +16,12 @@ import org.json.JSONObject;
 public class CameraEventObserver implements ICameraEventObserver
 {
     private static final String TAG = CameraEventObserver.class.getSimpleName();
+    private static final int TIMEOUT_MS = 3000;
+    private final CameraStatusHolder statusHolder;
     private boolean isEventMonitoring;
     private boolean isActive;
 
     private final IPanasonicCamera remote;
-    // private final ReplyJsonParser replyParser;
-    private String eventVersion = "1.1";  // 初期値を "1.0" から "1.1" に更新
 
     public static ICameraEventObserver newInstance(@NonNull Context context, @NonNull IPanasonicCamera apiClient)
     {
@@ -34,7 +32,7 @@ public class CameraEventObserver implements ICameraEventObserver
     {
         super();
         remote = apiClient;
-        //replyParser = new ReplyJsonParser(new Handler(context.getMainLooper()));
+        statusHolder = new CameraStatusHolder(context);
         isEventMonitoring = false;
         isActive = false;
     }
@@ -47,14 +45,13 @@ public class CameraEventObserver implements ICameraEventObserver
             Log.w(TAG, "start() observer is not active.");
             return (false);
         }
-
         if (isEventMonitoring)
         {
             Log.w(TAG, "start() already starting.");
             return (false);
         }
+        isEventMonitoring = true;
 
-        isEventMonitoring = false;
         try
         {
             Thread thread = new Thread()
@@ -63,64 +60,26 @@ public class CameraEventObserver implements ICameraEventObserver
                 public void run()
                 {
                     Log.d(TAG, "start() exec.");
-                    boolean firstCall = true;
-                    MONITORLOOP: while (isEventMonitoring)
+                    while (isEventMonitoring)
                     {
-                        // At first, call as non-Long Polling.
-                        boolean longPolling = !firstCall;
                         try
                         {
-/*
-                            // Call getEvent API.
-                            JSONObject replyJson = remoteApi.getEvent(eventVersion, longPolling);
-
-                            // Check error code at first.
-                            int errorCode = findErrorCode(replyJson);
-                            Log.d(TAG, "getEvent errorCode: " + errorCode);
-                            switch (errorCode) {
-                                case 0: // no error
-                                    // Pass through.
-                                    break;
-                                case 1: // "Any" error
-                                case 12: // "No such method" error
-                                    if (eventVersion.equals("1.1"))
-                                    {
-                                        // "1.1" でエラーが発生した時には "1.0" にダウングレードして再実行
-                                        eventVersion = "1.0";
-                                        continue MONITORLOOP;
-                                    }
-                                    replyParser.fireResponseErrorListener();
-                                    break MONITORLOOP; // end monitoring.
-
-                                case 2: // "Timeout" error
-                                    // Re-call immediately.
-                                    continue MONITORLOOP;
-
-                                case 40402: // "Already polling" error
-                                    // Retry after 5 sec.
-                                    try {
-                                        Thread.sleep(5000);
-                                    } catch (InterruptedException e) {
-                                        // do nothing.
-                                    }
-                                    continue MONITORLOOP;
-
-                                default:
-                                    Log.w(TAG, "SimpleCameraEventObserver: Unexpected error: " + errorCode);
-                                    replyParser.fireResponseErrorListener();
-                                    break MONITORLOOP; // end monitoring.
-                            }
-
-                            //  parse
-                            replyParser.parse(replyJson);
-*/
+                            // parse reply message
+                            statusHolder.parse(SimpleHttpClient.httpGet(remote.getCmdUrl() + "cam.cgi?mode=getstate", TIMEOUT_MS));
+                        }
+                        catch (Exception e)
+                        {
+                            e.printStackTrace();
+                        }
+                        try
+                        {
+                            Thread.sleep(1000);
                         }
                         catch (Exception e)
                         {
                             e.printStackTrace();
                         }
-                        firstCall = false;
-                    } // MONITORLOOP end.
+                    }
                     isEventMonitoring = false;
                 }
             };
@@ -151,7 +110,7 @@ public class CameraEventObserver implements ICameraEventObserver
     {
         try
         {
-            //replyParser.setEventChangeListener(listener);
+            statusHolder.setEventChangeListener(listener);
         }
         catch (Exception e)
         {
@@ -164,7 +123,7 @@ public class CameraEventObserver implements ICameraEventObserver
     {
         try
         {
-            //replyParser.clearEventChangeListener();
+            statusHolder.clearEventChangeListener();
         }
         catch (Exception e)
         {
@@ -175,8 +134,7 @@ public class CameraEventObserver implements ICameraEventObserver
     @Override
     public ICameraStatusHolder getCameraStatusHolder()
     {
-        return (null);
-        //return (replyParser);
+        return (statusHolder);
     }
 
     @Override
@@ -184,23 +142,4 @@ public class CameraEventObserver implements ICameraEventObserver
     {
         isActive = true;
     }
-
-    private static int findErrorCode(JSONObject replyJson)
-    {
-        int code = 0; // 0 means no error.
-        try
-        {
-            if (replyJson.has("error"))
-            {
-                JSONArray errorObj = replyJson.getJSONArray("error");
-                code = errorObj.getInt(0);
-            }
-        }
-        catch (Exception e)
-        {
-            e.printStackTrace();
-            code = -1;
-        }
-        return (code);
-    }
 }
index b2182a2..6e8a146 100644 (file)
@@ -1,9 +1,48 @@
 package net.osdn.gokigen.pkremote.camera.vendor.panasonic.wrapper.eventlistener;
 
+import android.content.Context;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+
+import net.osdn.gokigen.pkremote.camera.interfaces.status.ICameraChangeListener;
+
 import java.util.List;
 
 public class CameraStatusHolder implements ICameraStatusHolder
 {
+    private static final String TAG = CameraStatusHolder.class.getSimpleName();
+    private final Context context;
+    private ICameraChangeListener listener = null;
+
+    CameraStatusHolder(@NonNull Context context)
+    {
+        this.context = context;
+
+    }
+
+    void parse(String reply)
+    {
+        try
+        {
+            Log.v(TAG, " getState : " + reply);
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    void setEventChangeListener(@NonNull ICameraChangeListener listener)
+    {
+        this.listener = listener;
+    }
+
+    void clearEventChangeListener()
+    {
+        this.listener = null;
+    }
+
     @Override
     public String getCameraStatus()
     {