Ошибка в отправке пакета на с++

структура пакетов должна быть такой:

["z", [6, null]]
["F", [1, null]]
["F", [0, null]]

у меня код на js, который все правильно упаковывает и отправляет:

function doNewSend(sender) { //sender - и есть пакети
  ws.send(new Uint8Array(Array.from(msgpack5.encode(sender))));
}

если вывести в консоль - new Uint8Array(Array.from(msgpack5.encode(["z", [6, null]]))), то пакеты примут такую форму:

для z: [146, 161, 122, 146, 6, 192]
для F(с 1): [146, 161, 70, 146, 1, 192]
для F(с 0): [146, 161, 70, 146, 0, 192]`

Uint8Array(6) [146, 161, 122, 146, 6, 192, buffer: ArrayBuffer(6),          
byteLength: 6, byteOffset: 0, length: 6, Symbol(Symbol.toStringTag):    
'Uint8Array'] - но в общем так(z пакет)

Но мне надо сделать так на с++, я пытался сделать packer-ом msgpack(пример только для пакета z):

(ix::WebSocket sender; - sender если что)

msgpack::sbuffer sb;
msgpack::packer<msgpack::sbuffer> pk(&sb);
pk.pack_array(2);
pk.pack("z");
pk.pack_array(2);
pk.pack(id); // тут 6
pk.pack_nil();
vector<uint8_t> packet(sb.data(), sb.data() + sb.size());
sender.sendBinary(packet);

Не выходило, в общем.

Success: 0 Compression error: 0 Payload size: 0 Wire size: 0

Я пытаюсь сделать вручную (пример для пакета z):

std::vector<uint8_t> packet;
packet.push_back(146);
packet.push_back(161);
packet.push_back(122);
packet.push_back(146);
packet.push_back(static_cast<uint8_t>(id)); // тут 6
packet.push_back(192);
std::string data(reinterpret_cast<const char*>(packet.data()), packet.size());
sender.sendBinary(data);

Не выходит, ошибок нет. Непонятно, это неправильная структура пакета, или еще что-то.

Кто может пояснить в чем может быть проблема?


Ответы (0 шт):