All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.com.huawei.hilink.c2c.integration.helper.requestHandlers.DeviceCommandHiLinkService.kt Maven / Gradle / Ivy

package com.huawei.hilink.c2c.integration.helper.requestHandlers

import com.huawei.hilink.c2c.integration.helper.ProtocolConversionWrapper
import com.huawei.hilink.c2c.integration.helper.api.DeviceDiscovery
import com.huawei.hilink.c2c.integration.helper.api.UserInfo
import com.huawei.hilink.c2c.integration.helper.dto.HiLinkResultCodes
import com.huawei.hilink.c2c.integration.helper.dto.common.HiLinkHeader
import com.huawei.hilink.c2c.integration.helper.dto.headers.HiLinkHeadersBuilder
import com.huawei.hilink.c2c.integration.helper.dto.inbound.request.DeviceCommandRequest
import com.huawei.hilink.c2c.integration.helper.dto.inbound.response.DeviceCommandResponse
import com.huawei.hilink.c2c.integration.helper.dto.inbound.response.HiLinkResponse
import com.huawei.hilink.c2c.integration.helper.json.readValueOrNull
import kotlinx.serialization.json.Json

internal class DeviceCommandHiLinkService(
    private val objectMapper: Json,
    private val hiLinkHeadersBuilder: HiLinkHeadersBuilder,
    private val protocolConversionWrapper: ProtocolConversionWrapper,
    private val deviceDiscovery: DeviceDiscovery
) : HiLinkService("DeviceCommand") {

    override suspend fun handle(requestHeader: HiLinkHeader, requestJson: String, userInfo: UserInfo): HiLinkResponse {
        val request: DeviceCommandRequest = objectMapper.readValueOrNull(requestJson)
            ?: return prepareResponse(requestHeader, HiLinkResultCodes.INVALID_PARAMETER)

        val resultCode = protocolConversionWrapper.executeCommand(userInfo, request.payload.command)

        return prepareResponse(requestHeader, resultCode)
    }

    override fun prepareErrorResponse(
        requestHeader: HiLinkHeader,
        resultCode: HiLinkResultCodes,
        description: String
    ): HiLinkResponse {
        return prepareResponse(requestHeader, resultCode, description)
    }

    private fun prepareResponse(
        requestHeader: HiLinkHeader,
        resultCode: HiLinkResultCodes,
        description: String? = null
    ) =
        DeviceCommandResponse(
            header = hiLinkHeadersBuilder.generateResponseHeader(requestHeader),
            payload = DeviceCommandResponse.Payload(
                code = resultCode.code,
                description = description ?: resultCode.description
            )
        )

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy