TNB Library
TnbAbstractReport.h
[詳解]
1#pragma once
16#include "TnbReport.h"
17#include "TnbTickCount.h"
18#include "TnbDump.h"
19#include "TnbReportViewer.h"
20
21
22
23//TNB Library
24namespace TNB
25{
26
27
28
44class CAbstractReport : public IReport, public CSyncSection
45{
46 DEFSUPER(IReport);
47public:
48
54 CAbstractReport(DWORD dwInterfaceId = 0)
55 : m_dwInterfaceId(dwInterfaceId), m_iIdleEventInterval(0), m_piListner(NULL)
56 {
57 }
58
60 virtual ~CAbstractReport(void)
61 {
62 }
63
69 virtual void SetListener(IReport::IListener* piCommListener = NULL)
70 {
71 m_piListner = piCommListener;
72 }
73
78 virtual DWORD GetInterfaceId(void) const
79 {
80 return m_dwInterfaceId;
81 }
82
90 virtual void SetIdleEventMode(int iInterval = 0)
91 {
92 if ( iInterval > 0 )
93 {
94 m_iIdleEventInterval = iInterval;
95 }
96 else
97 {
98 m_iIdleEventInterval = 0;
99 }
100 }
101
107 int GetIdleInterval(void) const
108 {
109 return m_iIdleEventInterval;
110 }
111
117 virtual void Purge(void)
118 {
119 }
120
127 bool WaitConnect(DWORD dwTime) const
128 {
129 if ( ! IsAlive() )
130 {
131 return false;
132 }
133 CTickCount tick;
134 while ( ! tick.IsPassed(dwTime) )
135 {
136 if ( IsConnect() )
137 {
138 return true;
139 }
140 ::Sleep(10);
141 }
142 return IsConnect();
143 }
144
151 {
152 m_viewer.Invalid();
153 }
154
155protected:
156
163 void m_OnSend(size_t sizeData, LPCVOID lpcvData)
164 {
165 TRACE1("%s:Send\n", GetReportName());
166 #ifndef _TnbREPORT_Dump_OFF
167 DebugDump(sizeData, lpcvData);
168 #endif
169 m_ToViewer(sizeData, lpcvData, TNBVIW_DIRE_SEND | GetReportID());
170 }
171
178 bool m_OnEvent(const CReportEvent& ev)
179 {
180 if ( ev.HasData() )
181 {
182 //開発用TRACE
183 TRACE1("%s:Receive\n", GetReportName());
184 #ifndef _TnbREPORT_Dump_OFF
185 DebugDump(ev.GetDataSize(), ev.GetData());
186 #endif
187 }
188 if ( ev.HasData() )
189 {
190 m_ToViewer(ev.GetDataSize(), ev.GetData(), TNBVIW_DIRE_RECV | GetReportID());
191 }
192 else if ( ev.GetEvent() != ReportEvent_Idle )
193 {
194 m_ToViewer(ev.GetEventString(), GetReportID());
195 }
196 bool boRc = true;
197 if ( m_piListner != NULL )
198 {
199 EXCLUSIVE(this);
200 boRc = m_piListner->OnReportEvent(ev);
201 }
202 return boRc;
203 }
204
210 void ToViewer(size_t sizeData, LPCVOID lpcvData)
211 {
212 m_ToViewer(sizeData, lpcvData, TNBVIW_TYPE_RAWTEXT | GetReportID());
213 }
214
219 void ToViewer(LPCTSTR lpszText)
220 {
221 m_ToViewer(lpszText, TNBVIW_TYPE_RAWTEXT | GetReportID());
222 }
223
224private:
225 // [出力] ダンプ出力.
226 void m_ToViewer(size_t sizeData, LPCVOID lpcvData, DWORD cookie)
227 {
228 m_viewer.ToViewer(sizeData, lpcvData, cookie);
229 }
230 // [出力] 文字列出力.
231 void m_ToViewer(LPCTSTR lpszText, DWORD cookie)
232 {
233 m_viewer.ToViewer(lpszText, cookie);
234 }
235 CReportViewer m_viewer;
236 DWORD m_dwInterfaceId;
237 IListener* m_piListner;
238 int m_iIdleEventInterval;
239};
240
241
242
243}; // TNB
開発用に、メモリの状態を文字列にする関数があります。
レポートビュワー関係のヘッダ
通信報告関係のヘッダ
経過時間管理関係のヘッダ
通信アクセス抽象クラス
bool WaitConnect(DWORD dwTime) const
[確認] 接続待ち
int GetIdleInterval(void) const
[取得] アイドルイベント間隔取得
virtual void SetIdleEventMode(int iInterval=0)
[設定] アイドルイベント設定
CAbstractReport(DWORD dwInterfaceId=0)
コンストラクタ
bool m_OnEvent(const CReportEvent &ev)
[内部] コールバック通知実行
virtual void SetListener(IReport::IListener *piCommListener=NULL)
[登録] 共通 Listner 登録.
void DisableReportViewer(void)
[設定] レポートビュワー停止.
void ToViewer(LPCTSTR lpszText)
[出力] 文字列出力.
virtual void Purge(void)
[設定] パージ.
void ToViewer(size_t sizeData, LPCVOID lpcvData)
[出力] ダンプ出力.
virtual ~CAbstractReport(void)
デストラクタ
virtual DWORD GetInterfaceId(void) const
[取得] インターフェースID取得
void m_OnSend(size_t sizeData, LPCVOID lpcvData)
[内部] 送信情報通知
通信受信イベント管理クラス
Definition: TnbReport.h:70
CStr GetEventString(void) const
[取得] イベントコード文字列取得
Definition: TnbReport.h:179
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
TNBレポートビュワー
void ToViewer(size_t sizeData, LPCVOID lpcvData, DWORD cookie)
[出力] ダンプ出力.
void Invalid(void)
[設定] 無効化.
Section排他管理クラス
Definition: TnbSync.h:125
経過時間管理クラス
Definition: TnbTickCount.h:57
bool IsPassed(DWORD dwTime) const
[確認] 経過確認.
Definition: TnbTickCount.h:114
void DebugDump(size_t size, const void *pData, bool canAllDump=false, size_t width=16, bool isUnicode=false)
[作成] バイナリダンプ.
Definition: TnbDump.h:153
#define EXCLUSIVE(CLS)
簡易排他制御マクロ.
Definition: TnbSync.h:788
TNB Library
Definition: TnbDoxyTitle.txt:2
@ ReportEvent_Idle
アイドル.
Definition: TnbReport.h:30
通信のリスナーインターフェース
Definition: TnbReport.h:243
virtual bool OnReportEvent(const CReportEvent &ev)=0
[通知] イベント発生.
通信アクセスインターフェース
Definition: TnbReport.h:227
virtual bool IsAlive(void) const =0
[確認] Aliveチェック.
virtual CStr GetReportName(void) const =0
[取得] コミュニケーション名.
virtual bool IsConnect(void) const =0
[確認] 接続チェック
virtual DWORD GetReportID(void) const =0
[取得] コミュニケーションID.