TNB Library
TnbReportWatchAdapter.h
[詳解]
1#pragma once
13#include "TnbReport.h"
14#include "TnbSync.h"
15
16
17
18//TNB Library
19namespace TNB
20{
21
22
23
74{
75 DEFSUPER(IReport);
76public:
77
90 struct ILogger
91 {
93 enum EKind
94 {
98 };
99
101 virtual ~ILogger(void) {}
102
109
117 virtual void OnReportWatchDataLog(EKind kind, size_t dataSize, const BYTE* pData) = 0;
118 };
119
120
121 //-----------------------------
122
123
129 {
130 ASSERT( pRep != NULL ); //インスタンスを指定してください
131 m_pReporter = pRep;
132 m_in.pListener = NULL;
133 m_in.pLogger = NULL;
134 }
135
143 {
144 if ( ! IsAlive() && pRep != NULL )
145 {
146 m_pReporter = pRep;
147 return true;
148 }
149 return false;
150 }
151
156 void SetLogger(ILogger* pLogger)
157 {
158 m_in.pLogger = pLogger;
159 }
160
166 virtual CStr GetReportName(void) const
167 {
168 return m_pReporter->GetReportName();
169 }
170
177 virtual DWORD GetReportID(void) const
178 {
179 return m_pReporter->GetReportID();
180 }
181
187 virtual void SetListener(IReport::IListener* piCommListener = NULL)
188 {
189 m_in.pListener = piCommListener;
190 }
191
196 virtual DWORD GetInterfaceId(void) const
197 {
198 return m_pReporter->GetInterfaceId();
199 }
200
208 virtual void SetIdleEventMode(int iInterval = 0)
209 {
210 m_pReporter->SetIdleEventMode(iInterval);
211 }
212
219 virtual bool Start(void)
220 {
221 m_pReporter->SetListener(&m_in);
222 return m_pReporter->Start();
223 }
224
229 virtual void Stop(void)
230 {
231 m_pReporter->Stop();
232 }
233
240 virtual bool IsAlive(void) const
241 {
242 return m_pReporter->IsAlive();
243 }
244
250 virtual bool IsConnect(void) const
251 {
252 return m_pReporter->IsConnect();
253 }
254
262 virtual bool Send(size_t dataSize, LPCVOID lpcData)
263 {
264 bool r = m_pReporter->Send(dataSize, lpcData);
265 if ( m_in.pLogger != NULL )
266 {
267 EXCLUSIVE( &m_in.sync );
268 m_in.pLogger->OnReportWatchDataLog((r ? (ILogger::Kind_Send) : (ILogger::Kind_SendError)), dataSize, static_cast<const BYTE*>(lpcData));
269 }
270 return r;
271 }
272
277 virtual void Purge(void)
278 {
279 m_pReporter->Purge();
280 }
281
282private:
284 class CInner : public IReport::IListener
285 {
286 public:
287 IReport::IListener* pListener; // リスナー
288 ILogger* pLogger; // ロガー
289 CSyncSection sync; // 同期
290 //[通知] イベント発生
291 virtual bool OnReportEvent(const CReportEvent& ev)
292 {
293 if ( pListener != NULL )
294 {
295 if ( pLogger != NULL )
296 {
297 EXCLUSIVE( &sync );
298 if ( ev.HasData() )
299 {
300 pLogger->OnReportWatchDataLog(ILogger::Kind_Received, ev.GetDataSize(), ev.GetData());
301 }
302 else
303 {
304 pLogger->OnReportWatchEventLog(ev.GetEvent());
305 }
306 }
307 return pListener->OnReportEvent(ev);
308 }
309 return true;
310 }
311 };
312 CInner m_in;
313 IReport* m_pReporter;
314};
315
316
317
318};
通信報告関係のヘッダ
同期処理関係のヘッダ
[ETC] コピー不可能スーパークラス.
Definition: TnbDef.h:599
通信受信イベント管理クラス
Definition: TnbReport.h:70
size_t GetDataSize(void) const
[取得] データ長取得
Definition: TnbReport.h:139
const BYTE * GetData(void) const
[取得] データアドレス取得
Definition: TnbReport.h:148
EReportEvent GetEvent(void) const
[取得] イベントコード取得
Definition: TnbReport.h:157
bool HasData(void) const
[確認] Dataを持っているか
Definition: TnbReport.h:120
通信報告監視アダプタ
virtual void Stop(void)
[操作] 停止.
virtual void SetIdleEventMode(int iInterval=0)
[設定] アイドルイベント設定
virtual CStr GetReportName(void) const
[取得] コミュニケーション名.
bool SetReporter(IReport *pRep)
[登録] レポーター登録.
virtual DWORD GetReportID(void) const
[取得] コミュニケーションID.
virtual void SetListener(IReport::IListener *piCommListener=NULL)
[登録] 共通Listner登録.
virtual bool Send(size_t dataSize, LPCVOID lpcData)
[送信] データ送信
virtual void Purge(void)
[設定] パージ.
void SetLogger(ILogger *pLogger)
[登録] ロガー登録.
virtual bool IsConnect(void) const
[確認] 接続チェック
virtual bool IsAlive(void) const
[確認] Aliveチェック.
CReportWatchAdapter(IReport *pRep)
コンストラクタ.
virtual DWORD GetInterfaceId(void) const
[取得] インターフェースID取得
virtual bool Start(void)
[操作] 開始.
Section排他管理クラス
Definition: TnbSync.h:125
#define EXCLUSIVE(CLS)
簡易排他制御マクロ.
Definition: TnbSync.h:788
TNB Library
Definition: TnbDoxyTitle.txt:2
EReportEvent
通信受信イベント種.
Definition: TnbReport.h:28
通信報告監視アダプタのロガーインターフェース
virtual void OnReportWatchDataLog(EKind kind, size_t dataSize, const BYTE *pData)=0
[通知] データ通信発生.
@ Kind_SendError
送信エラー(実際は送信されていない)
virtual ~ILogger(void)
デストラクタ
virtual void OnReportWatchEventLog(EReportEvent ev)=0
[通知] イベント発生.
通信のリスナーインターフェース
Definition: TnbReport.h:243
virtual bool OnReportEvent(const CReportEvent &ev)=0
[通知] イベント発生.
通信アクセスインターフェース
Definition: TnbReport.h:227
virtual DWORD GetInterfaceId(void) const =0
[取得] インターフェースID取得
virtual bool Send(size_t dataSize, LPCVOID lpcData)=0
[送信] データ送信
virtual bool IsAlive(void) const =0
[確認] Aliveチェック.
virtual bool Start(void)=0
[操作] 開始.
virtual void Stop(void)=0
[操作] 停止.
virtual CStr GetReportName(void) const =0
[取得] コミュニケーション名.
virtual void SetListener(IReport::IListener *piCommListener=NULL)=0
[登録] 共通Listner登録.
virtual void SetIdleEventMode(int iInterval=0)=0
[設定] アイドルイベント設定
virtual bool IsConnect(void) const =0
[確認] 接続チェック
virtual DWORD GetReportID(void) const =0
[取得] コミュニケーションID.
virtual void Purge(void)=0
[設定] パージ.