TNB Library
TnbPacketCommander.h
[詳解]
1#pragma once
17#include "TnbStrVector.h"
19#include "TnbQueueingReporter.h"
20#include "TnbSet.h"
21
22
23
24#ifndef _TnbDOXYGEN //Document作成用シンボル
25 #ifdef _TnbPACKET_LittleEndian
26 #pragma message("message : TPacWord/TPacDword is Little Endian.")
27 #else
28 #pragma message("message : TPacWord/TPacDword is Big Endian.")
29 #endif
30#endif
31
32
33
34namespace TNB
35{
36
37
38
39#pragma pack(push)
40#pragma pack(1)
41
42
43
61{
62 typedef DWORD TYPE;
63
70 {
71 Set(v);
72 return *this;
73 }
74
79 void Set(DWORD v)
80 {
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);
86 #else
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);
91 #endif
92 }
93
98 operator DWORD(void) const
99 {
100 return Get();
101 }
102
107 DWORD Get(void) const
108 {
109 DWORD r;
110 #ifdef _TnbPACKET_LittleEndian
111 r = (m_dat[3] << 24) + (m_dat[2] << 16) + (m_dat[1] << 8) + (m_dat[0]);
112 #else
113 r = (m_dat[0] << 24) + (m_dat[1] << 16) + (m_dat[2] << 8) + (m_dat[3]);
114 #endif
115 return r;
116 }
117
122 CStr ToString(void) const
123 {
124 return CStr::DwordToString(Get());
125 }
126
127private:
128 BYTE m_dat[4];
129};
130
131
132
150{
151 typedef WORD TYPE;
152
159 {
160 Set(v);
161 return *this;
162 }
163
168 void Set(WORD v)
169 {
170 #ifdef _TnbPACKET_LittleEndian
171 m_dat[1] = static_cast<BYTE>(v >> 8);
172 m_dat[0] = static_cast<BYTE>(v);
173 #else
174 m_dat[0] = static_cast<BYTE>(v >> 8);
175 m_dat[1] = static_cast<BYTE>(v);
176 #endif
177 }
178
183 operator WORD(void) const
184 {
185 return Get();
186 }
187
192 WORD Get(void) const
193 {
194 WORD r;
195 #ifdef _TnbPACKET_LittleEndian
196 r = static_cast<WORD>((m_dat[1] << 8) + (m_dat[0]));
197 #else
198 r = static_cast<WORD>((m_dat[0] << 8) + (m_dat[1]));
199 #endif
200 return r;
201 }
202
207 CStr ToString(void) const
208 {
209 return CStr::DwordToString(Get());
210 }
211
212private:
213 BYTE m_dat[2];
214};
215
216
217
231{
232 typedef BYTE TYPE;
233
240 {
241 m_dat = v;
242 return *this;
243 }
244
249 void Set(BYTE v)
250 {
251 m_dat = v;
252 }
253
258 operator BYTE(void) const
259 {
260 return Get();
261 }
262
267 BYTE Get(void) const
268 {
269 return m_dat;
270 }
271
276 CStr ToString(void) const
277 {
278 return CStr::DwordToString(Get());
279 }
280
285 BYTE& Ref(void)
286 {
287 return m_dat;
288 }
289
290private:
291 BYTE m_dat;
292};
293
294
295
296#pragma pack(pop)
297
298
299
312{
323 struct IPacket
324 {
326 virtual ~IPacket(void) {}
327
333 virtual CByteVector Serialize(void) const = 0;
334
343 virtual int Deserialize(const IConstCollectionT<BYTE>& c) = 0;
344
350 virtual CStrVector ToStrings(void) const = 0;
351 };
352
354 virtual ~IPacketCommandExecuter(void) {}
355
362 virtual int SendPacket(const IPacket& packet) = 0;
363
373 virtual int ExecuteCommand(IPacket& _response, const IPacket& command, DWORD timeout = 500) = 0;
374};
375
376
377
655{
656public:
657
660 {
661 Timeout = -1,
663 Canceled = -3,
664 NotOpen = -4,
665 };
666
679 {
681 virtual ~IListener(void) {}
682
690 virtual void OnCommanderReceivedPacket(const IPacket* pPacket, int result) = 0;
691
697 virtual void OnCommanderReceivedExpectationPacket(const IPacket* pPacket) {}
698
705 virtual void OnCommanderDustyData(BYTE b, int result) = 0;
706
713 virtual bool OnReportEvent(EReportEvent event) = 0;
714 };
715
716
717 //-------------------------------------
718
719
724 CPacketCommander(int iQueueSize = 10000) : m_pRep(NULL), m_queue(iQueueSize)
725 {
726 }
727
730 {
732 }
733
741 {
742 m_in.m_pPacketFormat = pPacket;
743 }
744
751 {
752 SetPacketFormat(pPacket);
753 }
754
759 void SetListener(IListener* pListener)
760 {
761 m_in.m_pListener = pListener;
762 }
763
772 void SetAliveTime(DWORD time = DWORD_MAX)
773 {
774 m_queue.SetAliveTime(time);
775 }
776
784 void SetTearminalTime(DWORD time = DWORD_MAX)
785 {
786 m_queue.SetTearminalTime(time);
787 }
788
794 bool IsOpened(void) const
795 {
796 if ( m_pRep != NULL )
797 {
798 return m_pRep->IsAlive();
799 }
800 return false;
801 }
802
808 bool IsConnect(void) const
809 {
810 if ( m_pRep != NULL )
811 {
812 return m_pRep->IsConnect();
813 }
814 return false;
815 }
816
826 bool Open(IReport* pRep, bool withQueueing = false)
827 {
829 if ( pRep != NULL && m_in.m_pPacketFormat != NULL )
830 {
831 m_pRep = pRep;
832 if ( withQueueing )
833 {
834 m_queue.SetEnvironment(m_pRep, &m_in);
835 }
836 else
837 {
838 m_pRep->SetListener(&m_in);
839 }
840 return m_pRep->Start();
841 }
842 return false;
843 }
844
849 virtual void Close(void)
850 {
851 if ( m_pRep != NULL )
852 {
853 m_pRep->Stop();
854 }
855 m_queue.ResetEnvironment();
856 m_pRep = NULL;
857 }
858
868 {
869 if ( IsOpened() )
870 {
871 ASSERT( m_pRep != NULL );
872 // 送信コマンドデータ作成
873 CByteVector vb = packet.Serialize();
874 // 受信処理ロック
875 m_in.m_sendSync.Lock();
876 // 送信
877 bool r = m_pRep->Send(vb.GetSize(), vb.ReferBuffer());
878 // 受信処理アンロック
879 m_in.m_sendSync.Unlock();
880 if ( r )
881 {
882 return 0; //成功
883 }
884 return SendError; //送信エラー
885 }
886 return NotOpen;
887 }
888
897 int _deprecated SendCommand(const IPacketCommandExecuter::IPacket& packet)
898 {
899 return SendPacket(packet);
900 }
901
915 virtual int ExecuteCommand(IPacketCommandExecuter::IPacket& _response, const IPacketCommandExecuter::IPacket& command, DWORD timeout = 500)
916 {
917 int r = ExecuteCommand_Start(_response, command);
918 if ( r >= 0 )
919 {
920 r = ExecuteCommand_Wait(_response, timeout);
921 ExecuteCommand_Stop(_response);
922 }
923 return r;
924 }
925
939 {
940 if ( IsOpened() )
941 {
942 ASSERT( m_pRep != NULL );
943 //== 準備
944 bool r = true;
945 // 送信コマンドデータ作成
946 CByteVector vb = command.Serialize();
947 // 新タスク
948 m_in.NewTask(&_response);
949 //== 送信
950 if ( ! vb.IsEmpty() )
951 {
952 // 受信処理ロック
953 m_in.m_sendSync.Lock();
954 // 送信
955 r = m_pRep->Send(vb.GetSize(), vb.ReferBuffer());
956 // 受信処理アンロック
957 m_in.m_sendSync.Unlock();
958 }
959 return r ? 1 : SendError;
960 }
961 return NotOpen;
962 }
963
976 int ExecuteCommand_Wait(IPacketCommandExecuter::IPacket& _response, DWORD timeout = 500)
977 {
978 if ( IsOpened() )
979 {
980 // タスク
981 CInner::TTask* pTask = m_in.FindTask(&_response);
982 if ( pTask != NULL )
983 {
984 DWORD to = timeout;
985 while ( true )
986 {
987 if ( pTask->recvEvent.Lock(to) )
988 {
989 int r = pTask->analyzedCode;
990 m_in.EndTask(pTask);
991 return r;
992 }
993 if ( ! pTask->isTimeoutExtend )
994 {
995 break;
996 }
997 pTask->isTimeoutExtend = false; //タイムアウト延長
998 if ( to > 0 )
999 {
1000 DWORD t = pTask->extendTime;
1001 if ( t == 0 )
1002 {
1003 t = timeout;
1004 }
1005 DWORD d = pTask->tick.GetPassedCount();
1006 if ( d > t )
1007 {
1008 to = 0;
1009 }
1010 else
1011 {
1012 to = t - d;
1013 }
1014 }
1015 }
1016 return Timeout; //タイムアウト
1017 }
1018 return SendError; //送信エラー(Startしてない)
1019 }
1020 return NotOpen;
1021 }
1022
1029 {
1030 CInner::TTask* pTask = m_in.FindTask(&response);
1031 if ( pTask != NULL )
1032 {
1033 m_in.EndTask(pTask);
1034 }
1035 }
1036
1045 void ExtendTimeout(DWORD threadId = 0)
1046 {
1047 m_in.ExtendTimeout(0, threadId);
1048 }
1049
1057 void ExtendTimeoutEx(DWORD time, DWORD threadId = 0)
1058 {
1059 m_in.ExtendTimeout(time, threadId);
1060 }
1061
1068 void CancelWaitResponse(DWORD threadId = 0)
1069 {
1070 m_in.CancelWaitResponse(threadId);
1071 }
1072
1081 bool SendRawData(size_t size, const BYTE* pData)
1082 {
1083 bool r = false;
1084 if ( m_pRep != NULL )
1085 {
1086 // 受信処理ロック
1087 m_in.m_sendSync.Lock();
1088 // 送信
1089 r = m_pRep->Send(size, pData);
1090 // 受信処理アンロック
1091 m_in.m_sendSync.Unlock();
1092 }
1093 return r;
1094 }
1095
1100 size_t GetQueueFreeSize(void) const
1101 {
1102 return m_queue.GetQueueFreeSize();
1103 }
1104
1108 void PurgeQueue(void)
1109 {
1110 m_queue.Purge();
1111 }
1112
1119 {
1120 return IsOpened() ? m_pRep : NULL;
1121 }
1122
1123private:
1124
1126 class CInner : public IReport::IListener, public CQueueingReporter::IListener
1127 {
1128 DEFPARENTLISTENER(CPacketCommander, IParentListener);
1129 public:
1131 struct TTask
1132 {
1133 DWORD threadId;
1142 TTask(void) : recvEvent(false, false), pExpectationPacket(NULL), isTimeoutExtend(false), extendTime(0), analyzedCode(0), isAnalyzed(true)
1143 {}
1144 };
1145
1146 //-----
1147
1149 CInner(void) : m_pListener(NULL), m_pPacketFormat(NULL)
1150 {
1151 }
1152 void EndTask(TTask* p)
1153 {
1154 EXCLUSIVE( &m_task );
1155 if ( m_task.Delete(p) )
1156 {
1157// p->recvEvent.Unlock();
1158 delete p;
1159 }
1160 }
1161 TTask* FindTask(IPacket* pExpectation)
1162 {
1163 loop ( i, m_task )
1164 {
1165 TTask* p = m_task.At(i);
1166 if ( p->pExpectationPacket == pExpectation )
1167 {
1168 return p;
1169 }
1170 }
1171 return NULL;
1172 }
1173 TTask* NewTask(IPacket* pExpectation)
1174 {
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;
1181 p->extendTime = 0;
1182 ASSERT( ! m_task.Has(p) );
1183 m_task.InsertEx(p);
1184 return p;
1185 }
1186 void ExtendTimeout(DWORD time, DWORD threadId = 0)
1187 {
1188 if ( threadId == 0 )
1189 {
1190 loop ( i, m_task )
1191 {
1192 TTask* p = m_task.At(i);
1193 p->tick.Reset();
1194 p->isTimeoutExtend = true;
1195 p->extendTime = time;
1196 }
1197 }
1198 else
1199 {
1200 loop ( i, m_task )
1201 {
1202 TTask* p = m_task.At(i);
1203 if ( threadId == p->threadId )
1204 {
1205 p->tick.Reset();
1206 p->isTimeoutExtend = true;
1207 p->extendTime = time;
1208 break;
1209 }
1210 }
1211 }
1212 }
1214 void CancelWaitResponse(DWORD threadId = 0)
1215 {
1216 if ( threadId == 0 )
1217 {
1218 loop ( i, m_task )
1219 {
1220 TTask* p = m_task.At(i);
1221 p->analyzedCode = Canceled;
1222// p->pExpectationPacket = NULL;
1223 p->isAnalyzed = true;
1224 p->recvEvent.Unlock();
1225 }
1226 }
1227 else
1228 {
1229 loop ( i, m_task )
1230 {
1231 TTask* p = m_task.At(i);
1232 if ( threadId == p->threadId )
1233 {
1234 p->analyzedCode = Canceled;
1235// p->pExpectationPacket = NULL;
1236 p->isAnalyzed = true;
1237 p->recvEvent.Unlock();
1238 break;
1239 }
1240 }
1241 }
1242 }
1244 virtual bool OnReportEvent(const CReportEvent& ev)
1245 {
1246 if ( ev.HasEvent() )
1247 {
1248 if ( ev.GetEvent() == ReportEvent_End )
1249 {
1251 }
1252 if ( m_pListener != NULL )
1253 {
1254 return m_pListener->OnReportEvent(ev.GetEvent());
1255 }
1256 return true;
1257 }
1258// EXCLUSIVE( &m_sendSync );
1260 if ( Analyze(c) == 0 )
1261 {
1262 if ( m_pListener != NULL )
1263 {
1264 loop ( i, ev.GetDataSize() )
1265 {
1266 m_pListener->OnCommanderDustyData(ev.GetData()[i], Timeout);
1267 }
1268 }
1269 }
1270 return true;
1271 }
1273 virtual size_t OnReportData(bool boIsLast, const IConstCollectionT<BYTE>& c)
1274 {
1275// EXCLUSIVE( &m_sendSync );
1276 size_t r = Analyze(c);
1277 if ( boIsLast && r == 0 )
1278 {
1279 r = c.GetSize();
1280 if ( m_pListener != NULL )
1281 {
1282 loop ( i, r )
1283 {
1284 m_pListener->OnCommanderDustyData(c.At(i), Timeout);
1285 }
1286 }
1287 }
1288 return r;
1289 }
1291 virtual void OnReportDustyData(BYTE b)
1292 {
1293 if ( m_pListener != NULL )
1294 {
1295 m_pListener->OnCommanderDustyData(b, Timeout);
1296 }
1297 }
1299 size_t Analyze(const IConstCollectionT<BYTE>& c)
1300 {
1301 size_t size = 0;
1302 if ( m_pPacketFormat != NULL )
1303 {
1304 int a = m_pPacketFormat->Deserialize(c);
1305 if ( a > 0 )
1306 {
1307 size = a;
1308 a = 0;
1309 bool isDisp = false;
1310 {
1311 EXCLUSIVE( &m_task );
1312 loop ( i, m_task )
1313 {
1314 TTask* p = m_task.At(i);
1315// if ( p->pExpectationPacket != NULL )
1316 if ( ! p->isAnalyzed )
1317 {
1318 a = p->pExpectationPacket->Deserialize(c);
1319 if ( a > 0 )
1320 {
1321 if ( m_pListener != NULL )
1322 {
1323 m_pListener->OnCommanderReceivedExpectationPacket(m_pPacketFormat);
1324 }
1325 p->analyzedCode = a;
1326// p->pExpectationPacket = NULL;
1327 p->isAnalyzed = true;
1328 p->recvEvent.Unlock();
1329 isDisp = true;
1330 break;
1331 }
1332 }
1333 }
1334 }
1335 if ( ! isDisp && m_pListener != NULL )
1336 {
1337 m_pListener->OnCommanderReceivedPacket(m_pPacketFormat, a);
1338 }
1339 }
1340 else if ( a == 0 )
1341 {
1342 }
1343 else
1344 {
1345 size = 1;
1346 if ( m_pListener != NULL )
1347 {
1348 m_pListener->OnCommanderDustyData(c.At(0), a);
1349 }
1350 }
1351 }
1352 return size;
1353 }
1354 CSyncSection m_sendSync;
1355 IParentListener* m_pListener;
1356 IPacket* m_pPacketFormat;
1357 CSingleSetT<TTask*> m_task;
1358 };
1359 CInner m_in;
1360 IReport* m_pRep;
1361 CQueueingReporter m_queue;
1362};
1363
1364
1365
1366#ifndef _TnbDOXYGEN //Document作成用シンボル
1367 C_ASSERT ( sizeof(TPacDword) == 4 );
1368 C_ASSERT ( sizeof(TPacWord) == 2 );
1369 C_ASSERT ( sizeof(TPacByte) == 1 );
1370#endif
1371
1372
1373
1374}; // TNB
1375
1376
1377
情報群管理アダプタ関係のヘッダ
#define loop(VAR, CNT)
loop構文.
Definition: TnbDef.h:343
キューイングレポート関係のヘッダ
シングルセット情報管理関係のヘッダ
文字列情報配列管理関係のヘッダ
virtual bool Lock(DWORD dwTime=INFINITE) const
[排他] ロック
Definition: TnbSync.h:91
情報参照アダプタテンプレート
[ETC] コピー不可能スーパークラス.
Definition: TnbDef.h:599
パケットコマンダー.
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)
コンストラクタ
@ Canceled
キャンセル
@ NotOpen
オープンしてない
@ SendError
送信エラー
@ Timeout
タイムアウト
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
[取得] キュー空きサイズ取得.
通信受信イベント管理クラス
Definition: TnbReport.h:70
size_t GetDataSize(void) const
[取得] データ長取得
Definition: TnbReport.h:139
bool HasEvent(void) const
[確認] Event(Error)を持っている
Definition: TnbReport.h:130
const BYTE * GetData(void) const
[取得] データアドレス取得
Definition: TnbReport.h:148
EReportEvent GetEvent(void) const
[取得] イベントコード取得
Definition: TnbReport.h:157
シングルセット情報管理テンプレート
Definition: TnbSet.h:71
static CStrT DwordToString(DWORD value)
[設定] DWORD型文字列化.
Definition: TnbStr.h:1174
Event排他管理クラス
Definition: TnbSync.h:480
Section排他管理クラス
Definition: TnbSync.h:125
経過時間管理クラス
Definition: TnbTickCount.h:57
DWORD GetPassedCount(void) const
[取得] 経過時間取得.
Definition: TnbTickCount.h:102
virtual size_t GetSize(void) const
[取得] サイズ取得
Definition: TnbVector.h:368
virtual const TYP * ReferBuffer(void) const
[取得] データアドレス取得
Definition: TnbVector.h:664
#define EXCLUSIVE(CLS)
簡易排他制御マクロ.
Definition: TnbSync.h:788
TNB Library
Definition: TnbDoxyTitle.txt:2
EReportEvent
通信受信イベント種.
Definition: TnbReport.h:28
@ ReportEvent_End
終了.
Definition: TnbReport.h:31
CTickCount tick
延長時間管理用
CSyncEvent recvEvent
受信イベント。期待のレシーブがあればシグナルします。
IPacket * pExpectationPacket
期待パケット
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)
デストラクタ
通信のリスナーインターフェース
Definition: TnbReport.h:243
通信アクセスインターフェース
Definition: TnbReport.h:227
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 変数型.
BYTE & Ref(void)
[参照] 参照
BYTE Get(void) const
[取得] ゲッタ
TPacByte & operator=(BYTE v)
[代入] 代入.
CStr ToString(void) const
[取得] 文字列化.
void Set(BYTE v)
[代入] 代入.
パケット用 DWORD 変数型.
void Set(DWORD v)
[代入] 代入.
CStr ToString(void) const
[取得] 文字列化.
DWORD Get(void) const
[取得] ゲッタ
TPacDword & operator=(DWORD v)
[代入] 代入.
パケット用 WORD 変数型.
void Set(WORD v)
[代入] 代入.
WORD Get(void) const
[取得] ゲッタ
TPacWord & operator=(WORD v)
[代入] 代入.
CStr ToString(void) const
[取得] 文字列化.