public static void encodePacket(Packet packet, boolean utf8encode, EncodeCallback callback) {
    if (packet.data instanceof byte[]) {
      @SuppressWarnings("unchecked")
      Packet<byte[]> _packet = packet;
      @SuppressWarnings("unchecked")
      EncodeCallback<byte[]> _callback = callback;
      encodeByteArray(_packet, _callback);
      return;
    }

    String encoded = String.valueOf(packets.get(packet.type));

    if (null != packet.data) {
      encoded +=
          utf8encode ? UTF8.encode(String.valueOf(packet.data)) : String.valueOf(packet.data);
    }

    @SuppressWarnings("unchecked")
    EncodeCallback<String> _callback = callback;
    _callback.call(encoded);
  }