mirror of
https://github.com/badaix/snapcast.git
synced 2025-05-19 03:56:14 +02:00
requestMsg
git-svn-id: svn://elaine/murooma/trunk@267 d8a302eb-03bc-478d-80e4-98257eca68ef
This commit is contained in:
parent
444ec9b4ee
commit
19e77f0f20
7 changed files with 170 additions and 60 deletions
|
@ -20,18 +20,10 @@ class SocketConnection;
|
|||
|
||||
struct PendingRequest
|
||||
{
|
||||
PendingRequest(uint16_t reqId) : id(reqId), response(NULL), buffer(NULL) {};
|
||||
~PendingRequest()
|
||||
{
|
||||
if (response != NULL);
|
||||
delete response;
|
||||
if (buffer != NULL)
|
||||
free(buffer);
|
||||
}
|
||||
PendingRequest(uint16_t reqId) : id(reqId), response(NULL) {};
|
||||
|
||||
uint16_t id;
|
||||
BaseMessage* response;
|
||||
char* buffer;
|
||||
std::shared_ptr<SerializedMessage> response;
|
||||
std::condition_variable cv;
|
||||
};
|
||||
|
||||
|
@ -51,7 +43,18 @@ public:
|
|||
virtual void start();
|
||||
virtual void stop();
|
||||
virtual bool send(BaseMessage* _message);
|
||||
virtual std::shared_ptr<PendingRequest> sendRequest(BaseMessage* message, size_t timeout);
|
||||
virtual std::shared_ptr<SerializedMessage> sendRequest(BaseMessage* message, size_t timeout);
|
||||
|
||||
template <typename T>
|
||||
std::shared_ptr<T> sendReq(BaseMessage* message, size_t timeout)
|
||||
{
|
||||
std::shared_ptr<SerializedMessage> reply = sendRequest(message, timeout);
|
||||
if (!reply)
|
||||
return NULL;
|
||||
std::shared_ptr<T> msg(new T);
|
||||
msg->deserialize(reply->message, reply->buffer);
|
||||
return msg;
|
||||
}
|
||||
|
||||
virtual bool active()
|
||||
{
|
||||
|
@ -79,7 +82,8 @@ protected:
|
|||
tcp::resolver::iterator iterator;
|
||||
std::thread* receiverThread;
|
||||
mutable std::mutex mutex_;
|
||||
std::set<std::shared_ptr<PendingRequest>> pendingRequests;
|
||||
std::mutex m;
|
||||
std::set<std::shared_ptr<PendingRequest>> pendingRequests;
|
||||
uint16_t reqId;
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue