154 m_in.m_pListener = pListener;
155 m_in.m_pReport = pReport;
156 if ( m_in.m_pReport != NULL )
158 m_in.m_pReport->SetListener(&m_in);
165 if ( m_in.m_pReport != NULL )
167 m_in.m_pReport->SetListener(NULL);
168 m_in.m_pListener = NULL;
169 m_in.m_pReport = NULL;
182 m_in.m_aliveTime = time;
183 m_in.m_tearminalTime = DWORD_MAX;
194 m_in.m_tearminalTime = time;
195 m_in.m_aliveTime = DWORD_MAX;
206 if ( m_in.m_pReport != NULL )
208 return m_in.m_pReport->IsAlive();
220 if ( m_in.m_pReport != NULL )
222 return m_in.m_pReport->IsConnect();
235 bool Send(
size_t dataSize, LPCVOID lpcData)
237 if ( m_in.m_pReport != NULL )
239 return m_in.m_pReport->Send(dataSize, lpcData);
250 m_in.m_queueData.RemoveAll();
259 return m_in.m_queueData.GetFreeSize();
268 return m_in.m_pReport;
277 return m_in.m_pReport;
287 CInner(
int queueSize = 10000)
288 : m_queueData(queueSize), m_pListener(NULL), m_pReport(NULL), m_aliveTime(DWORD_MAX), m_tearminalTime(DWORD_MAX)
294 if ( m_pListener == NULL )
306 size_t freeSize = m_queueData.GetFreeSize();
309 ASSERT0(
false,
"CQueueingReporter",
"キューがあふれました。" );
317 m_queueData.AddElements(l, B);
318 if ( m_tearminalTime == DWORD_MAX )
324 m_pReport->SetIdleEventMode(m_tearminalTime);
336 m_queueData.RemoveAll();
339 if ( m_aliveTime != DWORD_MAX )
343 if ( m_queueData.TakeElements(1, &b) == 1 )
345 m_pListener->OnReportDustyData(b);
347 m_pReport->SetIdleEventMode(0);
350 if ( m_tearminalTime != DWORD_MAX )
353 m_pReport->SetIdleEventMode(0);
359 return m_pListener->OnReportEvent(ev);
363 IParentListener* m_pListener;
366 DWORD m_tearminalTime;
370 void m_OnDeseri(
bool boIsLast)
372 while ( ! m_queueData.
IsEmpty() )
374 size_t r = m_pListener->OnReportData(boIsLast, m_queueData);
383 if ( m_aliveTime != DWORD_MAX )
void Purge(void)
[消去] キューバッファクリア.
void SetEnvironment(IReport *pReport, IListener *pListener)
[設定] 環境設定
void SetTearminalTime(DWORD time=DWORD_MAX)
[設定] 終端時間設定.
bool Send(size_t dataSize, LPCVOID lpcData)
[送信] データ送信.
void SetAliveTime(DWORD time=DWORD_MAX)
[設定] キュー有効時間設定.
~CQueueingReporter(void)
デストラクタ
bool IsAlive(void) const
[確認] Aliveチェック.
void ResetEnvironment(void)
[設定] 環境リセット
bool IsConnect(void) const
[確認] 接続チェック
size_t GetQueueFreeSize(void) const
[取得] キュー空きサイズ取得.
CQueueingReporter(int iQueueSize=10000)
コンストラクタ
const IReport * ReferReport(void) const
[取得] レポータ取得
IReport * ReferReport(void)
[取得] レポータ取得
size_t GetDataSize(void) const
[取得] データ長取得
const BYTE * GetData(void) const
[取得] データアドレス取得
EReportEvent GetEvent(void) const
[取得] イベントコード取得
bool HasData(void) const
[確認] Dataを持っているか
virtual bool RemoveAll(void)
[削除] データ全削除.
#define EXCLUSIVE(CLS)
簡易排他制御マクロ.
@ ReportEvent_Disconnect
切断.
virtual size_t OnReportData(bool boIsLast, const IConstCollectionT< BYTE > &c)=0
[通知] データ受信通知
virtual ~IListener(void)
デストラクタ
virtual bool OnReportEvent(const CReportEvent &ev)=0
[通知] イベント発生通知
virtual void OnReportDustyData(BYTE b)
[通知] ゴミデータ化通知.
bool IsEmpty(void) const
[確認] 要素の有無確認.
virtual size_t EraseElements(size_t size)
[削除] 要素削除.
virtual void SetIdleEventMode(int iInterval=0)=0
[設定] アイドルイベント設定