From 640afa97f893b495f9d22c7772fadf4d00b7e239 Mon Sep 17 00:00:00 2001
From: Yentis <yentl178@gmail.com>
Date: Tue, 25 Feb 2025 08:50:21 +0100
Subject: [PATCH] read and write all bytes at once instead of one at a time

---
 .../io/github/davidepianca98/socket/tcp/WebSocket.kt       | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/tcp/WebSocket.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/tcp/WebSocket.kt
index c1a4ba8..c8168c7 100644
--- a/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/tcp/WebSocket.kt
+++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/tcp/WebSocket.kt
@@ -85,9 +85,12 @@ internal class WebSocket(private val socket: Socket) : SocketInterface {
 
     private fun decodeBinary(length: ULong, key: UByteArray): UByteArray {
         val decoded = ByteArrayOutputStream()
-        for (i in 0 until length.toInt()) {
-            decoded.write(currentReceivedData.read() xor key[i and 0x3])
+
+        val bytes = currentReceivedData.readBytes(length.toInt()).mapIndexed { index, uByte ->
+            uByte xor key[index and 0x3]
         }
+        decoded.write(bytes.toUByteArray())
+
         currentReceivedData.shift()
         return decoded.toByteArray()
     }
-- 
GitLab