From: <no...@us...> - 2003-06-22 08:44:05
|
Log Message: ----------- Update for queue Modified Files: -------------- /cvsroot/decaldev/source/DecalFilters: IdentifyQueue.h IdentifyQueue.cpp Revision Data ------------- Index: IdentifyQueue.h =================================================================== RCS file: /cvsroot/decaldev/source/DecalFilters/IdentifyQueue.h,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- IdentifyQueue.h 20 Jun 2003 10:48:00 -0000 1.6 +++ IdentifyQueue.h 22 Jun 2003 08:44:04 -0000 1.7 @@ -33,6 +33,7 @@ { m_bWaiting = false; m_lAttempts = 0; + m_lLastManualAttempt = 0; } DECLARE_REGISTRY_RESOURCEID(IDR_IDENTIFYQUEUE) @@ -53,14 +54,15 @@ IDContainer m_Queue; bool m_bWaiting; long m_lAttempts; + long m_lLastManualAttempt; // Id Func pointer - RequestPtr m_pRequest; + RequestPtr m_pfRequestFunc; - void DoGameEvent( IMessageIterator *pMembers ); - void DoIDItem( IMessageIterator *pMembers ); + void MsgGameEvent( IMessageIterator *pMembers ); + void MsgIDItem( IMessageIterator *pMembers ); - void Request(); + void Request(); public: // INetworkFilterImpl Index: IdentifyQueue.cpp =================================================================== RCS file: /cvsroot/decaldev/source/DecalFilters/IdentifyQueue.cpp,v retrieving revision 1.15 retrieving revision 1.16 diff -u -d -r1.15 -r1.16 --- IdentifyQueue.cpp 20 Jun 2003 12:37:12 -0000 1.15 +++ IdentifyQueue.cpp 22 Jun 2003 08:44:04 -0000 1.16 @@ -31,7 +31,7 @@ long lRequestIDMemloc; if( m_pHooks->QueryMemLoc( _bstr_t( "RequestID" ), &lRequestIDMemloc ) == S_OK ) { - m_pRequest = reinterpret_cast< RequestPtr >( lRequestIDMemloc ); + m_pfRequestFunc = reinterpret_cast< RequestPtr >( lRequestIDMemloc ); return S_OK; } } @@ -46,7 +46,7 @@ m_pDecal.Release(); m_pHooks.Release(); - m_pRequest = NULL; + m_pfRequestFunc = NULL; return S_OK; } @@ -61,7 +61,7 @@ switch( lType ) { - case msgGameEvent: DoGameEvent( pMembers ); break; + case msgGameEvent: MsgGameEvent( pMembers ); break; } if( m_Queue.empty() ) @@ -116,6 +116,8 @@ STDMETHODIMP CIdentifyQueue::ShortcircuitID( long lObjectID ) { + m_lLastManualAttempt = lObjectID; + if( !m_Queue.empty() ) { for( IDContainer::iterator pDeque = m_Queue.begin(); pDeque != m_Queue.end(); ++pDeque ) @@ -139,18 +141,18 @@ return S_OK; } -void CIdentifyQueue::DoGameEvent( IMessageIterator *pMembers ) +void CIdentifyQueue::MsgGameEvent( IMessageIterator *pMembers ) { long lEvent; pMembers->get_NextInt( _bstr_t( "event" ), &lEvent ); switch( lEvent ) { - case gevIDItem: DoIDItem( pMembers ); break; + case gevIDItem: MsgIDItem( pMembers ); break; } } -void CIdentifyQueue::DoIDItem( IMessageIterator *pMembers ) +void CIdentifyQueue::MsgIDItem( IMessageIterator *pMembers ) { if( m_Queue.empty() ) return; @@ -178,18 +180,28 @@ void CIdentifyQueue::Request() { - if( m_Queue.empty() ) - { - m_pRequest( 0 ); - return; - } - if( !m_bWaiting ) { - m_pRequest( m_Queue[0]->lObjectID ); + if( m_Queue.empty() ) + { + if( m_lLastManualAttempt != 0 ) + { + m_pfRequestFunc( m_lLastManualAttempt ); + m_bWaiting = true; + } + + else + m_pfRequestFunc( 0 ); + + return; + } + + IDStruct *pQueueBegin = *m_Queue.begin(); + + m_pfRequestFunc( pQueueBegin->lObjectID ); m_bWaiting = true; - if( m_Queue[0]->lObjectID == 0 ) + if( pQueueBegin->lObjectID == 0 ) { m_bWaiting = false; m_Queue.erase( m_Queue.begin() ); |