std::shared_ptr<Client> ClientRegistry::MakeClient(const std::string& guid) { auto client = std::make_shared<Client>(guid); m_clients[guid] = client; std::weak_ptr<Client> weakClient(client); client->OnAssignNetId.Connect([=]() { m_clientsByNetId[weakClient.lock()->GetNetId()] = weakClient; }); client->OnAssignPeer.Connect([=]() { m_clientsByPeer[weakClient.lock()->GetPeer()] = weakClient; if (!g_oneSyncVar->GetValue()) { return; } for (int slot = m_clientsBySlotId.size() - 1; slot >= 0; slot--) { // 31 is a special case if (slot == 31) { continue; } if (m_clientsBySlotId[slot].expired()) { client->SetSlotId(slot); m_clientsBySlotId[slot] = weakClient; break; } } }); client->OnAssignTcpEndPoint.Connect([=]() { m_clientsByTcpEndPoint[weakClient.lock()->GetTcpEndPoint()] = weakClient; }); client->OnAssignConnectionToken.Connect([=]() { m_clientsByConnectionToken[weakClient.lock()->GetConnectionToken()] = weakClient; }); OnClientCreated(client.get()); return client; }
CSM_Pkcs11Slot::CSM_Pkcs11Slot(CK_SLOT_ID slotId) { Clear(); SetSlotId(slotId); }