summaryrefslogtreecommitdiff
path: root/src/main/kotlin/NetworkPacketTransporterJavaNet.kt
diff options
context:
space:
mode:
authorEdoardo La Greca2025-08-01 16:53:52 +0200
committerEdoardo La Greca2025-08-01 16:53:52 +0200
commit391de1ffbd961f7ae6bc4e489975ed0a645e0089 (patch)
tree84a28da2f75a689c807aa056b7cb73118b97ce45 /src/main/kotlin/NetworkPacketTransporterJavaNet.kt
parent4050df8178def9df2107bab3d49ae97282f79e53 (diff)
fix types
Diffstat (limited to 'src/main/kotlin/NetworkPacketTransporterJavaNet.kt')
-rw-r--r--src/main/kotlin/NetworkPacketTransporterJavaNet.kt23
1 files changed, 19 insertions, 4 deletions
diff --git a/src/main/kotlin/NetworkPacketTransporterJavaNet.kt b/src/main/kotlin/NetworkPacketTransporterJavaNet.kt
index 6badc3d..6855604 100644
--- a/src/main/kotlin/NetworkPacketTransporterJavaNet.kt
+++ b/src/main/kotlin/NetworkPacketTransporterJavaNet.kt
@@ -1,6 +1,7 @@
import java.io.InputStream
import java.io.OutputStream
import java.net.Socket
+import kotlin.math.min
/*
TODO:
@@ -36,8 +37,9 @@ class NetworkPacketTransporterJavaNet : NetworkPacketTransporter {
this.socket.close()
}
- override fun transmit(payload: List<Byte>) {
- this.outStream.write(payload.toByteArray())
+ override fun transmit(payload: Array<UByte>) {
+ val bytes = ByteArray(payload.size) { i -> payload[i].toByte() }
+ this.outStream.write(bytes)
}
override fun receiveUntil(untilByte: Byte): List<Byte> {
@@ -55,7 +57,20 @@ class NetworkPacketTransporterJavaNet : NetworkPacketTransporter {
return payload
}
- override fun receiveFixed(length: ULong): List<Byte> {
- return this.inStream.readNBytes(length.toInt()).toList()
+ override fun receive(length: ULong): Array<UByte> {
+ var length = length
+ val intMax = Int.MAX_VALUE.toULong()
+ val bytes: MutableList<Byte> = MutableList(0) { 0 }
+ // readNBytes only takes Int values, so it must be called multiple times if the length is greater than Int's
+ // maximum value
+ while (length > 0u) {
+ // the min function ensures that the value passed to readNBytes never exceeds Int's maximum value while also
+ // switching to the length variable when its value eventually becomes less than Int's maximum value, which
+ // avoids writing duplicated readNBytes calls in the code
+ val lenMin = min(length, intMax)
+ bytes += this.inStream.readNBytes(lenMin.toInt()).toMutableList()
+ length -= intMax
+ }
+ return Array(bytes.size) { i -> bytes[i].toUByte() }
}
} \ No newline at end of file