Skip to content

Commit a0cf8c0

Browse files
committed
Better support for asynchronous RPC and event handlers (closes #91).
Support for non-handshaking raw socket transports has been removed (closes #92). Added Variant conversion facilities for std::set and std::unordered_set.
1 parent 077422d commit a0cf8c0

Some content is hidden

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

58 files changed

+2208
-1526
lines changed

CHANGELOG.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,24 @@
1+
v0.6.0
2+
======
3+
Better support for asynchronous RPC and event handlers.
4+
5+
Breaking Changes:
6+
- `Session` and `CoroSession` now take an extra `boost::asio::io_service`
7+
argument in their `create()` functions. This IO service is now used for
8+
executing user-provided handlers. It can be the same one used by the
9+
transport connectors.
10+
- Support for non-handshaking raw socket transports has been
11+
removed (closes #92).
12+
13+
Enhancements:
14+
- Added `basicCoroRpc()`, `basicCoroEvent()`, `unpackedCoroRpc()`, and
15+
`unpackedCoroEvent()` wrappers, which execute a call/event slot within the
16+
context of a coroutine. This should make it easier to implement RPC/event
17+
handlers that need to run asynchronously themselves (closes #91).
18+
- `Invocation` and `Event` now have an `iosvc()` getter, which returns the
19+
user-provided `asio::io_service` (closes #91).
20+
- Added `Variant` conversion facilities for `std::set` and `set::unordered_set`.
21+
122
v0.5.3
223
======
324
Fixes and enhancements.

CMakeLists.txt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,6 @@ set(PATH_INCLUDE_MSGPACK ${PROJECT_SOURCE_DIR}/ext/msgpack-c/include CACHE PATH
3737
set(PATH_INCLUDE_CATCH ${PROJECT_SOURCE_DIR}/ext/Catch/include CACHE PATH
3838
"Catch include path")
3939

40-
# Add GUI variables that let the user specify that legacy connectors should be
41-
# used for tests and examples.
42-
option(CPPWAMP_USE_NON_HANDSHAKING_TRANSPORTS
43-
"Use non-handshaking raw socket transports in tests and examples"
44-
OFF)
45-
4640
# Confirm that the user's choices for the Boost library paths are valid.
4741
unset(BOOST_ROOT)
4842
set(BOOST_INCLUDEDIR ${PATH_INCLUDE_BOOST})

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ boost::asio::spawn(iosvc, [&](boost::asio::yield_context yield)
8080
{
8181
// Specify a TCP transport and JSON serialization
8282
auto tcp = connector<Json>(iosvc, TcpHost("localhost", 8001));
83-
auto session = wamp::CoroSession<>::create(tcp);
83+
auto session = wamp::CoroSession<>::create(iosvc, tcp);
8484
session->connect(yield);
8585
auto sessionInfo = session->join(Realm("myrealm"), yield);
8686
std::cout << "Client joined. Session ID = "

cppwamp/CMakeLists.txt

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,14 @@ set(HEADERS
1515
include/cppwamp/connector.hpp
1616
include/cppwamp/conversion.hpp
1717
include/cppwamp/corosession.hpp
18-
include/cppwamp/dialoguedata.hpp
18+
include/cppwamp/corounpacker.hpp
1919
include/cppwamp/error.hpp
2020
include/cppwamp/json.hpp
2121
include/cppwamp/msgpack.hpp
2222
include/cppwamp/null.hpp
2323
include/cppwamp/options.hpp
2424
include/cppwamp/payload.hpp
25+
include/cppwamp/peerdata.hpp
2526
include/cppwamp/rawsockoptions.hpp
2627
include/cppwamp/registration.hpp
2728
include/cppwamp/session.hpp
@@ -37,20 +38,21 @@ set(HEADERS
3738
include/cppwamp/version.hpp
3839
include/cppwamp/visitor.hpp
3940
include/cppwamp/wampdefs.hpp
41+
include/cppwamp/internal/asynctask.hpp
4042
include/cppwamp/internal/asioconnector.hpp
4143
include/cppwamp/internal/asioendpoint.hpp
4244
include/cppwamp/internal/asiolistener.hpp
4345
include/cppwamp/internal/asiotransport.hpp
46+
include/cppwamp/internal/base64.hpp
4447
include/cppwamp/internal/callee.hpp
4548
include/cppwamp/internal/client.hpp
4649
include/cppwamp/internal/clientinterface.hpp
4750
include/cppwamp/internal/config.hpp
48-
include/cppwamp/internal/dialogue.hpp
4951
include/cppwamp/internal/endian.hpp
5052
include/cppwamp/internal/integersequence.hpp
51-
include/cppwamp/internal/legacyasioendpoint.hpp
52-
include/cppwamp/internal/legacyasiotransport.hpp
5353
include/cppwamp/internal/messagetraits.hpp
54+
include/cppwamp/internal/passkey.hpp
55+
include/cppwamp/internal/peer.hpp
5456
include/cppwamp/internal/precompiled.hpp
5557
include/cppwamp/internal/rawsockconnector.hpp
5658
include/cppwamp/internal/rawsockhandshake.hpp
@@ -65,27 +67,28 @@ set(HEADERS
6567
include/cppwamp/internal/varianttraitsfwd.hpp
6668
include/cppwamp/internal/variantvisitors.hpp
6769
include/cppwamp/internal/wampmessage.hpp
70+
include/cppwamp/types/set.hpp
6871
include/cppwamp/types/tuple.hpp
6972
include/cppwamp/types/boostoptional.hpp
7073
include/cppwamp/types/unorderedmap.hpp
74+
include/cppwamp/types/unorderedset.hpp
7175
)
7276

7377
set(INLINES
7478
include/cppwamp/internal/asyncresult.ipp
75-
include/cppwamp/internal/base64.hpp
7679
include/cppwamp/internal/blob.ipp
7780
include/cppwamp/internal/conversion.ipp
7881
include/cppwamp/internal/corosession.ipp
79-
include/cppwamp/internal/dialoguedata.ipp
82+
include/cppwamp/internal/corounpacker.ipp
8083
include/cppwamp/internal/endian.ipp
8184
include/cppwamp/internal/error.ipp
8285
include/cppwamp/internal/json.ipp
8386
include/cppwamp/internal/messagetraits.ipp
8487
include/cppwamp/internal/msgpack.ipp
8588
include/cppwamp/internal/null.ipp
8689
include/cppwamp/internal/options.ipp
87-
include/cppwamp/internal/passkey.hpp
8890
include/cppwamp/internal/payload.ipp
91+
include/cppwamp/internal/peerdata.ipp
8992
include/cppwamp/internal/rawsockoptions.ipp
9093
include/cppwamp/internal/registration.ipp
9194
include/cppwamp/internal/session.ipp

cppwamp/cppwamp.pro

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,14 @@ HEADERS += \
2020
include/cppwamp/connector.hpp \
2121
include/cppwamp/conversion.hpp \
2222
include/cppwamp/corosession.hpp \
23-
include/cppwamp/dialoguedata.hpp \
23+
include/cppwamp/corounpacker.hpp \
2424
include/cppwamp/error.hpp \
2525
include/cppwamp/json.hpp \
2626
include/cppwamp/msgpack.hpp \
2727
include/cppwamp/null.hpp \
2828
include/cppwamp/options.hpp \
2929
include/cppwamp/payload.hpp \
30+
include/cppwamp/peerdata.hpp \
3031
include/cppwamp/rawsockoptions.hpp \
3132
include/cppwamp/registration.hpp \
3233
include/cppwamp/session.hpp \
@@ -42,20 +43,21 @@ HEADERS += \
4243
include/cppwamp/version.hpp \
4344
include/cppwamp/visitor.hpp \
4445
include/cppwamp/wampdefs.hpp \
46+
include/cppwamp/internal/asynctask.hpp \
4547
include/cppwamp/internal/asioconnector.hpp \
4648
include/cppwamp/internal/asioendpoint.hpp \
4749
include/cppwamp/internal/asiolistener.hpp \
4850
include/cppwamp/internal/asiotransport.hpp \
51+
include/cppwamp/internal/base64.hpp \
4952
include/cppwamp/internal/callee.hpp \
5053
include/cppwamp/internal/client.hpp \
5154
include/cppwamp/internal/clientinterface.hpp \
5255
include/cppwamp/internal/config.hpp \
53-
include/cppwamp/internal/dialogue.hpp \
5456
include/cppwamp/internal/endian.hpp \
5557
include/cppwamp/internal/integersequence.hpp \
56-
include/cppwamp/internal/legacyasioendpoint.hpp \
57-
include/cppwamp/internal/legacyasiotransport.hpp \
5858
include/cppwamp/internal/messagetraits.hpp \
59+
include/cppwamp/internal/passkey.hpp \
60+
include/cppwamp/internal/peer.hpp \
5961
include/cppwamp/internal/precompiled.hpp \
6062
include/cppwamp/internal/rawsockconnector.hpp \
6163
include/cppwamp/internal/rawsockhandshake.hpp \
@@ -70,25 +72,26 @@ HEADERS += \
7072
include/cppwamp/internal/varianttraitsfwd.hpp \
7173
include/cppwamp/internal/variantvisitors.hpp \
7274
include/cppwamp/internal/wampmessage.hpp \
75+
include/cppwamp/types/set.hpp \
7376
include/cppwamp/types/tuple.hpp \
7477
include/cppwamp/types/boostoptional.hpp \
7578
include/cppwamp/types/unorderedmap.hpp \
79+
include/cppwamp/types/unorderedset.hpp \
7680
\
7781
include/cppwamp/internal/asyncresult.ipp \
78-
include/cppwamp/internal/base64.hpp \
7982
include/cppwamp/internal/blob.ipp \
8083
include/cppwamp/internal/conversion.ipp \
8184
include/cppwamp/internal/corosession.ipp \
82-
include/cppwamp/internal/dialoguedata.ipp \
85+
include/cppwamp/internal/corounpacker.ipp \
8386
include/cppwamp/internal/endian.ipp \
8487
include/cppwamp/internal/error.ipp \
8588
include/cppwamp/internal/json.ipp \
8689
include/cppwamp/internal/messagetraits.ipp \
8790
include/cppwamp/internal/msgpack.ipp \
8891
include/cppwamp/internal/null.ipp \
8992
include/cppwamp/internal/options.ipp \
90-
include/cppwamp/internal/passkey.hpp \
9193
include/cppwamp/internal/payload.ipp \
94+
include/cppwamp/internal/peerdata.ipp \
9295
include/cppwamp/internal/rawsockoptions.ipp \
9396
include/cppwamp/internal/registration.ipp \
9497
include/cppwamp/internal/session.ipp \

cppwamp/include/cppwamp/asyncresult.hpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,20 @@ class AsyncResult
8787
//------------------------------------------------------------------------------
8888
template <typename T> using AsyncHandler = std::function<void (AsyncResult<T>)>;
8989

90+
91+
//------------------------------------------------------------------------------
92+
/** Type traits template used to obtain the result type of an asynchronous
93+
handler. */
94+
//------------------------------------------------------------------------------
95+
template <typename THandler>
96+
struct ResultTypeOfHandler {};
97+
98+
//------------------------------------------------------------------------------
99+
/** ResultTypeOfHandler specialization for AsyncHandler */
100+
//------------------------------------------------------------------------------
101+
template <typename T>
102+
struct ResultTypeOfHandler<AsyncHandler<T>> {using Type = AsyncResult<T>;};
103+
90104
} // namespace wamp
91105

92106
#include "internal/asyncresult.ipp"

cppwamp/include/cppwamp/connector.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ namespace internal {class ClientInterface;}
3232
3333
The Session class uses these Connector objects when attempting to
3434
establish a connection to the router.
35-
@see connector, legacyConnector */
35+
@see connector */
3636
//------------------------------------------------------------------------------
3737
class Connector : public std::enable_shared_from_this<Connector>
3838
{

cppwamp/include/cppwamp/corosession.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,10 +113,10 @@ class CoroSession : public TBase
113113
using YieldContext = boost::asio::basic_yield_context<TSpawnHandler>;
114114

115115
/** Creates a new CoroSession instance. */
116-
static Ptr create(const Connector::Ptr& connector);
116+
static Ptr create(AsioService& userIosvc, const Connector::Ptr& connector);
117117

118118
/** Creates a new CoroSession instance. */
119-
static Ptr create(const ConnectorList& connectors);
119+
static Ptr create(AsioService& userIosvc, const ConnectorList& connectors);
120120

121121
using Base::connect;
122122
using Base::join;

0 commit comments

Comments
 (0)