diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2025-06-22 16:14:17 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2025-06-22 16:14:17 +0800 |
| commit | b075eb7c98e45972b2ff79048cfde8f1469b00c7 (patch) | |
| tree | 9958a14b1377a878cc4ba202dd4b25d2b7d3b9ac /src | |
| parent | b048a36cda2cf8359bf689c2e6825fc30d0277a5 (diff) | |
fix(server/clients): async initialization
API: newClient no longer take any args
API: manual isValid() check is needed to interact with client now
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/client.cpp | 2 | ||||
| -rw-r--r-- | src/server/clients.cpp | 4 |
2 files changed, 4 insertions, 2 deletions
diff --git a/src/server/client.cpp b/src/server/client.cpp index e84a654..aa2cdd1 100644 --- a/src/server/client.cpp +++ b/src/server/client.cpp @@ -23,7 +23,9 @@ Client::Client(SP<Server> server, SP<Clients> clients, bool track, bool oneShot) throw std::runtime_error("server:client: ClientManager doesn't exist"); if (m_wpServer.expired()) throw std::runtime_error("server:client: Server doesn't exist"); +} +void Client::init() { m_sockfd = std::make_shared<LibSock::CFileDescriptor>(accept(m_wpServer.lock()->getSocket()->get(), reinterpret_cast<sockaddr *>(&m_addr), &m_addrLen)); // if this is in the init list, it will run before // m_addrLen, so it won't work :/ diff --git a/src/server/clients.cpp b/src/server/clients.cpp index a274224..710f813 100644 --- a/src/server/clients.cpp +++ b/src/server/clients.cpp @@ -58,9 +58,9 @@ Clients::~Clients() { vpClients.erase(std::remove_if(vpClients.begin(), vpClients.end(), [this](const WP<Clients> &wptr) { return !wptr.owner_before(m_self) && !m_self.owner_before(wptr); }), vpClients.end()); } -SP<Client> Clients::newClient(std::function<void(const WP<Client> &)> loopFunc) { +SP<Client> Clients::newClient() { SP client = SP<Client>(new Client(m_wpServer.lock(), shared_from_this())); - auto &instance = m_vClients.emplace_back(std::jthread([&client, &loopFunc]() { loopFunc(client); }), client); + auto &instance = m_vClients.emplace_back(std::jthread([&client]() { client->init(); }), client); instance.second->m_self = std::weak_ptr<Client>(instance.second); return client; } |
