mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2025-12-11 16:18:41 +00:00
71 lines
2.0 KiB
C++
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 );
|
|
}
|