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)
}
}