#include "ipc_manager.h" IpcManager* IpcManager::instance_ = nullptr; // static IpcManager* IpcManager::instance() { return instance_; } // static void IpcManager::CreateInstance(MultiQueueWaiter* waiter) { instance_ = new IpcManager(waiter); } ThreadedQueue>* IpcManager::GetThreadedQueue(Destination destination) { return destination == Destination::Client ? threaded_queue_for_client_.get() : threaded_queue_for_server_.get(); } void IpcManager::SendOutMessageToClient(IpcId id, lsBaseOutMessage& response) { std::ostringstream sstream; response.Write(sstream); auto out = MakeUnique(); out->content = sstream.str(); out->original_ipc_id = id; GetThreadedQueue(Destination::Client)->Enqueue(std::move(out)); } void IpcManager::SendMessage(Destination destination, std::unique_ptr message) { GetThreadedQueue(destination)->Enqueue(std::move(message)); } std::vector> IpcManager::GetMessages(Destination destination) { return GetThreadedQueue(destination)->DequeueAll(); } IpcManager::IpcManager(MultiQueueWaiter* waiter) { threaded_queue_for_client_ = MakeUnique>>(waiter); threaded_queue_for_server_ = MakeUnique>>(waiter); }