예제 #1
0
 /**
  * @param $version
  * @param $input
  * @return null|ControlPacket
  */
 public static function getByMessage($version, $input)
 {
     $message = null;
     if (empty($input)) {
         throw new \InvalidArgumentException();
     }
     $packetControlType = ord($input[0]) >> 4;
     switch ($packetControlType) {
         case ConnectionAck::getControlPacketType():
             $message = new ConnectionAck($version, $input);
             break;
         case PingResponse::getControlPacketType():
             $message = new PingResponse($version, $input);
             break;
         case SubscribeAck::getControlPacketType():
             $message = new SubscribeAck($version, $input);
             break;
         case Publish::getControlPacketType():
             $message = Publish::parse($version, $input);
             break;
         case PublishComplete::getControlPacketType():
             $message = PublishComplete::parse($version, $input);
             break;
         case PublishRelease::getControlPacketType():
             $message = PublishRelease::parse($version, $input);
             break;
         case PublishReceived::getControlPacketType():
             $message = PublishReceived::parse($version, $input);
             break;
         default:
             throw new \InvalidArgumentException('got message with control packet type ' . $packetControlType);
     }
     return $message;
 }