package scalevalapokalypsi.Client import scala.collection.mutable.Buffer import scalevalapokalypsi.constants.* /** A class for checking asynchronously for received lines */ class ReceivedLineParser: private var serverLineState = ServerLineState.ActionDescription private var bufferedData: Buffer[Byte] = Buffer.empty // TODO: suboptimal DS /** Add received data */ def in(data: Array[Byte]): Unit = this.bufferedData ++= data /** Read a line from the received data */ def nextLine(): Option[String] = val indexOfCRLF = this.bufferedData.indexOfSlice(CRLF) if indexOfCRLF == -1 then None else val splitData = this.bufferedData.splitAt(indexOfCRLF) this.bufferedData = Buffer.from(splitData(1).drop(CRLF.length)) Some(String(splitData(0).toArray)) end ReceivedLineParser