Advertisement
Guest User

Untitled

a guest
Mar 1st, 2014
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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 = decodeRecursively(packetType, sequenceNumber, data)
  8.     for (packet <- packets; listener <- listeners) {
  9.       listener.packetReceived(packet)
  10.     }
  11.   }
  12.  
  13.   private def decodeRecursively(packetType: Short, sequenceNumber: Int, data: Array[Byte]): List[Packet] {
  14.     if (packetType == 42) {
  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.       reconstructBuffer += sequenceNumber -> data
  24.       if (reconstructBuffer.size == 10) {
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement