mirror of
https://github.com/tursom/TursomServer.git
synced 2025-03-13 11:20:10 +08:00
fix bug
This commit is contained in:
parent
797c7d24e6
commit
2ade0aa6d1
@ -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 <T> operate(action: () -> T): T {
|
||||
|
@ -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 <T> write(timeout: Long, action: () -> T): T {
|
||||
|
@ -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)"
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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<out ByteBuffer>, timeout: Long): Long =
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user