View difference between Paste ID: QBYKvpgs and iQUE3bjR
SHOW: | | - or go back to the newest paste.
1
object Decoder {
2
  var decoderListeners = List.empty[DecoderListener]
3
  
4
  val reconstructBuffer = MutableMap.empty[Int, Array[Byte]]
5
  
6
  def decode(packetType: Short, sequenceNumber: Int, data: Array[Byte]) {
7-
    val packets =
7+
    val packets = decodeRecursively(packetType, sequenceNumber, data)
8-
      if (packetType == 42) {
8+
9-
        List(HungerPacket(bytes))
9+
10-
      } else if (packetType == 43) {
10+
11-
        List(ReadClientMovePacket(bytes))
11+
12-
      } else if (packetType == 44) {
12+
13-
        val p1 = HungerPacket(bytes.take(12))
13+
  private def decodeRecursively(packetType: Short, sequenceNumber: Int, data: Array[Byte]): List[Packet] {
14-
        val p2 = ReadClientMovePacket(bytes.drop(10))
14+
	if (packetType == 42) {
15-
        List(p1, p2)
15+
	  List(HungerPacket(bytes))
16
	} else if (packetType == 43) {
17
	  List(ReadClientMovePacket(bytes))
18
	} else if (packetType == 44) {
19
	  val p1 = HungerPacket(bytes.take(12))
20
	  val p2 = ReadClientMovePacket(bytes.drop(12))
21
      List(p1, p2)
22
    } else if (packetType == 45) {
23-
        // do something with bigBuffer
23+
24-
        reconstructBuffer.clear()
24+
25
        val bigBuffer = scala.collection.mutable.ArrayBuffer.empty[Byte]
26
        for (k <- 0 until packetTotal) {
27
          bigBuffer.appendAll(reconstructBuffer(k))
28
        }
29
		reconstructBuffer.clear()
30
		
31
        // split up somehow
32
		val b1 = bytes.take(12)
33
		val b2 = bytes.drop(12)
34
		
35
        decodeRecursively(42, 0, b1) ++
36
		decodeRecursively(43, 0, b2)
37
	  } else {
38
	    Nil // we don't have enough information yet
39
      }
40
    }
41
  }
42
}
43
trait DecoderListener {
44
  def packetReceived(packet: Packet): Unit
45
}