Introduce support for asynchronous server-side methods (#12)

* Add preliminary changes for async server methods

* Refactor the Message concept and break it into distinctive types

* Continue working on async server methods (high-level API mainly)

* Continue developing support for async server

* Finishing async server methods

* Finishing async server methods (fixing tests & cleaning up)

* A little code cleaning

* Add unit tests for type traits of free functions

* Support for generating async server methods in stub headers

* Update ChangeLog for v0.3.0

* Update the tutorial with how to use async server-side methods

* Update the TOC in sdbus-c++ tutorial

* Update numbering in TOC

* Remove unnecessary code

* Final cleanups
This commit is contained in:
Stanislav Angelovič authored and Lukáš Ďurfina committed 2018-07-02 11:22:00 +02:00
1 parent b041f76bfc
commit d8fd053714
33 files changed
+866 -223

No files matched your search

+32 -13
View File
@@ -44,6 +44,12 @@ namespace sdbus {
class ObjectPath;
class Signature;
template <typename... _ValueTypes> class Struct;
class Message;
class MethodCall;
class MethodReply;
class Signal;
template <typename... _Results> class Result;
}
namespace sdbus {
@@ -65,16 +71,8 @@ namespace sdbus {
class Message
{
public:
enum class Type
{
ePlainMessage
, eMethodCall
, eMethodReply
, eSignal
};
Message() = default;
Message(void *msg, Type type = Type::ePlainMessage) noexcept;
Message(void *msg) noexcept;
Message(const Message&) noexcept;
Message& operator=(const Message&) noexcept;
Message(Message&& other) noexcept;
@@ -137,21 +135,42 @@ namespace sdbus {
void peekType(std::string& type, std::string& contents) const;
bool isValid() const;
bool isEmpty() const;
Type getType() const;
void copyTo(Message& destination, bool complete) const;
void seal();
void rewind(bool complete);
Message createReply() const;
Message send() const;
protected:
void* getMsg() const;
private:
void* msg_{};
Type type_{Type::ePlainMessage};
mutable bool ok_{true};
};
class MethodCall : public Message
{
public:
using Message::Message;
MethodReply send() const;
MethodReply createReply() const;
MethodReply createErrorReply(const sdbus::Error& error) const;
};
class MethodReply : public Message
{
public:
using Message::Message;
void send() const;
};
class Signal : public Message
{
public:
using Message::Message;
void send() const;
};
template <typename _Element>
inline Message& operator<<(Message& msg, const std::vector<_Element>& items)
{