Skip to content

Commit

Permalink
Better support for asynchronous RPC and event handlers (closes #91).
Browse files Browse the repository at this point in the history
Support for non-handshaking raw socket transports has been removed (closes #92).
Added Variant conversion facilities for std::set and std::unordered_set.
  • Loading branch information
ecorm committed Dec 23, 2015
1 parent 077422d commit a0cf8c0
Show file tree
Hide file tree
Showing 58 changed files with 2,208 additions and 1,526 deletions.
21 changes: 21 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,24 @@
v0.6.0
======
Better support for asynchronous RPC and event handlers.

Breaking Changes:
- `Session` and `CoroSession` now take an extra `boost::asio::io_service`
argument in their `create()` functions. This IO service is now used for
executing user-provided handlers. It can be the same one used by the
transport connectors.
- Support for non-handshaking raw socket transports has been
removed (closes #92).

Enhancements:
- Added `basicCoroRpc()`, `basicCoroEvent()`, `unpackedCoroRpc()`, and
`unpackedCoroEvent()` wrappers, which execute a call/event slot within the
context of a coroutine. This should make it easier to implement RPC/event
handlers that need to run asynchronously themselves (closes #91).
- `Invocation` and `Event` now have an `iosvc()` getter, which returns the
user-provided `asio::io_service` (closes #91).
- Added `Variant` conversion facilities for `std::set` and `set::unordered_set`.

v0.5.3
======
Fixes and enhancements.
Expand Down
6 changes: 0 additions & 6 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,6 @@ set(PATH_INCLUDE_MSGPACK ${PROJECT_SOURCE_DIR}/ext/msgpack-c/include CACHE PATH
set(PATH_INCLUDE_CATCH ${PROJECT_SOURCE_DIR}/ext/Catch/include CACHE PATH
"Catch include path")

# Add GUI variables that let the user specify that legacy connectors should be
# used for tests and examples.
option(CPPWAMP_USE_NON_HANDSHAKING_TRANSPORTS
"Use non-handshaking raw socket transports in tests and examples"
OFF)

# Confirm that the user's choices for the Boost library paths are valid.
unset(BOOST_ROOT)
set(BOOST_INCLUDEDIR ${PATH_INCLUDE_BOOST})
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ boost::asio::spawn(iosvc, [&](boost::asio::yield_context yield)
{
// Specify a TCP transport and JSON serialization
auto tcp = connector<Json>(iosvc, TcpHost("localhost", 8001));
auto session = wamp::CoroSession<>::create(tcp);
auto session = wamp::CoroSession<>::create(iosvc, tcp);
session->connect(yield);
auto sessionInfo = session->join(Realm("myrealm"), yield);
std::cout << "Client joined. Session ID = "
Expand Down
17 changes: 10 additions & 7 deletions cppwamp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,14 @@ set(HEADERS
include/cppwamp/connector.hpp
include/cppwamp/conversion.hpp
include/cppwamp/corosession.hpp
include/cppwamp/dialoguedata.hpp
include/cppwamp/corounpacker.hpp
include/cppwamp/error.hpp
include/cppwamp/json.hpp
include/cppwamp/msgpack.hpp
include/cppwamp/null.hpp
include/cppwamp/options.hpp
include/cppwamp/payload.hpp
include/cppwamp/peerdata.hpp
include/cppwamp/rawsockoptions.hpp
include/cppwamp/registration.hpp
include/cppwamp/session.hpp
Expand All @@ -37,20 +38,21 @@ set(HEADERS
include/cppwamp/version.hpp
include/cppwamp/visitor.hpp
include/cppwamp/wampdefs.hpp
include/cppwamp/internal/asynctask.hpp
include/cppwamp/internal/asioconnector.hpp
include/cppwamp/internal/asioendpoint.hpp
include/cppwamp/internal/asiolistener.hpp
include/cppwamp/internal/asiotransport.hpp
include/cppwamp/internal/base64.hpp
include/cppwamp/internal/callee.hpp
include/cppwamp/internal/client.hpp
include/cppwamp/internal/clientinterface.hpp
include/cppwamp/internal/config.hpp
include/cppwamp/internal/dialogue.hpp
include/cppwamp/internal/endian.hpp
include/cppwamp/internal/integersequence.hpp
include/cppwamp/internal/legacyasioendpoint.hpp
include/cppwamp/internal/legacyasiotransport.hpp
include/cppwamp/internal/messagetraits.hpp
include/cppwamp/internal/passkey.hpp
include/cppwamp/internal/peer.hpp
include/cppwamp/internal/precompiled.hpp
include/cppwamp/internal/rawsockconnector.hpp
include/cppwamp/internal/rawsockhandshake.hpp
Expand All @@ -65,27 +67,28 @@ set(HEADERS
include/cppwamp/internal/varianttraitsfwd.hpp
include/cppwamp/internal/variantvisitors.hpp
include/cppwamp/internal/wampmessage.hpp
include/cppwamp/types/set.hpp
include/cppwamp/types/tuple.hpp
include/cppwamp/types/boostoptional.hpp
include/cppwamp/types/unorderedmap.hpp
include/cppwamp/types/unorderedset.hpp
)

set(INLINES
include/cppwamp/internal/asyncresult.ipp
include/cppwamp/internal/base64.hpp
include/cppwamp/internal/blob.ipp
include/cppwamp/internal/conversion.ipp
include/cppwamp/internal/corosession.ipp
include/cppwamp/internal/dialoguedata.ipp
include/cppwamp/internal/corounpacker.ipp
include/cppwamp/internal/endian.ipp
include/cppwamp/internal/error.ipp
include/cppwamp/internal/json.ipp
include/cppwamp/internal/messagetraits.ipp
include/cppwamp/internal/msgpack.ipp
include/cppwamp/internal/null.ipp
include/cppwamp/internal/options.ipp
include/cppwamp/internal/passkey.hpp
include/cppwamp/internal/payload.ipp
include/cppwamp/internal/peerdata.ipp
include/cppwamp/internal/rawsockoptions.ipp
include/cppwamp/internal/registration.ipp
include/cppwamp/internal/session.ipp
Expand Down
17 changes: 10 additions & 7 deletions cppwamp/cppwamp.pro
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,14 @@ HEADERS += \
include/cppwamp/connector.hpp \
include/cppwamp/conversion.hpp \
include/cppwamp/corosession.hpp \
include/cppwamp/dialoguedata.hpp \
include/cppwamp/corounpacker.hpp \
include/cppwamp/error.hpp \
include/cppwamp/json.hpp \
include/cppwamp/msgpack.hpp \
include/cppwamp/null.hpp \
include/cppwamp/options.hpp \
include/cppwamp/payload.hpp \
include/cppwamp/peerdata.hpp \
include/cppwamp/rawsockoptions.hpp \
include/cppwamp/registration.hpp \
include/cppwamp/session.hpp \
Expand All @@ -42,20 +43,21 @@ HEADERS += \
include/cppwamp/version.hpp \
include/cppwamp/visitor.hpp \
include/cppwamp/wampdefs.hpp \
include/cppwamp/internal/asynctask.hpp \
include/cppwamp/internal/asioconnector.hpp \
include/cppwamp/internal/asioendpoint.hpp \
include/cppwamp/internal/asiolistener.hpp \
include/cppwamp/internal/asiotransport.hpp \
include/cppwamp/internal/base64.hpp \
include/cppwamp/internal/callee.hpp \
include/cppwamp/internal/client.hpp \
include/cppwamp/internal/clientinterface.hpp \
include/cppwamp/internal/config.hpp \
include/cppwamp/internal/dialogue.hpp \
include/cppwamp/internal/endian.hpp \
include/cppwamp/internal/integersequence.hpp \
include/cppwamp/internal/legacyasioendpoint.hpp \
include/cppwamp/internal/legacyasiotransport.hpp \
include/cppwamp/internal/messagetraits.hpp \
include/cppwamp/internal/passkey.hpp \
include/cppwamp/internal/peer.hpp \
include/cppwamp/internal/precompiled.hpp \
include/cppwamp/internal/rawsockconnector.hpp \
include/cppwamp/internal/rawsockhandshake.hpp \
Expand All @@ -70,25 +72,26 @@ HEADERS += \
include/cppwamp/internal/varianttraitsfwd.hpp \
include/cppwamp/internal/variantvisitors.hpp \
include/cppwamp/internal/wampmessage.hpp \
include/cppwamp/types/set.hpp \
include/cppwamp/types/tuple.hpp \
include/cppwamp/types/boostoptional.hpp \
include/cppwamp/types/unorderedmap.hpp \
include/cppwamp/types/unorderedset.hpp \
\
include/cppwamp/internal/asyncresult.ipp \
include/cppwamp/internal/base64.hpp \
include/cppwamp/internal/blob.ipp \
include/cppwamp/internal/conversion.ipp \
include/cppwamp/internal/corosession.ipp \
include/cppwamp/internal/dialoguedata.ipp \
include/cppwamp/internal/corounpacker.ipp \
include/cppwamp/internal/endian.ipp \
include/cppwamp/internal/error.ipp \
include/cppwamp/internal/json.ipp \
include/cppwamp/internal/messagetraits.ipp \
include/cppwamp/internal/msgpack.ipp \
include/cppwamp/internal/null.ipp \
include/cppwamp/internal/options.ipp \
include/cppwamp/internal/passkey.hpp \
include/cppwamp/internal/payload.ipp \
include/cppwamp/internal/peerdata.ipp \
include/cppwamp/internal/rawsockoptions.ipp \
include/cppwamp/internal/registration.ipp \
include/cppwamp/internal/session.ipp \
Expand Down
14 changes: 14 additions & 0 deletions cppwamp/include/cppwamp/asyncresult.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,20 @@ class AsyncResult
//------------------------------------------------------------------------------
template <typename T> using AsyncHandler = std::function<void (AsyncResult<T>)>;


//------------------------------------------------------------------------------
/** Type traits template used to obtain the result type of an asynchronous
handler. */
//------------------------------------------------------------------------------
template <typename THandler>
struct ResultTypeOfHandler {};

//------------------------------------------------------------------------------
/** ResultTypeOfHandler specialization for AsyncHandler */
//------------------------------------------------------------------------------
template <typename T>
struct ResultTypeOfHandler<AsyncHandler<T>> {using Type = AsyncResult<T>;};

} // namespace wamp

#include "internal/asyncresult.ipp"
Expand Down
2 changes: 1 addition & 1 deletion cppwamp/include/cppwamp/connector.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ namespace internal {class ClientInterface;}
The Session class uses these Connector objects when attempting to
establish a connection to the router.
@see connector, legacyConnector */
@see connector */
//------------------------------------------------------------------------------
class Connector : public std::enable_shared_from_this<Connector>
{
Expand Down
4 changes: 2 additions & 2 deletions cppwamp/include/cppwamp/corosession.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -113,10 +113,10 @@ class CoroSession : public TBase
using YieldContext = boost::asio::basic_yield_context<TSpawnHandler>;

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

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

using Base::connect;
using Base::join;
Expand Down
Loading

0 comments on commit a0cf8c0

Please sign in to comment.