import android.content.Context
import android.util.Log
import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICameraStatusReceiver
+import jp.osdn.gokigen.gokigenassets.camera.vendor.ICameraControlCoordinator
import jp.osdn.gokigen.gokigenassets.camera.vendor.panasonic.IPanasonicCamera
import jp.osdn.gokigen.gokigenassets.camera.vendor.panasonic.wrapper.PanasonicCameraDeviceProvider
-import jp.osdn.gokigen.gokigenassets.constants.ICameraConstantConvert.Companion.ID_STRING_CAMERA_NOT_FOUND
-import jp.osdn.gokigen.gokigenassets.constants.ICameraConstantConvert.Companion.ID_STRING_CONNECT_CAMERA_FOUND
-import jp.osdn.gokigen.gokigenassets.constants.ICameraConstantConvert.Companion.ID_STRING_CONNECT_CAMERA_RECEIVED_REPLY
-import jp.osdn.gokigen.gokigenassets.constants.ICameraConstantConvert.Companion.ID_STRING_CONNECT_CAMERA_REJECTED
-import jp.osdn.gokigen.gokigenassets.constants.ICameraConstantConvert.Companion.ID_STRING_CONNECT_CAMERA_SEARCH_REQUEST
-import jp.osdn.gokigen.gokigenassets.constants.ICameraConstantConvert.Companion.ID_STRING_CONNECT_WAIT_REPLY_CAMERA
+import jp.osdn.gokigen.constants.IStringResourceConstantConvert.Companion.ID_STRING_CAMERA_NOT_FOUND
+import jp.osdn.gokigen.constants.IStringResourceConstantConvert.Companion.ID_STRING_CONNECT_CAMERA_FOUND
+import jp.osdn.gokigen.constants.IStringResourceConstantConvert.Companion.ID_STRING_CONNECT_CAMERA_RECEIVED_REPLY
+import jp.osdn.gokigen.constants.IStringResourceConstantConvert.Companion.ID_STRING_CONNECT_CAMERA_REJECTED
+import jp.osdn.gokigen.constants.IStringResourceConstantConvert.Companion.ID_STRING_CONNECT_CAMERA_SEARCH_REQUEST
+import jp.osdn.gokigen.constants.IStringResourceConstantConvert.Companion.ID_STRING_CONNECT_WAIT_REPLY_CAMERA
import jp.osdn.gokigen.gokigenassets.utils.communication.SimpleHttpClient
import jp.osdn.gokigen.gokigenassets.utils.communication.XmlElement
import java.net.DatagramPacket
import kotlin.collections.ArrayList
-class PanasonicSsdpClient(private val context: Context, private val callback: ISearchResultCallback, private val cameraStatusReceiver: ICameraStatusReceiver, private var sendRepeatCount: Int = 0)
+class PanasonicSsdpClient(private val context: Context, private val callback: ISearchResultCallback, private val cameraStatusReceiver: ICameraStatusReceiver, private val cameraCoordinator: ICameraControlCoordinator, private val number : Int, private var sendRepeatCount: Int = 0)
{
companion object
{
socket.soTimeout = SSDP_RECEIVE_TIMEOUT
socket.receive(receivePacket)
val ssdpReplyMessage = String(receivePacket.getData(), 0, receivePacket.length, Charset.forName("UTF-8"))
- var ddUsn: String?
+ var ddUsn: String
if (ssdpReplyMessage.contains("HTTP/1.1 200"))
{
ddUsn = findParameterValue(ssdpReplyMessage, "USN")
+ Log.v(TAG, "- - - - - - - USN : $ddUsn")
cameraStatusReceiver.onStatusNotify(context.getString(ID_STRING_CONNECT_CAMERA_RECEIVED_REPLY))
- if (!foundDevices.contains(ddUsn))
+ if ((ddUsn.isNotEmpty())&&(!foundDevices.contains(ddUsn))&&(!cameraCoordinator.isAssignedCameraControl(ddUsn)))
{
val ddLocation = findParameterValue(ssdpReplyMessage, "LOCATION")
foundDevices.add(ddUsn)
//// Fetch Device Description XML and parse it.
- if (ddLocation != null)
+ if (ddLocation.isNotEmpty())
{
val http = SimpleHttpClient()
cameraStatusReceiver.onStatusNotify("LOCATION : $ddLocation")
var retryTimeout = 3
val registUrl =
device.getCmdUrl() + "cam.cgi?mode=accctrl&type=req_acc&value=" + device.getClientDeviceUuId() + "&value2=GOKIGEN_a01Series"
- var reply: String =
- http.httpGet(registUrl, SSDP_RECEIVE_TIMEOUT)
+ var reply: String = http.httpGet(registUrl, SSDP_RECEIVE_TIMEOUT)
while (retryTimeout > 0 && reply.contains("ok_under_research_no_msg")) {
try
{
}
if (reply.contains("ok"))
{
+ cameraCoordinator.assignCameraControl(number, ddUsn)
callback.onDeviceFound(device)
// カメラと接続できた場合は breakする
+ Log.v(TAG, " assignCameraControl execution Result: " + cameraCoordinator.isAssignedCameraControl(ddUsn))
break
}
// 接続(デバイス登録)エラー...
callback.onFinished()
}
- private fun findParameterValue(ssdpMessage: String, paramName: String): String?
+ private fun findParameterValue(ssdpMessage: String, paramName: String): String
{
var name = paramName
if (!name.endsWith(":"))
e.printStackTrace()
}
}
- return null
+ return ("")
}
/**
*
*
*/
- fun searchPanasonicCameraDevice(ddUrl: String): IPanasonicCamera?
+ private fun searchPanasonicCameraDevice(ddUrl: String): IPanasonicCamera?
{
var device: PanasonicCameraDeviceProvider? = null
val ddXml: String