/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: AuRPCServer.hpp Date: 2022-6-29 Author: Reece ***/ #pragma once struct AuRPCRequest; struct AuRPCServerChannel; struct AuRPCServer : AuIRPCServer { bool Init(AuRPC* parent, AuAsync::WorkerPId_t worker); bool RegisterService(const AuSPtr &service) override; void BroadcastMessage(const AuMemoryViewRead &view) override; AuList> GetClients() override; void SetCallbacks(const AuSPtr &pCallbacks) override; AuString ExportToString() override; AuSPtr ToPrimaryChannel(); AuSPtr NewChannel(bool bIsPrimary); void Dispatch(AuRPCServerChannel *channel, const AuSPtr &request, AuByteBuffer *buffer); private: friend struct AuRPCServerChannel; friend struct AuRPCPipe; AuRPC* parent; AuSPtr channel; AuAsync::WorkerPId_t worker; AuRWLock lock; AuHashMap> serviceTable; AuSPtr pCallbacks; };