-
Notifications
You must be signed in to change notification settings - Fork 34
Usage
Daniel Rees edited this page Jun 21, 2019
·
2 revisions
Connecting to a Socket
and joining Channel
s is pretty straight forward.
// MainActivity.kt
fun connectToChatRoom() {
// Create the Socket
val params = hashMapOf("token" to "abc123")
val socket = Socket("http://localhost:4000/socket", params)
// Listen to events on the Socket
socket.onOpen { addTextToView("Socket Opened") }
socket.onClose { addTextToView("Socket Closed" }
socket.onError { throwable, response -> Log.d(throwable, "TAG", "Socket Error ${response?.code}") }
// Join channels and listen to events
channel.on("join") { this.addTextToView("You joined the room") }
channel
.join()
.receive("ok") { addTextToView("Joined Channel") }
.receive("error") { addTextToView("Failed to join channel: ${it.payload}") }
// You can call `connect()` before or after creating and joining channels
socket.connect()
}
fun addTextToView(text: String) {
runOnUiThread { // Note the changing of threads
// A RecyclerView Adapter that manages a list of text on the device
this.messageAdapter.add(text)
}
}
The client does not perform work on the calling thread, however callbacks are not guaranteed to be delivered on the calling (or main) thread. Therefore, you will need to switch to the uiThread
in order update the view
If you have a custom OkHttpClient configuration, you can provide it when creating the Socket
val customClient = OkHttpClient.Builder()
.addInterceptor(myInterceptor)
.connectTimeout(1000, TimeUnit.MILLISECONDS)
.build()
val socket = Socket(url = "http://localhost:4000/socket/websocket",
client = customClient)
You can change some of the defaults of the Socket
val socket = Socket("http://localhost:4000/socket/websocket")
/** Timeout to use when opening a connection or joining a Channel */
socket.timeout = 5_000 // in ms
/** Interval between sending a heartbeat, in ms */
socket.heartbeatIntervalMs = 15_000
/** Interval between socket reconnect attempts, in ms */
socket.reconnectAfterMs = { tries -> if (tries > 2) 100L else listOf(10L, 50L)[tries - 1] }
/** Interval between channel rejoin attempts, in ms */
socket.rejoinAfterMs = { tries -> if (tries > 2) 5_000L else listOf(1_000L, 2_000L)[tries - 1] }
/** Disables heartbeats from being sent. Default is false. */
socket.skipHeartbeat = true
To receive logs, simply add a logger
method to the Socket
val socket = Socket("http://localhost:4000/socket/websocket")
socket.logger = { message -> Log.d(TAG, message) }