aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/Client/ReceivedLineParser.scala
blob: 7cbf9359bfe97f4f24cea6820547c26c3d9c3925 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package o1game.Client

import scala.collection.mutable.Buffer
import o1game.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