class EventPublisherImpl final : public EventPublisher::Server {
protected:
::kj::Promise<void> subscribe(SubscribeContext context) {
cout << "subscribe request received" << endl;
m_subscribers.add(context.getParams().getSubscriber());
return kj::READY_NOW;
}
::kj::Promise<void> unsubscribe(UnsubscribeContext context) {
cout << "unsubscribe request received" << endl;
auto unsub = context.getParams().getSubscriber();
// I want to remove usub from subscribers like m_subscribers[unsub].erase();
// But I couldn't find a method to compare
// "EventPublisher::Subscriber::Client" such as == operator or public method
// to distinguish the client.
//
// One solution is having an additional argument(id) for this purpose but
// that requres additional management of ID.
// subscribe @0 (subscriber: Subscriber, id: Int32) -> (result: Int32);
// unsubscribe @1 (id: Int32) -> (result: Int32);
// what I can do is erase everything but this is not my goal
m_subscribers.clear();
return kj::READY_NOW;
}
private:
kj::Vector<EventPublisher::Subscriber::Client> m_subscribers;
};