Files
Sun1602/Server/GameServer/Npcai/AIMessageQueue.h
T
2022-10-26 12:25:11 +08:00

77 lines
1.3 KiB
C++

#ifndef _AIMESSAGEQUEUE_H_
#define _AIMESSAGEQUEUE_H_
#include <RingBuffer.h>
struct AI_MSG;
class AIMessageQueue
{
public:
AIMessageQueue(DWORD dwSize)
{
m_pAIMessageBuffer = new util::RingBuffer;
m_pAIMessageBuffer->InitBuffer( dwSize );
}
AIMessageQueue()
{
m_pAIMessageBuffer = new util::RingBuffer;
m_pAIMessageBuffer->InitBuffer( RINGBUFFER_SIZE );
}
~AIMessageQueue()
{
if( m_pAIMessageBuffer )
{
m_pAIMessageBuffer->ReleaseBuffer();
}
SAFE_DELETE( m_pAIMessageBuffer );
}
inline VOID Clear()
{
m_pAIMessageBuffer->ResetBuffer();
}
inline DWORD GetOccupiedSize()
{
return m_pAIMessageBuffer->GetOccupiedSize();
}
inline VOID SendAIMessage( AI_MSG *pMsg, WORD wSize, DWORD dwDelay = 0 )
{
pMsg->wSize = wSize;
pMsg->dwDeliveryTick = GetTickCount() + dwDelay;
m_pAIMessageBuffer->Put( (BYTE*)pMsg, wSize );
}
// dwSize에 사이즈를 얻어내고 데이터 시작 포인터를 리턴한다.
inline BYTE* RecvAIMessage( WORD &wSize )
{
if( !m_pAIMessageBuffer->Peek( (BYTE*)&wSize, sizeof(WORD) ) )
{
return NULL;
}
return m_pAIMessageBuffer->GetFrontPtr();
}
inline VOID Completion( WORD wSize )
{
m_pAIMessageBuffer->Get( NULL, wSize ) ;
}
private:
enum { RINGBUFFER_SIZE = 500 };
util::RingBuffer * m_pAIMessageBuffer;
};
#endif