From 721700bfe5ec572a7c5b87b7718a115af2ae8b05 Mon Sep 17 00:00:00 2001 From: Takatoshi Kondo Date: Mon, 6 Apr 2015 10:30:43 +0900 Subject: [PATCH] Added the new protocol example. --- example/cpp03/protocol_new.cpp | 92 ++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 example/cpp03/protocol_new.cpp diff --git a/example/cpp03/protocol_new.cpp b/example/cpp03/protocol_new.cpp new file mode 100644 index 00000000..e9cf2344 --- /dev/null +++ b/example/cpp03/protocol_new.cpp @@ -0,0 +1,92 @@ +// MessagePack for C++ example +// +// Copyright (C) 2015 KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#include +#include +#include +#include + +// This example uses obsolete APIs +// See protocol_new.cpp +namespace myprotocol { + struct Get { + Get() {} + Get(uint32_t f, const std::string& k) : flags(f), key(k) {} + uint32_t flags; + std::string key; + MSGPACK_DEFINE(flags, key); + }; + + typedef std::vector MultiGet; +} + + +int main(void) +{ + // send Get request + std::stringstream stream; + { + myprotocol::Get req; + req.flags = 0; + req.key = "key0"; + msgpack::pack(stream, req); + } + + stream.seekg(0); + + // receive Get request + { + std::string buffer(stream.str()); + + msgpack::unpacked result; + msgpack::unpack(result, buffer.data(), buffer.size()); + msgpack::object o = result.get(); + + myprotocol::Get req; + o.convert(req); + std::cout << "received: " << o << std::endl; + } + + + stream.str(""); + + + // send MultiGet request + { + myprotocol::MultiGet req; + req.push_back( myprotocol::Get(1, "key1") ); + req.push_back( myprotocol::Get(2, "key2") ); + req.push_back( myprotocol::Get(3, "key3") ); + msgpack::pack(stream, req); + } + + stream.seekg(0); + + // receive MultiGet request + { + std::string buffer(stream.str()); + + msgpack::unpacked result; + msgpack::unpack(result, buffer.data(), buffer.size()); + msgpack::object o = result.get(); + + + myprotocol::MultiGet req; + o.convert(req); + std::cout << "received: " << o << std::endl; + } +}