TNB Library
TnbDialupWatcher.h
[詳解]
1#pragma once
17#include "TnbDialupManager.h"
18#include "TnbTime.h"
19#include "TnbIcmp.h"
20#include "TnbIpHelper.h"
21
22
23
24//TNB Library
25namespace TNB
26{
27
28
29
51{
52 typedef CDialupManager __manage;
53 enum
54 {
55 E_CheckInterval = 500
56 };
57public:
58
70 {
79 MIB_IFROW tMibIfRow;
81 void Init(void)
82 {
83 boIsValidIfRow = false;
87 }
90 {
91 return timeConnectTime;
92 }
95 {
97 }
98 };
99
109 {
111 virtual ~IListener(void) {}
112
119 virtual void OnDialConnect(bool boIsDoubtfulConnectSpan) = 0;
120
125 virtual void OnDialDisconnect(const TConnectInfo& t) = 0;
126 };
127
128protected:
129
134 HRASCONN m_hRasConn;
140
145 virtual DWORD Run(void)
146 {
147 while ( IsRunnable() )
148 {
149 //==接続監視ループ
150 if ( m_hRasConn == NULL )
151 {
152 while ( IsRunnable() )
153 {
155 if ( m_hRasConn != NULL )
156 {
157 //接続された
158 TRACE1("CDialupWatcher::接続検知[%s]!\n", m_strEntryName);
160 if ( m_piListener != NULL )
161 {
163 }
164 break;
165 }
166 ::Sleep(m_iCheckInterval);
167 }
168 if ( ! IsRunnable() )
169 {
170 break;
171 }
172 }
173 //
174 m_dwConnectedTick = ::GetTickCount();
178 ASSERTLIB(! strAddress.IsEmpty());
181 m_tInfo.boIsValidIfRow = true;
182 //
183 //==切断監視ループ
184 RASCONNSTATUS tStatus;
185 while ( IsRunnable() )
186 {
187 ::Sleep(m_iCheckInterval);
189 m_tInfo.dwConnectingSpan = ::GetTickCount() - m_dwConnectedTick;
190 tStatus.dwSize = sizeof(RASCONNSTATUS);
191 DWORD dwRc = ::RasGetConnectStatus(m_hRasConn, &tStatus);
192 if ( dwRc != 0 || tStatus.rasconnstate == RASCS_Disconnected )
193 {
194 //切断された
195 m_hRasConn = NULL;
196 TRACE1("CDialupWatcher::切断検知[%s]!\n", m_strEntryName);
197 TRACE1(" 接続時間 = %d秒\n", m_tInfo.dwConnectingSpan / 1000);
198 TRACE1(" (%d分)\n", m_tInfo.dwConnectingSpan / 1000 / 60);
199 TRACE1(" 受信Byte = %dbyte\n", m_tInfo.tMibIfRow.dwInOctets);
200 TRACE1(" 送信Byte = %dbyte\n", m_tInfo.tMibIfRow.dwOutOctets);
201 if ( m_piListener != NULL )
202 {
204 }
205 break;
206 }
207 }
208 }
209 m_tInfo.Init();
210 return 0;
211 }
212
213public:
214
216 CDialupWatcher(void) :m_iCheckInterval(E_CheckInterval), m_piListener(NULL), m_hRasConn(NULL)
217 {
218 m_tInfo.Init();
220 }
221
223 virtual ~CDialupWatcher(void)
224 {
225 Stop();
226 }
227
233 void SetListener(IListener* I = NULL)
234 {
235 m_piListener = I;
236 }
237
243 bool IsConnect(void)
244 {
245 return m_hRasConn != NULL;
246 }
247
253 {
254 m_tInfo.Init();
255 }
256
262 {
263 if ( IsConnect() )
264 {
266 m_tInfo.dwConnectingSpan = ::GetTickCount() - m_dwConnectedTick;
267 }
268 return m_tInfo;
269 }
270
275 DWORD GetConnectSpan(void)
276 {
278 }
279
284 void Stop(void)
285 {
289 m_hRasConn = NULL;
290 m_tInfo.Init();
291 }
292
302 bool Start(LPCTSTR lpszPhoneBook, LPCTSTR lpszEntryName, int iCheckInterval = E_CheckInterval)
303 {
304 if ( m_threadWatch.IsAlive() )
305 {
306 return false;
307 }
308 __manage::TDialParams tParam = __manage::GetDialParams(lpszPhoneBook, lpszEntryName);
309 if ( tParam.IsInvalid() )
310 {
311 return false;
312 }
313 m_strPhoneBook = lpszPhoneBook;
314 m_strEntryName = lpszEntryName;
315 m_tInfo.boIsValidIfRow = false;
316 m_hRasConn = __manage::GetRasConn(lpszPhoneBook, lpszEntryName);
318 if ( m_hRasConn != NULL )
319 {
320 //接続された
321 TRACE1("CDialupWatcher::すでに接続中検知[%s]!\n", m_strEntryName);
322 if ( m_piListener != NULL )
323 {
325 }
326 }
327 m_iCheckInterval = iCheckInterval;
328 #ifdef _DEBUG
329 m_threadWatch.Start(CStr::Fmt(_T("<%s>監視"), lpszEntryName));
330 #else
332 #endif
333 return true;
334 }
335
341 {
342 return m_threadWatch;
343 }
344};
345
346
347
348}; // TNB
ダイアルアップ関係のヘッダ
@ RASCS_Disconnected
切断完了
ICMP処理関係のヘッダ
IP HELPER API関係のヘッダ
時間管理関係のヘッダ
[ETC] コピー不可能スーパークラス.
Definition: TnbDef.h:599
ダイアルアップ管理クラス
CStr GetIpAddress(void) const
[取得] IPアドレス取得.
static TDialParams GetDialParams(LPCTSTR lpszPhoneBook, LPCTSTR lpszEntryName)
[取得] エントリのダイアルパラメータ取得
static HRASCONN GetRasConn(LPCTSTR lpszPhoneBook, LPCTSTR lpszEntryname)
[確認] 指定Entry接続完了状態チェック
ダイアルアップ接続監視クラス
CThreadStatus & ReferThreadStatus(void)
[参照] 監視スレッド状態参照.
CThread m_threadWatch
スレッド管理
CDialupWatcher(void)
コンストラクタ
void ClearConnectInfo(void)
[設定] 接続情報の初期化.
void SetListener(IListener *I=NULL)
[登録] Listner登録
CStr m_strEntryName
エントリ名
IListener * m_piListener
リスナー
virtual ~CDialupWatcher(void)
デストラクタ
DWORD GetConnectSpan(void)
[参照] 接続時間参照
void Stop(void)
[操作] 監視停止.
int m_iCheckInterval
状態チェックの間隔 ms
HRASCONN m_hRasConn
接続中のハンドル
INDEX m_mibIndex
接続中のMIBインデックス
bool Start(LPCTSTR lpszPhoneBook, LPCTSTR lpszEntryName, int iCheckInterval=E_CheckInterval)
[操作] 監視開始.
virtual DWORD Run(void)
スレッド処理本体
TConnectInfo m_tInfo
接続状態
bool IsConnect(void)
[確認] 接続チェック
DWORD m_dwConnectedTick
接続した時の時間
const TConnectInfo & GetConnectInfo(void)
[参照] 接続情報参照
CByteVector m_vbIfTableTmp
GetIfTable用テンポラリ
CStr m_strPhoneBook
電話帳名
static INDEX GetMibIndex(LPCSTR lpszAddress)
IPアドレスからMIB-INDEXを取得
Definition: TnbIpHelper.h:67
static bool GetMibIfRow(INDEX dwMibIndex, MIB_IFROW &_tMibIfRow)
[取得] MIB-INDEXの情報取得
Definition: TnbIpHelper.h:110
bool IsEmpty(void) const
[確認] 空チェック
Definition: TnbStr.h:528
static CStrT Fmt(const TCHAR *lpszFormat,...)
[作成] 書式付き文字列作成
Definition: TnbStr.h:1206
void Empty(void)
[削除] 空化
Definition: TnbStr.h:197
システムタイム管理クラス
Definition: TnbTime.h:294
static CSystemTime GetCurrent(void)
[取得] 現在の時間(LOCAL)
Definition: TnbTime.h:761
CSystemTime & AddMillSec(LONGLONG llMillSec)
[加算] ミリ秒加算
Definition: TnbTime.h:554
スレッド状態管理クラス
Definition: TnbThread.h:128
bool IsAlive(void) const
[確認] スレッドが生きているか
Definition: TnbThread.h:177
スレッド管理クラス
Definition: TnbThread.h:316
bool SetRunner(IRunner *pRunner)
[設定] ランナー、設定
Definition: TnbThread.h:420
bool Stop(DWORD dwWait=15000)
[設定] スレッド停止 スレッドに対して停止要求します。
Definition: TnbThread.h:505
bool Start(LPCTSTR lpszName=NULL)
[設定] スレッド開始
Definition: TnbThread.h:618
TNB Library
Definition: TnbDoxyTitle.txt:2
ダイアルパラメータ型
bool IsInvalid(void) const
本情報は有効か否か
ダイアルアップ接続監視のリスナーインターフェース
virtual ~IListener(void)
デストラクタ
virtual void OnDialDisconnect(const TConnectInfo &t)=0
[通知] 切断
virtual void OnDialConnect(bool boIsDoubtfulConnectSpan)=0
[通知] 接続
ダイアルアップ接続状態情報型
CSystemTime GetStartTime(void)
[取得] 開始時間取得
void Init(void)
[設定] 初期化
CSystemTime timeConnectTime
接続開始時間
bool boIsDoubtfulConnectSpan
接続時間の状態 trueなら怪しい(監視開始時接続されていたため) falseなら正しい。
CSystemTime GetEndTime(void)
[取得] 終了時間取得
bool boIsValidIfRow
接続情報は true;有効/false;無効
DWORD dwConnectingSpan
接続継続時間 ms
スレッド実行管理ランナーインターフェース
Definition: TnbThread.h:341
bool IsRunnable(void) const
[確認] 実行可能か否か
Definition: TnbThread.h:355