25 #ifdef _TnbPACKET_LittleEndian
26 #pragma message("message : TPacWord/TPacDword is Little Endian.")
28 #pragma message("message : TPacWord/TPacDword is Big Endian.")
81 #ifdef _TnbPACKET_LittleEndian
82 m_dat[3] =
static_cast<BYTE
>(v >> 24);
83 m_dat[2] =
static_cast<BYTE
>(v >> 16);
84 m_dat[1] =
static_cast<BYTE
>(v >> 8);
85 m_dat[0] =
static_cast<BYTE
>(v);
87 m_dat[0] =
static_cast<BYTE
>(v >> 24);
88 m_dat[1] =
static_cast<BYTE
>(v >> 16);
89 m_dat[2] =
static_cast<BYTE
>(v >> 8);
90 m_dat[3] =
static_cast<BYTE
>(v);
98 operator DWORD(
void)
const
110 #ifdef _TnbPACKET_LittleEndian
111 r = (m_dat[3] << 24) + (m_dat[2] << 16) + (m_dat[1] << 8) + (m_dat[0]);
113 r = (m_dat[0] << 24) + (m_dat[1] << 16) + (m_dat[2] << 8) + (m_dat[3]);
170 #ifdef _TnbPACKET_LittleEndian
171 m_dat[1] =
static_cast<BYTE
>(v >> 8);
172 m_dat[0] =
static_cast<BYTE
>(v);
174 m_dat[0] =
static_cast<BYTE
>(v >> 8);
175 m_dat[1] =
static_cast<BYTE
>(v);
183 operator WORD(
void)
const
195 #ifdef _TnbPACKET_LittleEndian
196 r =
static_cast<WORD
>((m_dat[1] << 8) + (m_dat[0]));
198 r =
static_cast<WORD
>((m_dat[0] << 8) + (m_dat[1]));
258 operator BYTE(
void)
const
742 m_in.m_pPacketFormat = pPacket;
761 m_in.m_pListener = pListener;
796 if ( m_pRep != NULL )
810 if ( m_pRep != NULL )
829 if ( pRep != NULL && m_in.m_pPacketFormat != NULL )
840 return m_pRep->
Start();
851 if ( m_pRep != NULL )
871 ASSERT( m_pRep != NULL );
875 m_in.m_sendSync.Lock();
879 m_in.m_sendSync.Unlock();
942 ASSERT( m_pRep != NULL );
948 m_in.NewTask(&_response);
953 m_in.m_sendSync.Lock();
957 m_in.m_sendSync.Unlock();
1031 if ( pTask != NULL )
1033 m_in.EndTask(pTask);
1047 m_in.ExtendTimeout(0, threadId);
1059 m_in.ExtendTimeout(time, threadId);
1070 m_in.CancelWaitResponse(threadId);
1084 if ( m_pRep != NULL )
1087 m_in.m_sendSync.Lock();
1089 r = m_pRep->
Send(size, pData);
1091 m_in.m_sendSync.Unlock();
1149 CInner(
void) : m_pListener(NULL), m_pPacketFormat(NULL)
1152 void EndTask(TTask* p)
1155 if ( m_task.Delete(p) )
1161 TTask* FindTask(IPacket* pExpectation)
1165 TTask* p = m_task.At(i);
1166 if ( p->pExpectationPacket == pExpectation )
1173 TTask* NewTask(IPacket* pExpectation)
1175 TTask* p =
new TTask;
1176 p->threadId = ::GetCurrentThreadId();
1177 p->pExpectationPacket = pExpectation;
1178 p->isAnalyzed =
false;
1179 p->recvEvent.ToLock();
1180 p->isTimeoutExtend =
false;
1182 ASSERT( ! m_task.Has(p) );
1188 if ( threadId == 0 )
1192 TTask* p = m_task.At(i);
1194 p->isTimeoutExtend =
true;
1195 p->extendTime = time;
1202 TTask* p = m_task.At(i);
1203 if ( threadId == p->threadId )
1206 p->isTimeoutExtend =
true;
1207 p->extendTime = time;
1216 if ( threadId == 0 )
1220 TTask* p = m_task.At(i);
1223 p->isAnalyzed =
true;
1224 p->recvEvent.Unlock();
1231 TTask* p = m_task.At(i);
1232 if ( threadId == p->threadId )
1236 p->isAnalyzed =
true;
1237 p->recvEvent.Unlock();
1252 if ( m_pListener != NULL )
1254 return m_pListener->OnReportEvent(ev.
GetEvent());
1260 if ( Analyze(c) == 0 )
1262 if ( m_pListener != NULL )
1276 size_t r = Analyze(c);
1277 if ( boIsLast && r == 0 )
1280 if ( m_pListener != NULL )
1284 m_pListener->OnCommanderDustyData(c.
At(i),
Timeout);
1291 virtual void OnReportDustyData(BYTE b)
1293 if ( m_pListener != NULL )
1295 m_pListener->OnCommanderDustyData(b,
Timeout);
1302 if ( m_pPacketFormat != NULL )
1304 int a = m_pPacketFormat->Deserialize(c);
1309 bool isDisp =
false;
1314 TTask* p = m_task.At(i);
1316 if ( ! p->isAnalyzed )
1318 a = p->pExpectationPacket->Deserialize(c);
1321 if ( m_pListener != NULL )
1323 m_pListener->OnCommanderReceivedExpectationPacket(m_pPacketFormat);
1325 p->analyzedCode = a;
1327 p->isAnalyzed =
true;
1328 p->recvEvent.Unlock();
1335 if ( ! isDisp && m_pListener != NULL )
1337 m_pListener->OnCommanderReceivedPacket(m_pPacketFormat, a);
1346 if ( m_pListener != NULL )
1348 m_pListener->OnCommanderDustyData(c.
At(0), a);
1355 IParentListener* m_pListener;
1356 IPacket* m_pPacketFormat;
1368 C_ASSERT (
sizeof(
TPacWord) == 2 );
1369 C_ASSERT (
sizeof(
TPacByte) == 1 );
#define loop(VAR, CNT)
loop構文.
virtual bool Lock(DWORD dwTime=INFINITE) const
[排他] ロック
void CancelWaitResponse(DWORD threadId=0)
[設定] レスポンス待ちキャンセル.
void ExecuteCommand_Stop(IPacketCommandExecuter::IPacket &response)
[実行] コマンド実行(終了).
int _deprecated SendCommand(const IPacketCommandExecuter::IPacket &packet)
[実行] パケット送信.
void ExtendTimeout(DWORD threadId=0)
[設定] タイムアウト延長.
void SetTearminalTime(DWORD time=DWORD_MAX)
[設定] 終端時間設定.
bool Open(IReport *pRep, bool withQueueing=false)
[設定] オープン.
void SetAliveTime(DWORD time=DWORD_MAX)
[設定] キュー有効時間設定.
void _deprecated SetBasicPacket(IPacketCommandExecuter::IPacket *pPacket)
[設定] 解析用パケット指定.
bool IsOpened(void) const
[取得] オープン確認.
bool SendRawData(size_t size, const BYTE *pData)
[送信] 生データ送信.
virtual int ExecuteCommand(IPacketCommandExecuter::IPacket &_response, const IPacketCommandExecuter::IPacket &command, DWORD timeout=500)
[実行] コマンド実行.
bool IsConnect(void) const
[取得] 接続確認.
size_t GetQueueFreeSize(void) const
[取得] キュー空きサイズ取得.
void PurgeQueue(void)
[設定] キュークリア
virtual void Close(void)
[設定] クローズ.
void SetListener(IListener *pListener)
[設定] リスナー設定.
void SetPacketFormat(IPacketCommandExecuter::IPacket *pPacket)
[設定] 解析用パケット指定.
int ExecuteCommand_Wait(IPacketCommandExecuter::IPacket &_response, DWORD timeout=500)
[実行] コマンド実行(待ち).
~CPacketCommander(void)
デストラクタ
int ExecuteCommand_Start(IPacketCommandExecuter::IPacket &_response, const IPacketCommandExecuter::IPacket &command)
[実行] コマンド実行(開始).
void ExtendTimeoutEx(DWORD time, DWORD threadId=0)
[設定] タイムアウト延長.
virtual int SendPacket(const IPacketCommandExecuter::IPacket &packet)
[実行] パケット送信.
CPacketCommander(int iQueueSize=10000)
コンストラクタ
IReport * ReferReporter(void)
[参照] レポーター参照.
void Purge(void)
[消去] キューバッファクリア.
void SetEnvironment(IReport *pReport, IListener *pListener)
[設定] 環境設定
void SetTearminalTime(DWORD time=DWORD_MAX)
[設定] 終端時間設定.
void SetAliveTime(DWORD time=DWORD_MAX)
[設定] キュー有効時間設定.
void ResetEnvironment(void)
[設定] 環境リセット
size_t GetQueueFreeSize(void) const
[取得] キュー空きサイズ取得.
size_t GetDataSize(void) const
[取得] データ長取得
bool HasEvent(void) const
[確認] Event(Error)を持っている
const BYTE * GetData(void) const
[取得] データアドレス取得
EReportEvent GetEvent(void) const
[取得] イベントコード取得
static CStrT DwordToString(DWORD value)
[設定] DWORD型文字列化.
DWORD GetPassedCount(void) const
[取得] 経過時間取得.
virtual size_t GetSize(void) const
[取得] サイズ取得
virtual const TYP * ReferBuffer(void) const
[取得] データアドレス取得
#define EXCLUSIVE(CLS)
簡易排他制御マクロ.
CSyncEvent recvEvent
受信イベント。期待のレシーブがあればシグナルします。
IPacket * pExpectationPacket
期待パケット
bool isTimeoutExtend
延長あり?
bool isAnalyzed
期待パケット受信解析済み?
virtual void OnCommanderReceivedExpectationPacket(const IPacket *pPacket)
[通知] 期待パケット受信.
virtual void OnCommanderDustyData(BYTE b, int result)=0
[通知] ごみ受信.
virtual ~IListener(void)
デストラクタ
virtual void OnCommanderReceivedPacket(const IPacket *pPacket, int result)=0
[通知] パケット受信.
virtual bool OnReportEvent(EReportEvent event)=0
[通知] イベント通知.
bool IsEmpty(void) const
[確認] 要素の有無確認.
virtual const TYP & At(INDEX index) const =0
[取得] 要素の参照取得.
virtual size_t GetSize(void) const =0
[取得] 要素数取得.
virtual int Deserialize(const IConstCollectionT< BYTE > &c)=0
[設定] デシリアライズ.
virtual CByteVector Serialize(void) const =0
[取得] シリアライズ.
virtual ~IPacket(void)
デストラクタ
virtual CStrVector ToStrings(void) const =0
[取得] 文字列化.
virtual int SendPacket(const IPacket &packet)=0
[実行] パケット送信.
virtual int ExecuteCommand(IPacket &_response, const IPacket &command, DWORD timeout=500)=0
[実行] コマンド実行
virtual ~IPacketCommandExecuter(void)
デストラクタ
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 void SetListener(IReport::IListener *piCommListener=NULL)=0
[登録] 共通Listner登録.
virtual bool IsConnect(void) const =0
[確認] 接続チェック
BYTE Get(void) const
[取得] ゲッタ
TPacByte & operator=(BYTE v)
[代入] 代入.
CStr ToString(void) const
[取得] 文字列化.
void Set(DWORD v)
[代入] 代入.
CStr ToString(void) const
[取得] 文字列化.
DWORD Get(void) const
[取得] ゲッタ
TPacDword & operator=(DWORD v)
[代入] 代入.
WORD Get(void) const
[取得] ゲッタ
TPacWord & operator=(WORD v)
[代入] 代入.
CStr ToString(void) const
[取得] 文字列化.