Exemplo n.º 1
0
	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;
	}
Exemplo n.º 2
0
CSM_Pkcs11Slot::CSM_Pkcs11Slot(CK_SLOT_ID slotId)
{
    Clear();

    SetSlotId(slotId);
}