// 헤더들은 대략 이정도
#include <boost/serialization/serialization.hpp> // 직렬화 라이브러리
#include <boost/asio.hpp>
#include <boost/archive/binary_oarchive.hpp> // 직렬화를 위한 유틸리티
//
// userlist 데이터 타입에 대한 stl serialization 헤더도 추가로 필요함.
// 예를 들자면 boost/serialization/map.hpp 이런식으로
//
asio::streambuf userlist_buffer;
archive::binary_oarchive oar{userlist_buffer};
oar << userlist; // 유저리스트를 버퍼에 삽입
buf.sputc(); // 버퍼에 헤더 삽입
packet_header header;
header.type = packet::type::ntf_userlist; // // 유저리스트 알림 패킷 타입임을 지정한다.
header.size = sizeof(header) + userlist_buffer.size(); // 헤더의 크기는 헤더 크기 + 직렬화된 유저리스트의 크기
asio::streambuf sendbuffer;
sendbuffer.sputc(reinterpret_cast<const char*>(&header), sizeof(header)); // 송신 버퍼에 헤더 삽입.
sendbuffer.sputc(asio::buffer_cast<const char*>(userlist_buffer.data()), userlist_buffer.size()); // 직렬화된 유저리스트 삽입
socket->send(asio::buffer_cast<const void*>(buf.data()), buf.size()); // 송신
이런식으로 하면 되니까 깔끔하게 고쳐서 쓰삼
맵이면 #include <boost/serialization/map.hpp>
벡터나 리스트면 #include <boost/serialization/vector.hpp> #include <boost/serialization/list.hpp>
그냥 리인터프린트 캐스트로 저장 불러오는거 아닌가요
부스트 스트림버퍼랑 STL거랑 어떤차이임?
boost asio streambuf는 stl의 그 streambuf를 상속받아서 만든 클래스야. 내부에 버퍼를 가지고 있어.
리인터프릿 캐스트로 저장을 어떻게 불러와 -.-ㅋㅋ; 어떤 컨테이너를 송/수신에 쓸 수 있도록 직렬화하고, 그 직렬화된 데이터를 보내는 거야