OSDN Git Service

単一メーカの複数デバイス対応の開始。
[gokigen/mangle.git] / app / src / main / java / jp / osdn / gokigen / gokigenassets / camera / vendor / panasonic / connection / PanasonicCameraConnectSequence.kt
1 package jp.osdn.gokigen.gokigenassets.camera.vendor.panasonic.connection
2
3 import android.util.Log
4 import androidx.appcompat.app.AppCompatActivity
5 import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICameraConnection
6 import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICameraConnectionStatus
7 import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICameraStatusReceiver
8 import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICameraChangeListener
9 import jp.osdn.gokigen.gokigenassets.camera.vendor.panasonic.IPanasonicCamera
10 import jp.osdn.gokigen.gokigenassets.camera.vendor.panasonic.IPanasonicCameraHolder
11 import jp.osdn.gokigen.gokigenassets.constants.ICameraConstantConvert
12 import jp.osdn.gokigen.gokigenassets.constants.ICameraConstantConvert.Companion.ID_STRING_CONNECT_CAMERA_DETECTED
13 import jp.osdn.gokigen.gokigenassets.constants.ICameraConstantConvert.Companion.ID_STRING_CONNECT_START
14
15 class PanasonicCameraConnectSequence(private val context: AppCompatActivity, private val cameraStatusReceiver: ICameraStatusReceiver, private val cameraConnection: ICameraConnection, private val cameraHolder: IPanasonicCameraHolder, private val listener: ICameraChangeListener) : Runnable, PanasonicSsdpClient.ISearchResultCallback
16 {
17     companion object
18     {
19         private val TAG = PanasonicCameraConnectSequence::class.java.simpleName
20     }
21     private val client = PanasonicSsdpClient(context, this, cameraStatusReceiver, 1)
22
23     override fun run()
24     {
25         Log.v(TAG, "search()")
26         try
27         {
28             cameraStatusReceiver.onStatusNotify(context.getString(ID_STRING_CONNECT_START))
29             client.search()
30         }
31         catch (e: Exception)
32         {
33             e.printStackTrace()
34         }
35     }
36
37     private fun onConnectNotify()
38     {
39         try
40         {
41             val thread = Thread { // カメラとの接続確立を通知する
42                 cameraStatusReceiver.onStatusNotify(context.getString(ICameraConstantConvert.ID_STRING_CONNECT_CONNECTED))
43                 cameraStatusReceiver.onCameraConnected()
44                 Log.v(TAG, "onConnectNotify()")
45                 cameraConnection.forceUpdateConnectionStatus(ICameraConnectionStatus.CameraConnectionStatus.CONNECTED)
46             }
47             thread.start()
48         }
49         catch (e: Exception)
50         {
51             e.printStackTrace()
52         }
53     }
54
55     /* ISearchResultCallback */
56     override fun onDeviceFound(cameraDevice: IPanasonicCamera)
57     {
58         try
59         {
60             cameraStatusReceiver.onStatusNotify(context.getString(ID_STRING_CONNECT_CAMERA_DETECTED) + " " + cameraDevice.getFriendlyName())
61             cameraHolder.detectedCamera(cameraDevice)
62         }
63         catch (e: Exception)
64         {
65             e.printStackTrace()
66         }
67     }
68
69     /* ISearchResultCallback */
70     override fun onFinished()
71     {
72         Log.v(TAG, "PanasonicCameraConnectSequence.onFinished()")
73         try
74         {
75             val thread = Thread {
76                 try
77                 {
78                     cameraHolder.prepare()
79                     cameraHolder.startRecMode()
80                     cameraHolder.startEventWatch(listener)
81                 }
82                 catch (e: Exception)
83                 {
84                     e.printStackTrace()
85                 }
86                 Log.v(TAG, "CameraConnectSequence:: connected.")
87                 onConnectNotify()
88             }
89             thread.start()
90         }
91         catch (e: Exception)
92         {
93             e.printStackTrace()
94         }
95     }
96
97     /* ISearchResultCallback */
98     override fun onErrorFinished(reason: String?)
99     {
100         cameraConnection.alertConnectingFailed(reason)
101     }
102 }