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

com.github.jleskovar.btcrpc.websocket.JsonWebSocketRpcClient.kt Maven / Gradle / Ivy

The newest version!
package com.github.jleskovar.btcrpc.websocket

import com.neovisionaries.ws.client.WebSocket
import com.neovisionaries.ws.client.WebSocketAdapter
import com.neovisionaries.ws.client.WebSocketListener
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
import java.lang.reflect.Type
import java.util.concurrent.CompletableFuture
import javax.net.ssl.SSLContext

class JsonWebSocketRpcClient(wsUrl: String, sslContext: SSLContext) : AbstractJsonWebSocketRpcClient(wsUrl, sslContext) {
    private val responses = mutableMapOf>()

    override fun handleTextMessage(text: String?) {
        val id = fastExtractId(text!!)
        responses[id]?.complete(text)
        responses.remove(id)
    }

    override fun invoke(methodName: String?, argument: Any?, returnType: Type?, extraHeaders: MutableMap?): Any? {
        val outputStream = ByteArrayOutputStream()
        super.invoke(methodName, argument, outputStream)
        val output = outputStream.toString()

        val id = fastExtractId(output)

        try {
            val completableFuture = CompletableFuture()
            responses[id] = completableFuture
            socket.sendText(output)
            val response = completableFuture.get()
            return if (response == null) null else super.readResponse(returnType, ByteArrayInputStream(response.toByteArray()))
        } finally {
            responses.remove(id)
        }
    }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy