hl2sdk/game/shared/tf/tf_gc_shared.cpp
2025-02-19 18:36:16 -05:00

71 lines
2.0 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
#include "cbase.h"
#include "tf_gc_shared.h"
//-----------------------------------------------------------------------------
void CReliableMessageQueue::Enqueue( IJobReliableMessage *pReliable )
{
pReliable->OnAddedToQueue( this );
if ( !m_pCurrentConfirmJob )
{
m_pCurrentConfirmJob = pReliable;
pReliable->StartJobDelayed( nullptr );
}
else
{
// Queue, confirm jobs will kick next in queue as necessary
m_queuePendingConfirmJobs.Insert( pReliable );
}
}
//-----------------------------------------------------------------------------
int CReliableMessageQueue::NumPendingMessages() const
{
Assert( !m_queuePendingConfirmJobs.Count() || m_pCurrentConfirmJob );
return ( m_pCurrentConfirmJob ? 1 : 0 ) + m_queuePendingConfirmJobs.Count();
}
//-----------------------------------------------------------------------------
void CReliableMessageQueue::OnReliableMessageStalled( IJobReliableMessage *pReliable )
{
if ( m_pCurrentConfirmJob != pReliable )
{
AssertMsg( m_pCurrentConfirmJob == pReliable, "OnReliableMessageStalled from non-current message, is bad" );
return;
}
m_bCurrentMessageStalled = true;
}
//-----------------------------------------------------------------------------
void CReliableMessageQueue::OnReliableMessageComplete( IJobReliableMessage *pReliable )
{
if ( m_pCurrentConfirmJob != pReliable )
{
AssertMsg( m_pCurrentConfirmJob == pReliable,
"OnReliableMessageComplete from a job that isn't head of queue, something very wrong" );
return;
}
m_bCurrentMessageStalled = false;
if ( m_queuePendingConfirmJobs.Count() )
{
// Kick off next job
m_pCurrentConfirmJob = m_queuePendingConfirmJobs.RemoveAtHead();
m_pCurrentConfirmJob->StartJob( nullptr );
}
else
{
m_pCurrentConfirmJob = nullptr;
}
}
//-----------------------------------------------------------------------------
const IJobReliableMessage *CReliableMessageQueue::CurrentMessage() const
{
return static_cast< const IJobReliableMessage *>( m_pCurrentConfirmJob );
}