😎
[C++] MessagePack チュートリアル
はじめに
通信のシリアライズ/デシリアライズで使われるライブラリとして、
MessagePackに興味があったので、チュートリアルを参考に簡単なプログラムを試してみました。
試行内容は、単純にシリアライズ・デシリアライズを行ってみた、というものです。
準備
MessagePackは、以下のGithubから落としてきました。
MessagePackはboostライブラリに依存しているため、boostライブラリも必要になります。
boostライブラリは以下からダウンロードします。
boostライブラリダウンロードサイト
上記2つをダウンロードし、解凍しておきます。
以上で、準備は終わります。
プロジェクト作成・コード追加
新規プロジェクトを作成し、準備した各種ライブラリのパスを設定します。
-
新規プロジェクト作成 > コンソールアプリ(C++)にて、プロジェクトを作成します。
-
各種ライブラリのパスを通します。
プロジェクトのプロパティから、構成プロパティ > C/C++ > 全般を選択します。
追加のインクルードディレクトリに、MessagePackとboostライブラリへのパスを追加します。
MessagePack:[インストールディレクトリ]\msgpack-c-cpp_master\include
boostライブラリ:[インストールディレクトリ]\boost_1_83_0 -
ヘッダーファイルを追加します。
sample.h
#pragma once
#include <iostream>
#include <string>
#include <msgpack.hpp>
class MsgPackClientTest
{
public:
MsgPackClientTest()
: m_Number(0)
{}
MsgPackClientTest(int InNumber, std::string InText)
: m_Number(InNumber)
{}
inline int GetNumber() const { return m_Number; }
MSGPACK_DEFINE(m_Number);
private:
int m_Number;
};
- cppファイルを書き換えます。
sample.cpp
#include "MsgPackClientTest.h"
using namespace msgpack;
void Serialize(sbuffer& buffer)
{
//クライアントクラスのインスタンス化
MsgPackClientTest TestClient;
//シリアライズ
pack(buffer, TestClient);
//シリアライズ後データ
char* dataptr = buffer.data();
//シリアライズ後のデータサイズ
size_t data_size = buffer.size();
std::cout << "シリアライズデータサイズ: " << data_size << std::endl;
}
void Deserialize(sbuffer& buffer)
{
MsgPackClientTest RestoreTestClient;
try
{
char* pdata = buffer.data();
size_t data_size = buffer.size();
object_handle hd = unpack(pdata, data_size);
const object& obj = hd.get();
obj.convert(RestoreTestClient);
std::cout << "デシリアライズデータ:" << RestoreTestClient.GetNumber() << std::endl;
}
catch (std::bad_cast&)
{
//例外処理
}
}
int main()
{
sbuffer buffer;
Serialize(buffer);
Deserialize(buffer);
return 0;
}
実行
シリアライズデータサイズ: 2
デシリアライズデータ:0
実行すると、シリアライズ後のデータサイズと、
デシリアライズ後の復元したデータがログにでます。
最後に
簡単に、シリアライズ・デシリアライズを行うことができました。
以上、簡単なMessagePackチュートリアルでした。
Discussion