60 m_piCommunication = pComm;
61 m_lpbReceiveWork = NULL;
62 m_dwPollingTiming = 1;
63 m_boIsConnect =
false;
64 m_receivePacketMaxSize = E_ReceiveDataBufferSize;
65 m_hasOndemandStop =
false;
71 if ( m_lpbReceiveWork != NULL )
73 delete[] m_lpbReceiveWork;
74 m_lpbReceiveWork = NULL;
130 _super::SetIdleEventMode(iInterval);
144 m_dwPollingTiming = dwPollingTiming;
160 if ( m_piCommunication->
Open() )
168 if ( m_lpbReceiveWork != NULL )
170 delete[] m_lpbReceiveWork;
172 m_lpbReceiveWork =
new BYTE[m_receivePacketMaxSize];
178 m_threadRecv.
Start();
191 m_hasOndemandStop =
true;
192 m_piCommunication->
Close();
198 m_hasOndemandStop =
false;
208 virtual bool Send(
size_t dataSize, LPCVOID lpcvData)
210 if ( ! m_piCommunication->
IsOpened() )
214 bool r = m_piCommunication->
Send(dataSize, lpcvData) == dataSize;
217 _super::m_OnSend(dataSize, lpcvData);
229 m_piCommunication->
Purge();
246 E_ReceiveDataBufferSize = 10000,
251 LPBYTE m_lpbReceiveWork;
252 DWORD m_dwPollingTiming;
254 bool m_hasOndemandStop;
255 size_t m_receivePacketMaxSize;
264 virtual DWORD Run(
void)
267 bool isReceived =
true;
276 else if ( m_dwPollingTiming > 0 )
278 ::Sleep(m_dwPollingTiming);
281 m_syncReceive.
Lock();
283 ec = ::GetLastError();
295 m_boIsConnect =
false;
305 m_boIsConnect =
true;
309 size_t dwReceivedDataCount = INVALID_SIZE;
312 if ( dwReceivedDataCount > m_receivePacketMaxSize )
314 dwReceivedDataCount = m_receivePacketMaxSize;
316 if ( m_lpbReceiveWork == NULL )
322 size_t dwReadBytes = m_piCommunication->
Receive(dwReceivedDataCount, m_lpbReceiveWork);
324 if ( dwReadBytes == INVALID_SIZE )
332 if ( dwReadBytes > 0 )
337 ev.SetData(dwReadBytes, m_lpbReceiveWork);
350 if ( _super::GetIdleInterval() > 0 )
366 m_boIsConnect =
false;
370 m_piCommunication->
Close();
372 if ( ! m_hasOndemandStop )
400template<
typename COMM>
bool m_OnEvent(const CReportEvent &ev)
[内部] コールバック通知実行
COMM * operator->(void)
[参照] 通信クラス参照.
const COMM * operator->(void) const
[参照] 通信クラス参照.
COMM & ReferCommunication(void)
[参照] 通信クラス参照.
virtual ~CCommunicationReporterT(void)
デストラクタ
CCommunicationReporterT(DWORD dwInterfaceId=0)
コンストラクタ
const COMM & ReferCommunication(void) const
[参照] 通信クラス参照.
CThreadStatus & ReferThreadStatus(void)
[参照] 受信スレッド状態参照.
virtual ~CCommunicationReporter(void)
デストラクタ
virtual void Stop(void)
[操作] 通信レポート停止.
virtual void SetIdleEventMode(int iInterval=0)
[設定] アイドルイベント設定
virtual bool Send(size_t dataSize, LPCVOID lpcvData)
[送信] データ送信
virtual CStr GetReportName(void) const
[取得] レポート名.
virtual DWORD GetReportID(void) const
[取得] レポート ID.
virtual void Purge(void)
[設定] パージ.
virtual bool IsConnect(void) const
[確認] 接続されているか
void SetReceivePollingTiming(DWORD dwPollingTiming)
[設定] 受信チェック間隔設定.
CCommunicationReporter(ICommunication *pComm, DWORD dwInterfaceId=0)
コンストラクタ
friend class CCommunicationReporterTest
フレンドクラス宣言
virtual bool IsAlive(void) const
[確認] Aliveチェック.
virtual bool Start(void)
[操作] 通信レポート開始.
static CStrT Fmt(const TCHAR *lpszFormat,...)
[作成] 書式付き文字列作成
virtual bool Lock(DWORD dwTime=INFINITE) const
[排他] ロック
virtual void Unlock(void) const
[排他] アンロック
bool IsAlive(void) const
[確認] スレッドが生きているか
bool SetRunner(IRunner *pRunner)
[設定] ランナー、設定
bool Stop(DWORD dwWait=15000)
[設定] スレッド停止 スレッドに対して停止要求します。
bool Start(LPCTSTR lpszName=NULL)
[設定] スレッド開始
bool IsPassedAndReset(DWORD dwTime, bool isNow=true)
[確認] 経過確認&リセット.
void Reset(void)
[設定] リセット.
#define EXCLUSIVE(CLS)
簡易排他制御マクロ.
@ ReportEvent_IrregularEnd
不正終了.
@ ReportEvent_Disconnect
切断.
bool IsRunnable(void) const
[確認] 実行可能か否か
size_t receivePacketSize
受信パケットサイズ。INVALID_SIZE なら制限なし。
virtual EState Check(void) const
[確認] チェック.
virtual bool Open(void)=0
[処理] オープン.
virtual bool IsOpened(void) const =0
[確認] オープン確認.
virtual const TProperty & GetProperty(void) const =0
[取得] 性能取得.
virtual void Close(void)=0
[処理] クローズ.
virtual size_t Send(size_t size, LPCVOID P)=0
[処理] 送信.
virtual void Purge(void)
[処理] パージ.
virtual bool IsConnect(void) const
[確認] 接続確認.
virtual bool CanReceive(void) const
[確認] 受信可能確認.
virtual size_t Receive(size_t size, LPVOID _P)=0
[処理] 受信.
friend class CReportEvent
パートナークラス宣言