diff --git a/AsyncSocket/src/main/kotlin/cn/tursom/socket/enhance/SocketWriter.kt b/AsyncSocket/src/main/kotlin/cn/tursom/socket/enhance/SocketWriter.kt index 118fb8a..5eb1373 100644 --- a/AsyncSocket/src/main/kotlin/cn/tursom/socket/enhance/SocketWriter.kt +++ b/AsyncSocket/src/main/kotlin/cn/tursom/socket/enhance/SocketWriter.kt @@ -15,8 +15,8 @@ interface SocketWriter : Closeable { value.forEach { write(it) } } - suspend fun writeAndFlush(value: T, timeout: Long) { + suspend fun writeAndFlush(value: T, timeout: Long = 0): Long { write(value) - flush(timeout) + return flush(timeout) } } \ No newline at end of file diff --git a/AsyncSocket/src/main/kotlin/cn/tursom/socket/enhance/impl/ByteArrayWriter.kt b/AsyncSocket/src/main/kotlin/cn/tursom/socket/enhance/impl/ByteArrayWriter.kt index b1a0f58..52b077c 100644 --- a/AsyncSocket/src/main/kotlin/cn/tursom/socket/enhance/impl/ByteArrayWriter.kt +++ b/AsyncSocket/src/main/kotlin/cn/tursom/socket/enhance/impl/ByteArrayWriter.kt @@ -12,6 +12,6 @@ class ByteArrayWriter( } override suspend fun flush(timeout: Long): Long = prevWriter.flush(timeout) - + override suspend fun writeAndFlush(value: ByteArray, timeout: Long): Long = prevWriter.writeAndFlush(HeapByteBuffer(value), timeout) override fun close() = prevWriter.close() } \ No newline at end of file diff --git a/AsyncSocket/src/main/kotlin/cn/tursom/socket/enhance/impl/SocketWriterImpl.kt b/AsyncSocket/src/main/kotlin/cn/tursom/socket/enhance/impl/SocketWriterImpl.kt index 551eaf6..f33c661 100644 --- a/AsyncSocket/src/main/kotlin/cn/tursom/socket/enhance/impl/SocketWriterImpl.kt +++ b/AsyncSocket/src/main/kotlin/cn/tursom/socket/enhance/impl/SocketWriterImpl.kt @@ -22,6 +22,14 @@ class SocketWriterImpl( return read } + override suspend fun writeAndFlush(value: ByteBuffer, timeout: Long): Long { + return if (bufList.isEmpty()) { + socket.write(value, timeout).toLong() + } else { + super.writeAndFlush(value, timeout) + } + } + override fun close() { socket.close() } diff --git a/AsyncSocket/src/main/kotlin/cn/tursom/socket/enhance/impl/StringObjectWriter.kt b/AsyncSocket/src/main/kotlin/cn/tursom/socket/enhance/impl/StringObjectWriter.kt index 21bd3e1..dd6093d 100644 --- a/AsyncSocket/src/main/kotlin/cn/tursom/socket/enhance/impl/StringObjectWriter.kt +++ b/AsyncSocket/src/main/kotlin/cn/tursom/socket/enhance/impl/StringObjectWriter.kt @@ -8,5 +8,6 @@ class StringObjectWriter( ) : SocketWriter { override suspend fun write(value: Any) = prevWriter.write(toString(value)) override suspend fun flush(timeout: Long) = prevWriter.flush(timeout) + override suspend fun writeAndFlush(value: Any, timeout: Long): Long = prevWriter.writeAndFlush(toString(value), timeout) override fun close() = prevWriter.close() } \ No newline at end of file diff --git a/AsyncSocket/src/main/kotlin/cn/tursom/socket/enhance/impl/StringWriter.kt b/AsyncSocket/src/main/kotlin/cn/tursom/socket/enhance/impl/StringWriter.kt index 37fea31..1597a52 100644 --- a/AsyncSocket/src/main/kotlin/cn/tursom/socket/enhance/impl/StringWriter.kt +++ b/AsyncSocket/src/main/kotlin/cn/tursom/socket/enhance/impl/StringWriter.kt @@ -21,4 +21,10 @@ class StringWriter( override fun close() { prevWriter.close() } + + override suspend fun writeAndFlush(value: String, timeout: Long): Long = if (stringList.isEmpty()) { + prevWriter.writeAndFlush(HeapByteBuffer(value.toByteArray()), timeout) + } else { + super.writeAndFlush(value, timeout) + } } \ No newline at end of file