Skip to main content

Custom WebSocket client

Overview

The DuoNetworkClient class is a WebSocket client operations implements transport agnostic NetworkClient.

1. DuoNetworkClient implements NetworkClient

  • Responsibility:
    • Raw WebSocket connection management
    • Message queueing and asynchronous I/O
    • Binary/text data transmission
  • Customization Use Cases:
    • Add Action specific logic for example perform some logic on keygen connect
    • Replace WebSocket library (e.g., Socket.IO, different WebSocket impl)
    • Modify low-level message queueing logic

Example implementing custom websocket client

App.tsx
package com.example.demosilentshard

import com.silencelaboratories.silentshard.duo.initiator.network.DuoNetworkAction
import com.silencelaboratories.silentshard.duo.initiator.network.DuoNetworkClient
import com.silencelaboratories.silentshard.network.websocket.WebsocketConfig
/**
* This class could be extended to add custom logic before or after any websocketClient
* operations such as connecting, read, etc. Or users are open to use their own version of
* websocket client by extending NetworkClient interface.*/
class CustomNetworkClient(websocketConfig: WebsocketConfig) : DuoNetworkClient(websocketConfig) {

override suspend fun connect(
action: DuoNetworkAction, params: String?,
) {
val customAction = when (action) {
is DuoNetworkAction.ECDSA.Import -> {
action
}

is DuoNetworkAction.ECDSA.KeyRefresh -> {
action
}

is DuoNetworkAction.ECDSA.Keygen -> {
DuoNetworkAction.ECDSA.Keygen(path = "custom-path-for-keygen")
}

is DuoNetworkAction.ECDSA.Reconcile -> {
action
}

is DuoNetworkAction.ECDSA.Signature -> {
action
}

is DuoNetworkAction.EdDSA.Import -> {
action
}

is DuoNetworkAction.EdDSA.KeyRefresh -> {
action
}

is DuoNetworkAction.EdDSA.Keygen -> {
action
}

is DuoNetworkAction.EdDSA.Reconcile -> {
action
}

is DuoNetworkAction.EdDSA.Signature -> {
action
}
}

super.connect(customAction, params)
}

}
Copyright © 2026 Silence Laboratories