mirror of
https://github.com/gnif/LookingGlass.git
synced 2026-08-22 15:11:31 +00:00
[idd] transport: centralize source identity
This commit is contained in:
@@ -22,16 +22,12 @@
|
|||||||
|
|
||||||
#include "input/IInputSink.h"
|
#include "input/IInputSink.h"
|
||||||
|
|
||||||
static bool SameSource(const SourceKey& left, const SourceKey& right)
|
|
||||||
{
|
|
||||||
return left.backend == right.backend && left.epoch == right.epoch &&
|
|
||||||
left.client == right.client && left.generation == right.generation;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool SameClient(const SourceKey& left, const SourceKey& right)
|
static bool SameClient(const SourceKey& left, const SourceKey& right)
|
||||||
{
|
{
|
||||||
return left.backend == right.backend && left.epoch == right.epoch &&
|
return
|
||||||
left.client == right.client;
|
left.backend == right.backend &&
|
||||||
|
left.epoch == right.epoch &&
|
||||||
|
left.client == right.client;
|
||||||
}
|
}
|
||||||
|
|
||||||
CInputHub::CInputHub()
|
CInputHub::CInputHub()
|
||||||
@@ -307,7 +303,7 @@ void CInputHub::CommitInteraction(
|
|||||||
const SourceKey& source, const InteractionPermit& permit)
|
const SourceKey& source, const InteractionPermit& permit)
|
||||||
{
|
{
|
||||||
if (!source.backend || !source.epoch || !source.client || !permit.serial ||
|
if (!source.backend || !source.epoch || !source.client || !permit.serial ||
|
||||||
!SameSource(source, permit.source))
|
source != permit.source)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
CSRWExclusiveLock lock(m_lock);
|
CSRWExclusiveLock lock(m_lock);
|
||||||
@@ -497,7 +493,7 @@ bool CInputHub::BindingPresent(const SourceKey& source) const
|
|||||||
|
|
||||||
bool CInputHub::OwnerValid(const SourceKey& source) const
|
bool CInputHub::OwnerValid(const SourceKey& source) const
|
||||||
{
|
{
|
||||||
return SourceValid(source) && SameSource(m_owner, source);
|
return SourceValid(source) && m_owner == source;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CInputHub::ClearInteraction()
|
void CInputHub::ClearInteraction()
|
||||||
@@ -558,8 +554,7 @@ InputTargetState CInputHub::GetState(const SourceKey& source)
|
|||||||
return result;
|
return result;
|
||||||
if (!m_owner.backend)
|
if (!m_owner.backend)
|
||||||
result.available = true;
|
result.available = true;
|
||||||
else if (source.client && source.generation &&
|
else if (source.client && source.generation && m_owner == source)
|
||||||
SameSource(m_owner, source))
|
|
||||||
{
|
{
|
||||||
result.available = true;
|
result.available = true;
|
||||||
result.owned = true;
|
result.owned = true;
|
||||||
@@ -600,7 +595,7 @@ InputResult CInputHub::Claim(const SourceKey& source)
|
|||||||
if (!CheckState())
|
if (!CheckState())
|
||||||
return InputResult::UNAVAILABLE;
|
return InputResult::UNAVAILABLE;
|
||||||
if (m_owner.backend)
|
if (m_owner.backend)
|
||||||
return SameSource(m_owner, source) ?
|
return m_owner == source ?
|
||||||
InputResult::ACCEPTED : InputResult::BUSY;
|
InputResult::ACCEPTED : InputResult::BUSY;
|
||||||
if (!m_sink->Reset() || m_sink->GetState() != m_sinkState)
|
if (!m_sink->Reset() || m_sink->GetState() != m_sinkState)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -45,13 +45,6 @@ CRecoveryHub::CRecoveryHub() :
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CRecoveryHub::SameSource(
|
|
||||||
const SourceKey& left, const SourceKey& right)
|
|
||||||
{
|
|
||||||
return left.backend == right.backend && left.epoch == right.epoch &&
|
|
||||||
left.client == right.client && left.generation == right.generation;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CRecoveryHub::SameEpoch(
|
bool CRecoveryHub::SameEpoch(
|
||||||
const SourceKey& source, BackendId backend, uint32_t epoch)
|
const SourceKey& source, BackendId backend, uint32_t epoch)
|
||||||
{
|
{
|
||||||
@@ -61,7 +54,7 @@ bool CRecoveryHub::SameEpoch(
|
|||||||
bool CRecoveryHub::SameRequest(const Request& request,
|
bool CRecoveryHub::SameRequest(const Request& request,
|
||||||
const SourceKey& source, uint64_t session, uint32_t serial, bool active)
|
const SourceKey& source, uint64_t session, uint32_t serial, bool active)
|
||||||
{
|
{
|
||||||
return SameSource(request.source, source) && request.session == session &&
|
return request.source == source && request.session == session &&
|
||||||
request.serial == serial && request.active == active;
|
request.serial == serial && request.active == active;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,7 +76,7 @@ unsigned CRecoveryHub::FindSourceLocked(const SourceKey& source) const
|
|||||||
{
|
{
|
||||||
for (unsigned i = 0; i < MAX_REQUESTS; ++i)
|
for (unsigned i = 0; i < MAX_REQUESTS; ++i)
|
||||||
if (m_requests[i].state != SlotState::FREE &&
|
if (m_requests[i].state != SlotState::FREE &&
|
||||||
SameSource(m_requests[i].source, source))
|
m_requests[i].source == source)
|
||||||
return i;
|
return i;
|
||||||
return MAX_REQUESTS;
|
return MAX_REQUESTS;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,7 +96,6 @@ private:
|
|||||||
bool m_knownValid = false;
|
bool m_knownValid = false;
|
||||||
bool m_monitorReady = false;
|
bool m_monitorReady = false;
|
||||||
|
|
||||||
static bool SameSource(const SourceKey& left, const SourceKey& right);
|
|
||||||
static bool SameEpoch(
|
static bool SameEpoch(
|
||||||
const SourceKey& source, BackendId backend, uint32_t epoch);
|
const SourceKey& source, BackendId backend, uint32_t epoch);
|
||||||
static bool SameRequest(const Request& request, const SourceKey& source,
|
static bool SameRequest(const Request& request, const SourceKey& source,
|
||||||
|
|||||||
@@ -40,6 +40,20 @@ struct SourceKey
|
|||||||
uint32_t generation = 0;
|
uint32_t generation = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inline bool operator==(const SourceKey& left, const SourceKey& right)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
left.backend == right.backend &&
|
||||||
|
left.epoch == right.epoch &&
|
||||||
|
left.client == right.client &&
|
||||||
|
left.generation == right.generation;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool operator!=(const SourceKey& left, const SourceKey& right)
|
||||||
|
{
|
||||||
|
return !(left == right);
|
||||||
|
}
|
||||||
|
|
||||||
enum class InteractionResult
|
enum class InteractionResult
|
||||||
{
|
{
|
||||||
ACCEPTED,
|
ACCEPTED,
|
||||||
|
|||||||
Reference in New Issue
Block a user