public void writeData(OutputStream out) throws IOException {
    BinaryTools.writeUShort(out, family);

    if (roomInfo != null) {
      ByteBlock roomInfoBlock = ByteBlock.createByteBlock(roomInfo);
      new Tlv(TYPE_ROOM_INFO, roomInfoBlock).write(out);
    }
  }
  /**
   * Generates a new service request command from the given incoming SNAC packet.
   *
   * @param packet the incoming service request packet
   */
  protected ServiceRequest(SnacPacket packet) {
    super(CMD_SERVICE_REQ);

    DefensiveTools.checkNull(packet, "packet");

    ByteBlock snacData = packet.getData();

    family = BinaryTools.getUShort(snacData, 0);

    ByteBlock tlvBlock = snacData.subBlock(2);

    TlvChain chatChain = TlvTools.readChain(tlvBlock);

    Tlv chatInfoTlv = chatChain.getLastTlv(TYPE_ROOM_INFO);

    if (chatInfoTlv != null) {
      ByteBlock chatBlock = chatInfoTlv.getData();

      roomInfo = MiniRoomInfo.readMiniRoomInfo(chatBlock);
    } else {
      roomInfo = null;
    }
  }