From 2ade0aa6d1208ee087d2ab0bedaa48b4863a193f Mon Sep 17 00:00:00 2001 From: tursom Date: Mon, 18 May 2020 20:52:30 +0800 Subject: [PATCH] fix bug --- .../kotlin/cn/tursom/channel/AsyncChannel.kt | 2 ++ .../kotlin/cn/tursom/datagram/NioDatagram.kt | 3 ++- .../server/BufferedServerNioDatagram.kt | 2 -- .../tursom/datagram/server/ServerNioDatagram.kt | 2 +- .../main/kotlin/cn/tursom/socket/AsyncSocket.kt | 2 ++ .../kotlin/cn/tursom/datagram/server/test.kt | 17 ++++++++++------- 6 files changed, 17 insertions(+), 11 deletions(-) diff --git a/AsyncSocket/src/main/kotlin/cn/tursom/channel/AsyncChannel.kt b/AsyncSocket/src/main/kotlin/cn/tursom/channel/AsyncChannel.kt index e0e7665..58aa167 100644 --- a/AsyncSocket/src/main/kotlin/cn/tursom/channel/AsyncChannel.kt +++ b/AsyncSocket/src/main/kotlin/cn/tursom/channel/AsyncChannel.kt @@ -9,6 +9,7 @@ import cn.tursom.core.timer.Timer import cn.tursom.core.timer.WheelTimer import cn.tursom.niothread.NioThread import java.io.Closeable +import java.net.SocketAddress import java.net.SocketException import java.nio.channels.* import java.nio.charset.Charset @@ -21,6 +22,7 @@ interface AsyncChannel : Closeable { val key: SelectionKey val nioThread: NioThread val channel: SelectableChannel get() = key.channel() + val remoteAddress: SocketAddress fun getBuffed(pool: MemoryPool): BufferedAsyncChannel = BufferedAsyncChannelImpl(pool, this) private inline fun operate(action: () -> T): T { diff --git a/AsyncSocket/src/main/kotlin/cn/tursom/datagram/NioDatagram.kt b/AsyncSocket/src/main/kotlin/cn/tursom/datagram/NioDatagram.kt index 1810c2b..d245720 100644 --- a/AsyncSocket/src/main/kotlin/cn/tursom/datagram/NioDatagram.kt +++ b/AsyncSocket/src/main/kotlin/cn/tursom/datagram/NioDatagram.kt @@ -1,6 +1,7 @@ package cn.tursom.datagram import cn.tursom.niothread.NioThread +import java.net.SocketAddress import java.nio.channels.DatagramChannel import java.nio.channels.SelectionKey @@ -10,7 +11,7 @@ open class NioDatagram( override val nioThread: NioThread ) : AsyncDatagram { override val open: Boolean get() = channel.isOpen && key.isValid - + override val remoteAddress: SocketAddress get() = channel.remoteAddress override fun writeMode() {} override suspend fun write(timeout: Long, action: () -> T): T { diff --git a/AsyncSocket/src/main/kotlin/cn/tursom/datagram/server/BufferedServerNioDatagram.kt b/AsyncSocket/src/main/kotlin/cn/tursom/datagram/server/BufferedServerNioDatagram.kt index 5d91ca7..6922dd5 100644 --- a/AsyncSocket/src/main/kotlin/cn/tursom/datagram/server/BufferedServerNioDatagram.kt +++ b/AsyncSocket/src/main/kotlin/cn/tursom/datagram/server/BufferedServerNioDatagram.kt @@ -3,12 +3,10 @@ package cn.tursom.datagram.server import cn.tursom.core.pool.MemoryPool import cn.tursom.datagram.AsyncDatagram import cn.tursom.datagram.BufferedAsyncDatagram -import java.net.SocketAddress class BufferedServerNioDatagram(override val pool: MemoryPool, override val prevChannel: ServerNioDatagram) : BufferedAsyncDatagram, AsyncDatagram by prevChannel { - val remoteAddress: SocketAddress get() = prevChannel.remoteAddress override fun toString(): String { return "BufferedServerNioDatagram(pool=$pool, prevChannel=$prevChannel)" } diff --git a/AsyncSocket/src/main/kotlin/cn/tursom/datagram/server/ServerNioDatagram.kt b/AsyncSocket/src/main/kotlin/cn/tursom/datagram/server/ServerNioDatagram.kt index 1d51cb9..af153ce 100644 --- a/AsyncSocket/src/main/kotlin/cn/tursom/datagram/server/ServerNioDatagram.kt +++ b/AsyncSocket/src/main/kotlin/cn/tursom/datagram/server/ServerNioDatagram.kt @@ -17,7 +17,7 @@ import kotlin.coroutines.resumeWithException import kotlin.coroutines.suspendCoroutine class ServerNioDatagram( - val remoteAddress: SocketAddress, + override val remoteAddress: SocketAddress, val server: AsyncDatagramServer, channel: DatagramChannel, key: SelectionKey, diff --git a/AsyncSocket/src/main/kotlin/cn/tursom/socket/AsyncSocket.kt b/AsyncSocket/src/main/kotlin/cn/tursom/socket/AsyncSocket.kt index 4eb7448..84c3437 100644 --- a/AsyncSocket/src/main/kotlin/cn/tursom/socket/AsyncSocket.kt +++ b/AsyncSocket/src/main/kotlin/cn/tursom/socket/AsyncSocket.kt @@ -6,6 +6,7 @@ import cn.tursom.core.buffer.ByteBuffer import cn.tursom.core.buffer.read import cn.tursom.core.buffer.write import cn.tursom.core.pool.MemoryPool +import java.net.SocketAddress import java.net.SocketException import java.nio.channels.FileChannel import java.nio.channels.SocketChannel @@ -13,6 +14,7 @@ import java.nio.channels.SocketChannel @Suppress("unused") interface AsyncSocket : AsyncChannel { override val channel: SocketChannel + override val remoteAddress: SocketAddress get() = channel.remoteAddress override fun getBuffed(pool: MemoryPool): BufferedAsyncChannel = BufferedNioSocket(this, pool) override suspend fun write(buffer: Array, timeout: Long): Long = diff --git a/AsyncSocket/src/test/kotlin/cn/tursom/datagram/server/test.kt b/AsyncSocket/src/test/kotlin/cn/tursom/datagram/server/test.kt index a502e09..3bf3dd7 100644 --- a/AsyncSocket/src/test/kotlin/cn/tursom/datagram/server/test.kt +++ b/AsyncSocket/src/test/kotlin/cn/tursom/datagram/server/test.kt @@ -1,20 +1,23 @@ package cn.tursom.datagram.server +import cn.tursom.channel.BufferedAsyncChannel import cn.tursom.core.log import cn.tursom.core.pool.DirectMemoryPool import cn.tursom.datagram.AsyncDatagramClient import kotlinx.coroutines.runBlocking +val echoHandler: suspend BufferedAsyncChannel.() -> Unit = { + while (true) { + val buffer = read() + log("$this recv from client $remoteAddress: ${buffer.toString(buffer.readable)}") + write(buffer) + } +} + fun main() { val port = 12345 val pool = DirectMemoryPool(1024, 16) - val server = BufferedAsyncDatagramServer(port, pool) { - while (true) { - val buffer = read() - log("$this recv from client $remoteAddress: ${buffer.toString(buffer.readable)}") - write(buffer) - } - } + val server = BufferedAsyncDatagramServer(port, pool, echoHandler) //val server = LoopDatagramServer(port, protocol = object : NioProtocol { // override fun handleRead(key: SelectionKey, nioThread: NioThread) { // val datagramChannel = key.channel() as DatagramChannel