JettyWebSocketAdapter.kt

  1. package com.hexagontk.http.client.jetty.ws

  2. import com.hexagontk.http.model.ws.WsSession
  3. import org.eclipse.jetty.websocket.api.Callback
  4. import org.eclipse.jetty.websocket.api.Session
  5. import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose
  6. import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage
  7. import org.eclipse.jetty.websocket.api.annotations.OnWebSocketOpen
  8. import org.eclipse.jetty.websocket.api.annotations.WebSocket
  9. import java.net.URI
  10. import java.nio.ByteBuffer

  11. @WebSocket
  12. @Suppress("UNUSED_PARAMETER", "UNUSED") // Signatures must match the annotation expected parameters
  13. class JettyWebSocketAdapter(
  14.     private val uri: URI,
  15.     private val onConnect: WsSession.() -> Unit,
  16.     private val onBinary: WsSession.(data: ByteArray) -> Unit,
  17.     private val onText: WsSession.(text: String) -> Unit,
  18.     private val onPing: WsSession.(data: ByteArray) -> Unit,
  19.     private val onPong: WsSession.(data: ByteArray) -> Unit,
  20.     private val onClose: WsSession.(status: Int, reason: String) -> Unit,
  21. ) {
  22.     private lateinit var session: Session
  23.     private val wsSession by lazy { JettyClientWsSession(uri, session) }

  24.     @OnWebSocketMessage
  25.     fun onWebSocketText(session: Session, message: String) {
  26.         wsSession.onText(message)
  27.     }

  28.     // TODO Handle 'onPing' and 'onPong' (messages probably arriving here)
  29.     @OnWebSocketMessage
  30.     fun onWebSocketBinary(session: Session, payload: ByteBuffer, callback: Callback) {
  31.         wsSession.onBinary(payload.array())
  32.     }

  33.     @OnWebSocketClose
  34.     fun onWebSocketClose(session: Session, statusCode: Int, reason: String) {
  35.         wsSession.onClose(statusCode, reason)
  36.     }

  37.     @OnWebSocketOpen
  38.     fun onWebSocketConnect(connectSession: Session) {
  39.         session = connectSession
  40.         wsSession.onConnect()
  41.     }
  42. }