mirror of
https://github.com/tursom/TursomServer.git
synced 2025-02-01 07:11:18 +08:00
update WebSocketClient
This commit is contained in:
parent
f97cc59191
commit
befef46add
@ -494,7 +494,8 @@ fun getCallerClass(thisClassName: List<String>): Class<*>? {
|
||||
var callStackDepth = 1
|
||||
do {
|
||||
clazz = getCallerClass(callStackDepth++)
|
||||
if (clazz?.name !in thisClassName) {
|
||||
val clazzName = clazz?.name
|
||||
if (clazzName != "cn.tursom.core.ToolsKt" && clazzName !in thisClassName) {
|
||||
break
|
||||
}
|
||||
} while (clazz != null)
|
||||
|
@ -26,7 +26,10 @@ open class Slf4jImpl constructor(
|
||||
|
||||
@Suppress("MemberVisibilityCanBePrivate", "NOTHING_TO_INLINE")
|
||||
companion object {
|
||||
private val thisClassName = listOf(this::class.java.name.dropLast(10), this::class.java.name)
|
||||
private val thisClassName = listOf(
|
||||
this::class.java.name.dropLast(10),
|
||||
this::class.java.name,
|
||||
)
|
||||
private val loggerName: String
|
||||
get() = getCallerClassName(thisClassName)?.substringBefore('$')
|
||||
?: throw UnsupportedOperationException()
|
||||
|
@ -8,210 +8,210 @@ import io.netty.handler.codec.http.websocketx.PongWebSocketFrame
|
||||
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame
|
||||
|
||||
@Suppress("unused")
|
||||
open class AbstractWebSocketHandler : WebSocketHandler {
|
||||
private var onOpen: ((client: WebSocketClient) -> Unit)? = null
|
||||
open class AbstractWebSocketHandler<T : WebSocketClient<T, H>, H : WebSocketHandler<T, H>> : WebSocketHandler<T, H> {
|
||||
private var onOpen: ((client: T) -> Unit)? = null
|
||||
|
||||
fun onOpen(onOpen: ((client: WebSocketClient) -> Unit)) {
|
||||
fun onOpen(onOpen: ((client: T) -> Unit)) {
|
||||
this.onOpen = onOpen
|
||||
}
|
||||
|
||||
override fun onOpen(client: WebSocketClient) {
|
||||
override fun onOpen(client: T) {
|
||||
onOpen?.also { it(client) } ?: super.onOpen(client)
|
||||
}
|
||||
|
||||
private var onClose: ((client: WebSocketClient) -> Unit)? = null
|
||||
private var onClose: ((client: T) -> Unit)? = null
|
||||
|
||||
fun onClose(onClose: ((client: WebSocketClient) -> Unit)) {
|
||||
fun onClose(onClose: ((client: T) -> Unit)) {
|
||||
this.onClose = onClose
|
||||
}
|
||||
|
||||
override fun onClose(client: WebSocketClient) {
|
||||
override fun onClose(client: T) {
|
||||
onClose?.also { it(client) } ?: super.onClose(client)
|
||||
}
|
||||
|
||||
private var onError: ((client: WebSocketClient, e: Throwable) -> Unit)? = null
|
||||
private var onError: ((client: T, e: Throwable) -> Unit)? = null
|
||||
|
||||
fun onError(onError: ((client: WebSocketClient, e: Throwable) -> Unit)) {
|
||||
fun onError(onError: ((client: T, e: Throwable) -> Unit)) {
|
||||
this.onError = onError
|
||||
}
|
||||
|
||||
override fun onError(client: WebSocketClient, e: Throwable) {
|
||||
override fun onError(client: T, e: Throwable) {
|
||||
onError?.also { it(client, e) } ?: super.onError(client, e)
|
||||
}
|
||||
|
||||
private var readMessage1: ((client: WebSocketClient, msg: String) -> Unit)? = null
|
||||
private var readMessage1: ((client: T, msg: String) -> Unit)? = null
|
||||
|
||||
@JvmName("readMessage1")
|
||||
fun readMessage(readMessage: (client: WebSocketClient, msg: String) -> Unit) {
|
||||
fun readMessage(readMessage: (client: T, msg: String) -> Unit) {
|
||||
readMessage1 = readMessage
|
||||
}
|
||||
|
||||
override fun readMessage(client: WebSocketClient, msg: String) {
|
||||
override fun readMessage(client: T, msg: String) {
|
||||
readMessage1?.also { it(client, msg) } ?: super.readMessage(client, msg)
|
||||
}
|
||||
|
||||
private var readMessage2: ((client: WebSocketClient, msg: TextWebSocketFrame) -> Unit)? = null
|
||||
private var readMessage2: ((client: T, msg: TextWebSocketFrame) -> Unit)? = null
|
||||
|
||||
@JvmName("readMessage2")
|
||||
fun readMessage(readMessage: (client: WebSocketClient, msg: TextWebSocketFrame) -> Unit) {
|
||||
fun readMessage(readMessage: (client: T, msg: TextWebSocketFrame) -> Unit) {
|
||||
readMessage2 = readMessage
|
||||
}
|
||||
|
||||
override fun readMessage(client: WebSocketClient, msg: TextWebSocketFrame) {
|
||||
override fun readMessage(client: T, msg: TextWebSocketFrame) {
|
||||
readMessage2?.also { it(client, msg) } ?: super.readMessage(client, msg)
|
||||
}
|
||||
|
||||
private var readMessage3: ((client: WebSocketClient, msg: ByteArray) -> Unit)? = null
|
||||
private var readMessage3: ((client: T, msg: ByteArray) -> Unit)? = null
|
||||
|
||||
@JvmName("readMessage3")
|
||||
fun readMessage(readMessage: (client: WebSocketClient, msg: ByteArray) -> Unit) {
|
||||
fun readMessage(readMessage: (client: T, msg: ByteArray) -> Unit) {
|
||||
readMessage3 = readMessage
|
||||
}
|
||||
|
||||
override fun readMessage(client: WebSocketClient, msg: ByteArray) {
|
||||
override fun readMessage(client: T, msg: ByteArray) {
|
||||
readMessage3?.also { it(client, msg) } ?: super.readMessage(client, msg)
|
||||
}
|
||||
|
||||
private var readMessage4: ((client: WebSocketClient, msg: ByteBuf) -> Unit)? = null
|
||||
private var readMessage4: ((client: T, msg: ByteBuf) -> Unit)? = null
|
||||
|
||||
@JvmName("readMessage4")
|
||||
fun readMessage(readMessage: (client: WebSocketClient, msg: ByteBuf) -> Unit) {
|
||||
fun readMessage(readMessage: (client: T, msg: ByteBuf) -> Unit) {
|
||||
readMessage4 = readMessage
|
||||
}
|
||||
|
||||
override fun readMessage(client: WebSocketClient, msg: ByteBuf) {
|
||||
override fun readMessage(client: T, msg: ByteBuf) {
|
||||
readMessage4?.also { it(client, msg) } ?: super.readMessage(client, msg)
|
||||
}
|
||||
|
||||
private var readMessage5: ((client: WebSocketClient, msg: ByteBuffer) -> Unit)? = null
|
||||
private var readMessage5: ((client: T, msg: ByteBuffer) -> Unit)? = null
|
||||
|
||||
@JvmName("readMessage5")
|
||||
fun readMessage(readMessage: (client: WebSocketClient, msg: ByteBuffer) -> Unit) {
|
||||
fun readMessage(readMessage: (client: T, msg: ByteBuffer) -> Unit) {
|
||||
readMessage5 = readMessage
|
||||
}
|
||||
|
||||
override fun readMessage(client: WebSocketClient, msg: ByteBuffer) {
|
||||
override fun readMessage(client: T, msg: ByteBuffer) {
|
||||
readMessage5?.also { it(client, msg) } ?: super.readMessage(client, msg)
|
||||
}
|
||||
|
||||
private var readMessage6: ((client: WebSocketClient, msg: BinaryWebSocketFrame) -> Unit)? = null
|
||||
private var readMessage6: ((client: T, msg: BinaryWebSocketFrame) -> Unit)? = null
|
||||
|
||||
@JvmName("readMessage6")
|
||||
fun readMessage(readMessage: (client: WebSocketClient, msg: BinaryWebSocketFrame) -> Unit) {
|
||||
fun readMessage(readMessage: (client: T, msg: BinaryWebSocketFrame) -> Unit) {
|
||||
readMessage6 = readMessage
|
||||
}
|
||||
|
||||
override fun readMessage(client: WebSocketClient, msg: BinaryWebSocketFrame) {
|
||||
override fun readMessage(client: T, msg: BinaryWebSocketFrame) {
|
||||
readMessage6?.also { it(client, msg) } ?: super.readMessage(client, msg)
|
||||
}
|
||||
|
||||
private var readPing1: ((client: WebSocketClient, msg: PingWebSocketFrame) -> Unit)? = null
|
||||
private var readPing1: ((client: T, msg: PingWebSocketFrame) -> Unit)? = null
|
||||
|
||||
@JvmName("readPing1")
|
||||
fun readPing(readMessage: (client: WebSocketClient, msg: PingWebSocketFrame) -> Unit) {
|
||||
fun readPing(readMessage: (client: T, msg: PingWebSocketFrame) -> Unit) {
|
||||
readPing1 = readMessage
|
||||
}
|
||||
|
||||
override fun readPing(client: WebSocketClient, msg: PingWebSocketFrame) {
|
||||
override fun readPing(client: T, msg: PingWebSocketFrame) {
|
||||
readPing1?.also { it(client, msg) } ?: super.readPing(client, msg)
|
||||
}
|
||||
|
||||
private var readPing2: ((client: WebSocketClient, msg: ByteBuf) -> Unit)? = null
|
||||
private var readPing2: ((client: T, msg: ByteBuf) -> Unit)? = null
|
||||
|
||||
@JvmName("readPing2")
|
||||
fun readPing(readMessage: (client: WebSocketClient, msg: ByteBuf) -> Unit) {
|
||||
fun readPing(readMessage: (client: T, msg: ByteBuf) -> Unit) {
|
||||
readPing2 = readMessage
|
||||
}
|
||||
|
||||
override fun readPing(client: WebSocketClient, msg: ByteBuf) {
|
||||
override fun readPing(client: T, msg: ByteBuf) {
|
||||
readPing2?.also { it(client, msg) } ?: super.readPing(client, msg)
|
||||
}
|
||||
|
||||
private var readPing3: ((client: WebSocketClient, msg: ByteBuffer) -> Unit)? = null
|
||||
private var readPing3: ((client: T, msg: ByteBuffer) -> Unit)? = null
|
||||
|
||||
@JvmName("readPing3")
|
||||
fun readPing(readMessage: (client: WebSocketClient, msg: ByteBuffer) -> Unit) {
|
||||
fun readPing(readMessage: (client: T, msg: ByteBuffer) -> Unit) {
|
||||
readPing3 = readMessage
|
||||
}
|
||||
|
||||
override fun readPing(client: WebSocketClient, msg: ByteBuffer) {
|
||||
override fun readPing(client: T, msg: ByteBuffer) {
|
||||
readPing3?.also { it(client, msg) } ?: super.readPing(client, msg)
|
||||
}
|
||||
|
||||
private var readPing4: ((client: WebSocketClient, msg: ByteArray) -> Unit)? = null
|
||||
private var readPing4: ((client: T, msg: ByteArray) -> Unit)? = null
|
||||
|
||||
@JvmName("readPing4")
|
||||
fun readPing(readMessage: (client: WebSocketClient, msg: ByteArray) -> Unit) {
|
||||
fun readPing(readMessage: (client: T, msg: ByteArray) -> Unit) {
|
||||
readPing4 = readMessage
|
||||
}
|
||||
|
||||
override fun readPing(client: WebSocketClient, msg: ByteArray) {
|
||||
override fun readPing(client: T, msg: ByteArray) {
|
||||
readPing4?.also { it(client, msg) } ?: super.readPing(client, msg)
|
||||
}
|
||||
|
||||
private var readPing5: ((client: WebSocketClient, msg: String) -> Unit)? = null
|
||||
private var readPing5: ((client: T, msg: String) -> Unit)? = null
|
||||
|
||||
@JvmName("readPing5")
|
||||
fun readPing(readMessage: (client: WebSocketClient, msg: String) -> Unit) {
|
||||
fun readPing(readMessage: (client: T, msg: String) -> Unit) {
|
||||
readPing5 = readMessage
|
||||
}
|
||||
|
||||
override fun readPing(client: WebSocketClient, msg: String) {
|
||||
override fun readPing(client: T, msg: String) {
|
||||
readPing5?.also { it(client, msg) } ?: super.readPing(client, msg)
|
||||
}
|
||||
|
||||
private var readPong1: ((client: WebSocketClient, msg: PongWebSocketFrame) -> Unit)? = null
|
||||
private var readPong1: ((client: T, msg: PongWebSocketFrame) -> Unit)? = null
|
||||
|
||||
@JvmName("readPong1")
|
||||
fun readPong(readMessage: (client: WebSocketClient, msg: PongWebSocketFrame) -> Unit) {
|
||||
fun readPong(readMessage: (client: T, msg: PongWebSocketFrame) -> Unit) {
|
||||
readPong1 = readMessage
|
||||
}
|
||||
|
||||
override fun readPong(client: WebSocketClient, msg: PongWebSocketFrame) {
|
||||
override fun readPong(client: T, msg: PongWebSocketFrame) {
|
||||
readPong1?.also { it(client, msg) } ?: super.readPong(client, msg)
|
||||
}
|
||||
|
||||
private var readPong2: ((client: WebSocketClient, msg: ByteBuf) -> Unit)? = null
|
||||
private var readPong2: ((client: T, msg: ByteBuf) -> Unit)? = null
|
||||
|
||||
@JvmName("readPong2")
|
||||
fun readPong(readMessage: (client: WebSocketClient, msg: ByteBuf) -> Unit) {
|
||||
fun readPong(readMessage: (client: T, msg: ByteBuf) -> Unit) {
|
||||
readPong2 = readMessage
|
||||
}
|
||||
|
||||
override fun readPong(client: WebSocketClient, msg: ByteBuf) {
|
||||
override fun readPong(client: T, msg: ByteBuf) {
|
||||
readPong2?.also { it(client, msg) } ?: super.readPong(client, msg)
|
||||
}
|
||||
|
||||
private var readPong3: ((client: WebSocketClient, msg: ByteBuffer) -> Unit)? = null
|
||||
private var readPong3: ((client: T, msg: ByteBuffer) -> Unit)? = null
|
||||
|
||||
@JvmName("readPong3")
|
||||
fun readPong(readMessage: (client: WebSocketClient, msg: ByteBuffer) -> Unit) {
|
||||
fun readPong(readMessage: (client: T, msg: ByteBuffer) -> Unit) {
|
||||
readPong3 = readMessage
|
||||
}
|
||||
|
||||
override fun readPong(client: WebSocketClient, msg: ByteBuffer) {
|
||||
override fun readPong(client: T, msg: ByteBuffer) {
|
||||
readPong3?.also { it(client, msg) } ?: super.readPong(client, msg)
|
||||
}
|
||||
|
||||
private var readPong4: ((client: WebSocketClient, msg: ByteArray) -> Unit)? = null
|
||||
private var readPong4: ((client: T, msg: ByteArray) -> Unit)? = null
|
||||
|
||||
@JvmName("readPong4")
|
||||
fun readPong(readMessage: (client: WebSocketClient, msg: ByteArray) -> Unit) {
|
||||
fun readPong(readMessage: (client: T, msg: ByteArray) -> Unit) {
|
||||
readPong4 = readMessage
|
||||
}
|
||||
|
||||
override fun readPong(client: WebSocketClient, msg: ByteArray) {
|
||||
override fun readPong(client: T, msg: ByteArray) {
|
||||
readPong4?.also { it(client, msg) } ?: super.readPong(client, msg)
|
||||
}
|
||||
|
||||
private var readPong5: ((client: WebSocketClient, msg: String) -> Unit)? = null
|
||||
private var readPong5: ((client: T, msg: String) -> Unit)? = null
|
||||
|
||||
@JvmName("readPong5")
|
||||
fun readPong(readMessage: (client: WebSocketClient, msg: String) -> Unit) {
|
||||
fun readPong(readMessage: (client: T, msg: String) -> Unit) {
|
||||
readPong5 = readMessage
|
||||
}
|
||||
|
||||
override fun readPong(client: WebSocketClient, msg: String) {
|
||||
override fun readPong(client: T, msg: String) {
|
||||
readPong5?.also { it(client, msg) } ?: super.readPong(client, msg)
|
||||
}
|
||||
}
|
@ -3,23 +3,23 @@ package cn.tursom.core.ws
|
||||
import cn.tursom.core.buffer.ByteBuffer
|
||||
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame
|
||||
|
||||
interface AutoCloseWebSocketHandler : WebSocketHandler {
|
||||
override fun readMessage(client: WebSocketClient, msg: TextWebSocketFrame) {
|
||||
interface AutoCloseWebSocketHandler<in T : WebSocketClient<T, H>, H : WebSocketHandler<T, H>> : WebSocketHandler<T, H> {
|
||||
override fun readMessage(client: T, msg: TextWebSocketFrame) {
|
||||
super.readMessage(client, msg)
|
||||
msg.release()
|
||||
}
|
||||
|
||||
override fun readMessage(client: WebSocketClient, msg: ByteBuffer) {
|
||||
override fun readMessage(client: T, msg: ByteBuffer) {
|
||||
super.readMessage(client, msg)
|
||||
msg.close()
|
||||
}
|
||||
|
||||
override fun readPing(client: WebSocketClient, msg: ByteBuffer) {
|
||||
override fun readPing(client: T, msg: ByteBuffer) {
|
||||
super.readPing(client, msg)
|
||||
msg.close()
|
||||
}
|
||||
|
||||
override fun readPong(client: WebSocketClient, msg: ByteBuffer) {
|
||||
override fun readPong(client: T, msg: ByteBuffer) {
|
||||
super.readPong(client, msg)
|
||||
msg.close()
|
||||
}
|
||||
|
@ -0,0 +1,32 @@
|
||||
package cn.tursom.core.ws
|
||||
|
||||
import io.netty.channel.socket.SocketChannel
|
||||
import java.net.URI
|
||||
|
||||
/**
|
||||
* usually use SimpWebSocketHandler
|
||||
* @see SimpWebSocketHandler
|
||||
*/
|
||||
class SimpWebSocketClient<H : WebSocketHandler<SimpWebSocketClient<H>, H>>(
|
||||
url: String,
|
||||
handler: H,
|
||||
autoWrap: Boolean = true,
|
||||
log: Boolean = false,
|
||||
compressed: Boolean = true,
|
||||
maxContextLength: Int = 4096,
|
||||
headers: Map<String, String>? = null,
|
||||
handshakerUri: URI? = null,
|
||||
autoRelease: Boolean = true,
|
||||
initChannel: ((ch: SocketChannel) -> Unit)? = null,
|
||||
) : WebSocketClient<SimpWebSocketClient<H>, H>(
|
||||
url,
|
||||
handler,
|
||||
autoWrap,
|
||||
log,
|
||||
compressed,
|
||||
maxContextLength,
|
||||
headers,
|
||||
handshakerUri,
|
||||
autoRelease,
|
||||
initChannel
|
||||
)
|
@ -0,0 +1,11 @@
|
||||
package cn.tursom.core.ws
|
||||
|
||||
/**
|
||||
* using like
|
||||
* val handler = object : AbstractWebSocketHandler<SimpWebSocketClient<SimpWebSocketHandler>, SimpWebSocketHandler>(),
|
||||
* SimpWebSocketHandler {
|
||||
* }
|
||||
* SimpWebSocketClient("", handler)
|
||||
* to impl AbstractWebSocketHandler's function
|
||||
*/
|
||||
interface SimpWebSocketHandler : WebSocketHandler<SimpWebSocketClient<SimpWebSocketHandler>, SimpWebSocketHandler>
|
@ -3,6 +3,7 @@ package cn.tursom.core.ws
|
||||
import cn.tursom.core.ShutdownHook
|
||||
import cn.tursom.core.buffer.ByteBuffer
|
||||
import cn.tursom.core.buffer.impl.NettyByteBuffer
|
||||
import cn.tursom.core.uncheckedCast
|
||||
import io.netty.bootstrap.Bootstrap
|
||||
import io.netty.buffer.ByteBuf
|
||||
import io.netty.buffer.Unpooled
|
||||
@ -22,9 +23,9 @@ import java.net.URI
|
||||
|
||||
|
||||
@Suppress("unused")
|
||||
open class WebSocketClient(
|
||||
open class WebSocketClient<in T : WebSocketClient<T, H>, H : WebSocketHandler<T, H>>(
|
||||
url: String,
|
||||
open val handler: WebSocketHandler,
|
||||
open val handler: H,
|
||||
val autoWrap: Boolean = true,
|
||||
val log: Boolean = false,
|
||||
val compressed: Boolean = true,
|
||||
@ -32,7 +33,7 @@ open class WebSocketClient(
|
||||
private val headers: Map<String, String>? = null,
|
||||
private val handshakerUri: URI? = null,
|
||||
val autoRelease: Boolean = true,
|
||||
var initChannel: ((ch: SocketChannel) -> Unit)? = null
|
||||
var initChannel: ((ch: SocketChannel) -> Unit)? = null,
|
||||
) {
|
||||
private val uri: URI = URI.create(url)
|
||||
var ch: Channel? = null
|
||||
@ -44,12 +45,11 @@ open class WebSocketClient(
|
||||
}
|
||||
}
|
||||
|
||||
fun open() {
|
||||
fun open(): ChannelFuture? {
|
||||
close()
|
||||
val scheme = if (uri.scheme == null) "ws" else uri.scheme
|
||||
val host = if (uri.host == null) "127.0.0.1" else uri.host
|
||||
val port: Int
|
||||
port = if (uri.port == -1) {
|
||||
val port = if (uri.port == -1) {
|
||||
when {
|
||||
"ws".equals(scheme, ignoreCase = true) -> 80
|
||||
"wss".equals(scheme, ignoreCase = true) -> 443
|
||||
@ -61,7 +61,7 @@ open class WebSocketClient(
|
||||
|
||||
if (!"ws".equals(scheme, ignoreCase = true) && !"wss".equals(scheme, ignoreCase = true)) {
|
||||
System.err.println("Only WS(S) is supported.")
|
||||
return
|
||||
return null
|
||||
}
|
||||
|
||||
val ssl = "wss".equals(scheme, ignoreCase = true)
|
||||
@ -78,9 +78,9 @@ open class WebSocketClient(
|
||||
val handshakerAdapter = WebSocketClientHandshakerAdapter(
|
||||
WebSocketClientHandshakerFactory.newHandshaker(
|
||||
handshakerUri ?: uri, WebSocketVersion.V13, null, true, httpHeaders
|
||||
), this, handler
|
||||
), uncheckedCast(), handler
|
||||
)
|
||||
val handler = WebSocketClientChannelHandler(this, handler, autoRelease)
|
||||
val handler = WebSocketClientChannelHandler(uncheckedCast(), handler, autoRelease)
|
||||
val bootstrap = Bootstrap()
|
||||
bootstrap.group(group)
|
||||
.channel(NioSocketChannel::class.java)
|
||||
@ -107,8 +107,7 @@ open class WebSocketClient(
|
||||
initChannel?.invoke(ch)
|
||||
}
|
||||
})
|
||||
bootstrap.connect(uri.host, port)
|
||||
//handler.handshakeFuture().sync()
|
||||
return bootstrap.connect(uri.host, port)
|
||||
}
|
||||
|
||||
fun close(reasonText: String? = null): ChannelFuture? {
|
||||
|
@ -5,9 +5,9 @@ import io.netty.channel.SimpleChannelInboundHandler
|
||||
import io.netty.handler.codec.http.websocketx.*
|
||||
|
||||
|
||||
class WebSocketClientChannelHandler(
|
||||
val client: WebSocketClient,
|
||||
val handler: WebSocketHandler,
|
||||
class WebSocketClientChannelHandler<T : WebSocketClient<T, H>, H : WebSocketHandler<T, H>>(
|
||||
val client: T,
|
||||
val handler: WebSocketHandler<T, H>,
|
||||
private val autoRelease: Boolean = true,
|
||||
) : SimpleChannelInboundHandler<WebSocketFrame>(autoRelease) {
|
||||
|
||||
|
@ -7,10 +7,10 @@ import io.netty.handler.codec.http.FullHttpResponse
|
||||
import io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker
|
||||
import io.netty.util.CharsetUtil
|
||||
|
||||
class WebSocketClientHandshakerAdapter(
|
||||
class WebSocketClientHandshakerAdapter<T : WebSocketClient<T, H>, H : WebSocketHandler<T, H>>(
|
||||
private val handshaker: WebSocketClientHandshaker,
|
||||
private val client: WebSocketClient,
|
||||
private val handler: WebSocketHandler,
|
||||
private val client: T,
|
||||
private val handler: WebSocketHandler<T, H>,
|
||||
) : SimpleChannelInboundHandler<FullHttpResponse>() {
|
||||
private var handshakeFuture: ChannelPromise? = null
|
||||
|
||||
|
@ -9,67 +9,67 @@ import io.netty.handler.codec.http.websocketx.PingWebSocketFrame
|
||||
import io.netty.handler.codec.http.websocketx.PongWebSocketFrame
|
||||
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame
|
||||
|
||||
interface WebSocketHandler {
|
||||
fun onOpen(client: WebSocketClient) {}
|
||||
fun onClose(client: WebSocketClient) {}
|
||||
fun onError(client: WebSocketClient, e: Throwable) {
|
||||
interface WebSocketHandler<in T : WebSocketClient<T, in H>, in H : WebSocketHandler<T, H>> {
|
||||
fun onOpen(client: T) {}
|
||||
fun onClose(client: T) {}
|
||||
fun onError(client: T, e: Throwable) {
|
||||
throw e
|
||||
}
|
||||
|
||||
fun readMessage(client: WebSocketClient, msg: String) {}
|
||||
fun readMessage(client: WebSocketClient, msg: TextWebSocketFrame) {
|
||||
fun readMessage(client: T, msg: String) {}
|
||||
fun readMessage(client: T, msg: TextWebSocketFrame) {
|
||||
readMessage(client, msg.text())
|
||||
}
|
||||
|
||||
fun readMessage(client: WebSocketClient, msg: ByteArray) {}
|
||||
fun readMessage(client: T, msg: ByteArray) {}
|
||||
|
||||
fun readMessage(client: WebSocketClient, msg: ByteBuf) {
|
||||
fun readMessage(client: T, msg: ByteBuf) {
|
||||
readMessage(client, NettyByteBuffer(msg))
|
||||
}
|
||||
|
||||
fun readMessage(client: WebSocketClient, msg: ByteBuffer) {
|
||||
fun readMessage(client: T, msg: ByteBuffer) {
|
||||
readMessage(client, msg.getBytes())
|
||||
}
|
||||
|
||||
fun readMessage(client: WebSocketClient, msg: BinaryWebSocketFrame) {
|
||||
fun readMessage(client: T, msg: BinaryWebSocketFrame) {
|
||||
readMessage(client, msg.content())
|
||||
}
|
||||
|
||||
fun readPing(client: WebSocketClient, msg: PingWebSocketFrame) {
|
||||
fun readPing(client: T, msg: PingWebSocketFrame) {
|
||||
readPing(client, msg.content())
|
||||
}
|
||||
|
||||
fun readPing(client: WebSocketClient, msg: ByteBuf) {
|
||||
fun readPing(client: T, msg: ByteBuf) {
|
||||
readPing(client, NettyByteBuffer(msg))
|
||||
}
|
||||
|
||||
fun readPing(client: WebSocketClient, msg: ByteBuffer) {
|
||||
fun readPing(client: T, msg: ByteBuffer) {
|
||||
readPing(client, msg.getBytes())
|
||||
}
|
||||
|
||||
fun readPing(client: WebSocketClient, msg: ByteArray) {
|
||||
fun readPing(client: T, msg: ByteArray) {
|
||||
readPing(client, msg.toUTF8String())
|
||||
}
|
||||
|
||||
fun readPing(client: WebSocketClient, msg: String) {
|
||||
fun readPing(client: T, msg: String) {
|
||||
}
|
||||
|
||||
fun readPong(client: WebSocketClient, msg: PongWebSocketFrame) {
|
||||
fun readPong(client: T, msg: PongWebSocketFrame) {
|
||||
readPong(client, msg.content())
|
||||
}
|
||||
|
||||
fun readPong(client: WebSocketClient, msg: ByteBuf) {
|
||||
fun readPong(client: T, msg: ByteBuf) {
|
||||
readPong(client, NettyByteBuffer(msg))
|
||||
}
|
||||
|
||||
fun readPong(client: WebSocketClient, msg: ByteBuffer) {
|
||||
fun readPong(client: T, msg: ByteBuffer) {
|
||||
readPong(client, msg.getBytes())
|
||||
}
|
||||
|
||||
fun readPong(client: WebSocketClient, msg: ByteArray) {
|
||||
fun readPong(client: T, msg: ByteArray) {
|
||||
readPong(client, msg.toUTF8String())
|
||||
}
|
||||
|
||||
fun readPong(client: WebSocketClient, msg: String) {
|
||||
fun readPong(client: T, msg: String) {
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user