/* * Copyright (c) 2021, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include namespace IPC { template class MultiServer { public: static ErrorOr> try_create(NonnullRefPtr server) { return adopt_nonnull_own_or_enomem(new (nothrow) MultiServer(move(server))); } Function on_new_client; private: explicit MultiServer(NonnullRefPtr server) : m_server(move(server)) { m_server->on_accept = [&](auto client_socket) { auto client_id = ++m_next_client_id; auto client = IPC::new_client_connection(make(move(client_socket)), client_id); if (on_new_client) on_new_client(*client); }; } int m_next_client_id { 0 }; RefPtr m_server; }; }