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 | } |