diff options
| author | Roman Smrž <roman.smrz@seznam.cz> | 2021-01-06 21:52:53 +0100 | 
|---|---|---|
| committer | Roman Smrž <roman.smrz@seznam.cz> | 2021-01-06 21:52:53 +0100 | 
| commit | 381b6505b5afaacc9194168697f6bc93c43d2775 (patch) | |
| tree | 1190917b6ee40d6f4a74bf724466b3062ab86f4f /src | |
| parent | 96eb8471d11667a56466a6f701d1d23fa64c2225 (diff) | |
Access services via Server object
Diffstat (limited to 'src')
| -rw-r--r-- | src/message.cpp | 12 | ||||
| -rw-r--r-- | src/message.h | 4 | ||||
| -rw-r--r-- | src/network.cpp | 10 | 
3 files changed, 18 insertions, 8 deletions
| diff --git a/src/message.cpp b/src/message.cpp index 354703e..601bc39 100644 --- a/src/message.cpp +++ b/src/message.cpp @@ -202,10 +202,10 @@ const Identity & DirectMessageThread::peer() const  } -vector<DirectMessageService::ThreadWatcher> DirectMessageService::Priv::watchers; -mutex DirectMessageService::Priv::watcherLock; +DirectMessageService::DirectMessageService(): +	p(new Priv) +{} -DirectMessageService::DirectMessageService() = default;  DirectMessageService::~DirectMessageService() = default;  UUID DirectMessageService::uuid() const @@ -229,14 +229,14 @@ void DirectMessageService::handle(Context & ctx) const  	lock.unlock(); -	for (const auto & w : Priv::watchers) +	for (const auto & w : p->watchers)  		w(dmt, -1, -1);  }  void DirectMessageService::onUpdate(ThreadWatcher w)  { -	scoped_lock l(Priv::watcherLock); -	Priv::watchers.push_back(w); +	scoped_lock l(p->watcherLock); +	p->watchers.push_back(w);  }  DirectMessageThread DirectMessageService::thread(const Identity & peer) diff --git a/src/message.h b/src/message.h index c4a3549..efdec8f 100644 --- a/src/message.h +++ b/src/message.h @@ -51,8 +51,8 @@ struct DirectMessageThread::Iterator::Priv  struct DirectMessageService::Priv  { -	static vector<ThreadWatcher> watchers; -	static mutex watcherLock; +	vector<ThreadWatcher> watchers; +	mutex watcherLock;  };  } diff --git a/src/network.cpp b/src/network.cpp index 91f1923..4b79dcb 100644 --- a/src/network.cpp +++ b/src/network.cpp @@ -6,6 +6,7 @@  #include <algorithm>  #include <cstring>  #include <iostream> +#include <stdexcept>  #include <arpa/inet.h>  #include <ifaddrs.h> @@ -13,6 +14,7 @@  #include <unistd.h>  using std::holds_alternative; +using std::runtime_error;  using std::scoped_lock;  using std::to_string;  using std::unique_lock; @@ -26,6 +28,14 @@ Server::Server(const Identity & self, vector<unique_ptr<Service>> && svcs):  Server::~Server() = default; +Service & Server::svcHelper(const std::type_info & tinfo) +{ +	for (auto & s : p->services) +		if (typeid(*s) == tinfo) +			return *s; +	throw runtime_error("service not found"); +} +  PeerList & Server::peerList() const  {  	return p->plist; |