Skip to content

Commit 4f9f6ad

Browse files
committed
User-defined type support.
- Users may now register custom types that can be converted to/from Variant. These registered custom types may be passed directly to RPC and pub/sub operations and handlers (closes #69). - timeservice and timeclient examples have been provided which showcase the use of conversion facilities. These examples use the CppWAMP library in a header-only fashion (closes #67). - Converters have been provided for std::unordered_map and boost::optional (closes #68). - Payload::withArgs now takes variadic arguments, instead of a std::initializer_list<Variant>. This change makes it possible for registered user-defined types to be automatically converted to Variant. - std::tuple support is now provided via the new conversion facilities, in <cppwamp/types/tuple.hpp>. - Fixed compile errors that occur only when the library is used in a header-only fashion.
1 parent 0206ec0 commit 4f9f6ad

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+2747
-667
lines changed

CHANGELOG.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1+
v0.5.0
2+
======
3+
User-defined type support.
4+
5+
### New Features
6+
- Users may now register custom types that can be converted to/from `Variant`. These registered custom types may be passed directly to RPC and pub/sub operations and handlers. See *Custom Variant Conversions* in the tutorial for usage examples (closes #69).
7+
- `timeservice` and `timeclient` examples have been provided which showcase the use of conversion facilities. These examples use the CppWAMP library in a header-only fashion (closes #67).
8+
- Converters have been provided for `std::unordered_map` and `boost::optional` (closes #68).
9+
10+
### Breaking Changes
11+
- `Payload::withArgs` now takes variadic arguments, instead of a `std::initializer_list<Variant>`. This change makes it possible for registered user-defined types to be automatically converted to `Variant`. Wherever you do `Rpc("foo").withArgs({"hello", 42})` should be changed to `Rpc("foo").withArgs("hello", 42)` (notice the removed curly braces).
12+
- `std::tuple` support is now provided via the new conversion facilities, in `<cppwamp/types/tuple.hpp>`.
13+
14+
### Other Changes
15+
- Fixed compile errors that occur only when the library is used in a header-only fashion.
16+
117
v0.4.0
218
======
319
Connection API improvements.

Doxyfile.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -766,6 +766,7 @@ WARN_LOGFILE =
766766

767767
INPUT = cppwamp/include/cppwamp \
768768
cppwamp/include/cppwamp/internal \
769+
cppwamp/include/cppwamp/types \
769770
doc
770771

771772
# This tag can be used to specify the character encoding of the source files

README.md

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ C++11 client library for the [WAMP][wamp] protocol.
1313
- Provides both callback and co-routine based asynchronous APIs
1414
- Easy conversion between static and dynamic types
1515
- RPC and pub/sub event handlers can have static argument types
16+
- User-defined types can be registered and exchanged via RPC and pub-sub
1617
- Header-only, but may also be optionally compiled
1718
- Unit tested
1819
- Permissive license (Boost)
@@ -64,6 +65,7 @@ Tested Platforms
6465
This library has been tested with:
6566

6667
- GCC 4.8.2, x86_64-linux-gnu, on Linux Mint 17 (based on Ubuntu 14.04)
68+
- Clang 3.6.0, x86_64-pc-linux-gnu, on Linux Mint 17
6769
- GCC 4.9.2 on Debian 8.0 "jessie"
6870
- Xcode 6.3.1 (Clang 602.0.49) on OS X 10.10.3
6971

@@ -78,15 +80,12 @@ wamp::AsioService iosvc;
7880
boost::asio::spawn(iosvc, [&](boost::asio::yield_context yield)
7981
{
8082
// Specify a TCP transport and JSON serialization
81-
auto tcp = wamp::legacy::TcpConnector::create(iosvc, "localhost",
82-
8001, wamp::Json::id());
83-
83+
auto tcp = connector<Json>(iosvc, TcpHost("localhost", 8001));
8484
auto session = wamp::CoroSession<>::create(tcp);
8585
session->connect(yield);
8686
auto sessionInfo = session->join(Realm("myrealm"), yield);
8787
std::cout << "Client joined. Session ID = "
8888
<< sessionInfo.id() << "\n";
89-
9089
// etc.
9190
});
9291
iosvc.run();
@@ -106,7 +105,7 @@ boost::asio::spawn(iosvc, [&](boost::asio::yield_context yield)
106105

107106
### Calling a remote procedure
108107
```c++
109-
auto result = session->call(Rpc("add").withArgs({2, 2}), yield);
108+
auto result = session->call(Rpc("add").withArgs(2, 2), yield);
110109
std::cout << "2 + 2 is " << result[0].to<int>() << "\n";
111110
```
112111
@@ -131,7 +130,7 @@ boost::asio::spawn(iosvc, [&](boost::asio::yield_context yield)
131130
### Publishing an event
132131
```c++
133132
float value = std::rand() % 10;
134-
session->publish(Pub("sensorSampled").withArgs({value}));
133+
session->publish(Pub("sensorSampled").withArgs(value));
135134
```
136135
137136
<a name="advanced"></a>Supported Advanced Profile Features

cppwamp.pro

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,22 @@ TEMPLATE = subdirs
1010
chatexample.subdir = examples/chat
1111
chatexample.target = chat
1212

13+
timeservice.subdir = examples/timeservice
14+
timeservice.target = timeservice
15+
16+
timeclient.subdir = examples/timeclient
17+
timeclient.target = timeclient
18+
1319
SUBDIRS = cppwamp \
1420
test \
15-
chatexample
21+
chatexample \
22+
timeservice \
23+
timeclient
1624

1725
test.depends = cppwamp
1826
chatexample.depends = cppwamp
27+
timeservice.depends = cppwamp
28+
timeclient.depends = cppwamp
1929

2030
OTHER_FILES += \
2131
CMakeLists.txt \

cppwamp/CMakeLists.txt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ set(HEADERS
1212
include/cppwamp/asyncresult.hpp
1313
include/cppwamp/codec.hpp
1414
include/cppwamp/connector.hpp
15+
include/cppwamp/conversion.hpp
1516
include/cppwamp/corosession.hpp
1617
include/cppwamp/dialoguedata.hpp
1718
include/cppwamp/error.hpp
@@ -27,11 +28,11 @@ set(HEADERS
2728
include/cppwamp/subscription.hpp
2829
include/cppwamp/tcp.hpp
2930
include/cppwamp/tcphost.hpp
31+
include/cppwamp/traits.hpp
3032
include/cppwamp/uds.hpp
3133
include/cppwamp/udspath.hpp
3234
include/cppwamp/unpacker.hpp
3335
include/cppwamp/variant.hpp
34-
include/cppwamp/varianttuple.hpp
3536
include/cppwamp/version.hpp
3637
include/cppwamp/visitor.hpp
3738
include/cppwamp/wampdefs.hpp
@@ -45,6 +46,7 @@ set(HEADERS
4546
include/cppwamp/internal/config.hpp
4647
include/cppwamp/internal/dialogue.hpp
4748
include/cppwamp/internal/endian.hpp
49+
include/cppwamp/internal/integersequence.hpp
4850
include/cppwamp/internal/legacyasioendpoint.hpp
4951
include/cppwamp/internal/legacyasiotransport.hpp
5052
include/cppwamp/internal/messagetraits.hpp
@@ -62,10 +64,14 @@ set(HEADERS
6264
include/cppwamp/internal/varianttraitsfwd.hpp
6365
include/cppwamp/internal/variantvisitors.hpp
6466
include/cppwamp/internal/wampmessage.hpp
67+
include/cppwamp/types/tuple.hpp
68+
include/cppwamp/types/boostoptional.hpp
69+
include/cppwamp/types/unorderedmap.hpp
6570
)
6671

6772
set(INLINES
6873
include/cppwamp/internal/asyncresult.ipp
74+
include/cppwamp/internal/conversion.ipp
6975
include/cppwamp/internal/corosession.ipp
7076
include/cppwamp/internal/dialoguedata.ipp
7177
include/cppwamp/internal/endian.ipp
@@ -88,9 +94,9 @@ set(INLINES
8894
include/cppwamp/internal/udspath.ipp
8995
include/cppwamp/internal/unpacker.ipp
9096
include/cppwamp/internal/variant.ipp
91-
include/cppwamp/internal/varianttuple.ipp
9297
include/cppwamp/internal/version.ipp
9398
include/cppwamp/internal/visitor.ipp
99+
include/cppwamp/types/internal/tuple.ipp
94100
)
95101

96102
set(DOCUMENTS

cppwamp/cppwamp.pro

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ HEADERS += \
1717
include/cppwamp/asyncresult.hpp \
1818
include/cppwamp/codec.hpp \
1919
include/cppwamp/connector.hpp \
20+
include/cppwamp/conversion.hpp \
2021
include/cppwamp/corosession.hpp \
2122
include/cppwamp/dialoguedata.hpp \
2223
include/cppwamp/error.hpp \
@@ -32,11 +33,11 @@ HEADERS += \
3233
include/cppwamp/subscription.hpp \
3334
include/cppwamp/tcp.hpp \
3435
include/cppwamp/tcphost.hpp \
36+
include/cppwamp/traits.hpp \
3537
include/cppwamp/uds.hpp \
3638
include/cppwamp/udspath.hpp \
3739
include/cppwamp/unpacker.hpp \
3840
include/cppwamp/variant.hpp \
39-
include/cppwamp/varianttuple.hpp \
4041
include/cppwamp/version.hpp \
4142
include/cppwamp/visitor.hpp \
4243
include/cppwamp/wampdefs.hpp \
@@ -50,6 +51,7 @@ HEADERS += \
5051
include/cppwamp/internal/config.hpp \
5152
include/cppwamp/internal/dialogue.hpp \
5253
include/cppwamp/internal/endian.hpp \
54+
include/cppwamp/internal/integersequence.hpp \
5355
include/cppwamp/internal/legacyasioendpoint.hpp \
5456
include/cppwamp/internal/legacyasiotransport.hpp \
5557
include/cppwamp/internal/messagetraits.hpp \
@@ -67,8 +69,12 @@ HEADERS += \
6769
include/cppwamp/internal/varianttraitsfwd.hpp \
6870
include/cppwamp/internal/variantvisitors.hpp \
6971
include/cppwamp/internal/wampmessage.hpp \
72+
include/cppwamp/types/tuple.hpp \
73+
include/cppwamp/types/boostoptional.hpp \
74+
include/cppwamp/types/unorderedmap.hpp \
7075
\
7176
include/cppwamp/internal/asyncresult.ipp \
77+
include/cppwamp/internal/conversion.ipp \
7278
include/cppwamp/internal/corosession.ipp \
7379
include/cppwamp/internal/dialoguedata.ipp \
7480
include/cppwamp/internal/endian.ipp \
@@ -91,9 +97,9 @@ HEADERS += \
9197
include/cppwamp/internal/udspath.ipp \
9298
include/cppwamp/internal/unpacker.ipp \
9399
include/cppwamp/internal/variant.ipp \
94-
include/cppwamp/internal/varianttuple.ipp \
95100
include/cppwamp/internal/version.ipp \
96-
include/cppwamp/internal/visitor.ipp
101+
include/cppwamp/internal/visitor.ipp \
102+
include/cppwamp/types/internal/tuple.ipp
97103

98104
OTHER_FILES += \
99105
CMakeLists.txt
@@ -132,4 +138,8 @@ QMAKE_CXXFLAGS += \
132138

133139
LIBS += -pthread
134140

135-
DEPENDPATH += ./include ./include/internal
141+
DEPENDPATH += \
142+
./include \
143+
./include/internal \
144+
./include/types \
145+
./include/types/internal

0 commit comments

Comments
 (0)