TNB Library
クラス | 公開型 | 公開メンバ関数 | 全メンバ一覧
CPacketCommander クラス

パケットコマンダー. [詳解]

#include <TnbPacketCommander.h>

+ CPacketCommander の継承関係図

クラス

struct  IListener
 パケットコマンダーのリスナー [詳解]
 

公開型

enum  EFailure { Timeout = -1 , SendError = -2 , Canceled = -3 , NotOpen = -4 }
 失敗種類 [詳解]
 

公開メンバ関数

void CancelWaitResponse (DWORD threadId=0)
 [設定] レスポンス待ちキャンセル. [詳解]
 
virtual void Close (void)
 [設定] クローズ. [詳解]
 
 CPacketCommander (int iQueueSize=10000)
 コンストラクタ [詳解]
 
virtual int ExecuteCommand (IPacketCommandExecuter::IPacket &_response, const IPacketCommandExecuter::IPacket &command, DWORD timeout=500)
 [実行] コマンド実行. [詳解]
 
int ExecuteCommand_Start (IPacketCommandExecuter::IPacket &_response, const IPacketCommandExecuter::IPacket &command)
 [実行] コマンド実行(開始). [詳解]
 
void ExecuteCommand_Stop (IPacketCommandExecuter::IPacket &response)
 [実行] コマンド実行(終了). [詳解]
 
int ExecuteCommand_Wait (IPacketCommandExecuter::IPacket &_response, DWORD timeout=500)
 [実行] コマンド実行(待ち). [詳解]
 
void ExtendTimeout (DWORD threadId=0)
 [設定] タイムアウト延長. [詳解]
 
void ExtendTimeoutEx (DWORD time, DWORD threadId=0)
 [設定] タイムアウト延長. [詳解]
 
size_t GetQueueFreeSize (void) const
 [取得] キュー空きサイズ取得. [詳解]
 
bool IsConnect (void) const
 [取得] 接続確認. [詳解]
 
bool IsOpened (void) const
 [取得] オープン確認. [詳解]
 
bool Open (IReport *pRep, bool withQueueing=false)
 [設定] オープン. [詳解]
 
void PurgeQueue (void)
 [設定] キュークリア [詳解]
 
IReportReferReporter (void)
 [参照] レポーター参照. [詳解]
 
int _deprecated SendCommand (const IPacketCommandExecuter::IPacket &packet)
 [実行] パケット送信. [詳解]
 
virtual int SendPacket (const IPacketCommandExecuter::IPacket &packet)
 [実行] パケット送信. [詳解]
 
bool SendRawData (size_t size, const BYTE *pData)
 [送信] 生データ送信. [詳解]
 
void SetAliveTime (DWORD time=DWORD_MAX)
 [設定] キュー有効時間設定. [詳解]
 
void _deprecated SetBasicPacket (IPacketCommandExecuter::IPacket *pPacket)
 [設定] 解析用パケット指定. [詳解]
 
void SetListener (IListener *pListener)
 [設定] リスナー設定. [詳解]
 
void SetPacketFormat (IPacketCommandExecuter::IPacket *pPacket)
 [設定] 解析用パケット指定. [詳解]
 
void SetTearminalTime (DWORD time=DWORD_MAX)
 [設定] 終端時間設定. [詳解]
 
 ~CPacketCommander (void)
 デストラクタ [詳解]
 

詳解

パケットコマンダー.

コマンド送信〜応答待ちまでをサポートしています。 タイムアウト時間は、 ExecuteCommand() メソッドで指定可能です。

必要ファイル
TnbPacketCommander.h
日付
10/08/24 新規作成
11/01/18 大幅改築
11/03/04 ExecuteCommand() の応答待ち中のキャンセルを追加
11/07/05 SendRawData() , SetLogger() 追加。 ILogger 、追加。
11/07/06 NotOpen を追加。
11/07/06 SetLogger() ILogger 、廃止。
11/07/13 SetAliveTime() 追加。
11/09/20 タイムアウト等で破棄されたデータもきちんとリスナーに上げるように修正。
12/02/29 SendCommand() -> SendPacket()SetBasicPacket() -> SetPacketFormat()
12/03/23 IListener::OnCommanderReceivedExpectationPacket() に対応。
14/05/16 IsConnect() 、追加。
15/02/20 SetTearminalTime() 追加。
15/03/18 ExecuteCommand() を分解したメソッド(Start, Wait, Stop)を追加。
18/09/22 PurgeQueue() 、追加。

TnbPacketCommander.h654 行目に定義があります。

列挙型メンバ詳解

◆ EFailure

enum EFailure

失敗種類

列挙値
Timeout 

タイムアウト

SendError 

送信エラー

Canceled 

キャンセル

NotOpen 

オープンしてない

TnbPacketCommander.h659 行目に定義があります。

構築子と解体子

◆ CPacketCommander()

CPacketCommander ( int  iQueueSize = 10000)

コンストラクタ

引数
iQueueSize受信Byteキューのサイズ。省略すると10000です。

TnbPacketCommander.h724 行目に定義があります。

◆ ~CPacketCommander()

~CPacketCommander ( void  )

デストラクタ

TnbPacketCommander.h729 行目に定義があります。

関数詳解

◆ CancelWaitResponse()

void CancelWaitResponse ( DWORD  threadId = 0)

[設定] レスポンス待ちキャンセル.

覚え書き
ExecuteCommand() で応答待ちを、このメソッドでとめることができます。 その場合、 ExecuteCommand() の戻り値は Canceled(-4) になります。
引数
threadIdスレッドID。省略すると、全てのタスクをキャンセル。

TnbPacketCommander.h1068 行目に定義があります。

◆ Close()

virtual void Close ( void  )
virtual

[設定] クローズ.

覚え書き
オープンしていなければ何もしません。

TnbPacketCommander.h849 行目に定義があります。

◆ ExecuteCommand()

virtual int ExecuteCommand ( IPacketCommandExecuter::IPacket _response,
const IPacketCommandExecuter::IPacket command,
DWORD  timeout = 500 
)
virtual

[実行] コマンド実行.

コマンドパケットを送信し、応答があるか、タイムアウトするまで関数はリターンしません。

覚え書き
コマンドパケットに生成する Serialize で Empty を返すクラスを渡すと送信しないので、レスポンス待ちのみできます。
引数
[out]_responseレスポンス型。成功時、結果が格納されます。
[in]commandコマンド型。
[in]timeoutレスポンスのタイムアウト時間(ms).
戻り値
0以上成功。
Timeoutタイムアウト。
SendError送信エラー。
NotOpen未オープン。
0未満その他のエラー(主に IPacketCommandExecuter::IPacket::Deserialize() の戻り値)。

IPacketCommandExecuterを実装しています。

TnbPacketCommander.h915 行目に定義があります。

◆ ExecuteCommand_Start()

int ExecuteCommand_Start ( IPacketCommandExecuter::IPacket _response,
const IPacketCommandExecuter::IPacket command 
)

[実行] コマンド実行(開始).

コマンドパケットを送信し、応答待ち準備をします。

覚え書き
通常 ExecuteCommand() を使用し、本メソッドは使用しません。
引数
[out]_responseレスポンス型。成功時、結果が格納されます。
[in]commandコマンド型。
戻り値
0以上成功。終了後、必ず ExecuteCommand_Stop() をコールしてください。
Timeoutタイムアウト。
SendError送信エラー。
NotOpen未オープン。
0未満その他のエラー(主に IPacketCommandExecuter::IPacket::Deserialize() の戻り値)。

TnbPacketCommander.h938 行目に定義があります。

◆ ExecuteCommand_Stop()

void ExecuteCommand_Stop ( IPacketCommandExecuter::IPacket response)

[実行] コマンド実行(終了).

ExecuteCommand_Start() を使った場合、必ず本メソッドを使用してください。

引数
responseレスポンス型。ExecuteCommand_Start() と同じオブジェクトを使用してください。

TnbPacketCommander.h1028 行目に定義があります。

◆ ExecuteCommand_Wait()

int ExecuteCommand_Wait ( IPacketCommandExecuter::IPacket _response,
DWORD  timeout = 500 
)

[実行] コマンド実行(待ち).

応答があるか、タイムアウトするまで関数はリターンしません。

覚え書き
通常 ExecuteCommand() を使用し、本メソッドは使用しません。
引数
[out]_responseレスポンス型。成功時、結果が格納されます。 ExecuteCommand_Start() と同じオブジェクトを使用してください。
[in]timeoutレスポンスのタイムアウト時間(ms).
戻り値
0以上成功。
Timeoutタイムアウト。
SendError送信エラー(ExecuteCommand_Start() が成功していない)。
NotOpen未オープン。
0未満その他のエラー(主に IPacketCommandExecuter::IPacket::Deserialize() の戻り値)。

TnbPacketCommander.h976 行目に定義があります。

◆ ExtendTimeout()

void ExtendTimeout ( DWORD  threadId = 0)

[設定] タイムアウト延長.

コマンドの応答待ちを延長します。これをコールした時にタイムアウト時間 の再設定が行われます(例えば、タイムアウト5秒の設定の場合で、コマンド送信後、 2秒後に本メソッドをコールすると、全部で7秒間、レスポンスを待ちます)。

覚え書き
リスナー内や、別スレッドから使用します。
引数
threadIdスレッドID。省略すると、全てのタスクを延長。

TnbPacketCommander.h1045 行目に定義があります。

◆ ExtendTimeoutEx()

void ExtendTimeoutEx ( DWORD  time,
DWORD  threadId = 0 
)

[設定] タイムアウト延長.

コマンドの応答待ちを指定時間、延長します。

覚え書き
リスナー内や、別スレッドから使用します。
引数
time延長する時間(ms)
threadIdスレッドID。省略すると、全てのタスクを延長。

TnbPacketCommander.h1057 行目に定義があります。

◆ GetQueueFreeSize()

size_t GetQueueFreeSize ( void  ) const

[取得] キュー空きサイズ取得.

戻り値
空きサイズ

TnbPacketCommander.h1100 行目に定義があります。

◆ IsConnect()

bool IsConnect ( void  ) const

[取得] 接続確認.

戻り値
true接続.
false切断.

TnbPacketCommander.h808 行目に定義があります。

◆ IsOpened()

bool IsOpened ( void  ) const

[取得] オープン確認.

戻り値
trueオープン済み.
false未オープン.

TnbPacketCommander.h794 行目に定義があります。

◆ Open()

bool Open ( IReport pRep,
bool  withQueueing = false 
)

[設定] オープン.

覚え書き
指定の レポータを使用してオープンします。
解析用パケットを登録していないと失敗します。
引数
pRepレポータ。クローズするまで破棄しないでください。
withQueueingture ならキューを使います。
戻り値
true成功.
false失敗.

TnbPacketCommander.h826 行目に定義があります。

◆ PurgeQueue()

void PurgeQueue ( void  )

[設定] キュークリア

TnbPacketCommander.h1108 行目に定義があります。

◆ ReferReporter()

IReport * ReferReporter ( void  )

[参照] レポーター参照.

戻り値
NULL未使用
NULL以外使用しているレポーター。

TnbPacketCommander.h1118 行目に定義があります。

◆ SendCommand()

int _deprecated SendCommand ( const IPacketCommandExecuter::IPacket packet)

[実行] パケット送信.

引数
packetパケット
戻り値
0以上成功。
SendError送信エラー。
NotOpen未オープン。
非推奨:
廃止予定です。 SendPacket() を使用してください。

TnbPacketCommander.h897 行目に定義があります。

◆ SendPacket()

virtual int SendPacket ( const IPacketCommandExecuter::IPacket packet)
virtual

[実行] パケット送信.

覚え書き
リスナーで受けたメソッドからも使用できます。
引数
packetパケット
戻り値
0以上成功。
SendError送信エラー。
NotOpen未オープン。

IPacketCommandExecuterを実装しています。

TnbPacketCommander.h867 行目に定義があります。

◆ SendRawData()

bool SendRawData ( size_t  size,
const BYTE *  pData 
)

[送信] 生データ送信.

任意のデータを送信することが出来ます。

引数
sizeサイズ
pDataデータ
戻り値
true成功.
false失敗.

TnbPacketCommander.h1081 行目に定義があります。

◆ SetAliveTime()

void SetAliveTime ( DWORD  time = DWORD_MAX)

[設定] キュー有効時間設定.

キュー格納後、一定時間受信がない場合、キュー内容を破棄することが出来ます。

覚え書き
Open() 時、 キューを使うを指定してない場合、この設定は無意味です。
SetTearminalTime() と同時に指定できません。
引数
timeキューの有効時間(ms)。最後に受信して解析してから指定時間経過したら、キューの先頭の一バイトを破棄して、 再度解析をします。省略時は無効( DWORD_MAX )です。

TnbPacketCommander.h772 行目に定義があります。

◆ SetBasicPacket()

void _deprecated SetBasicPacket ( IPacketCommandExecuter::IPacket pPacket)

[設定] 解析用パケット指定.

引数
pPacketパケット
非推奨:
廃止予定です。 SetPacketFormat() を使用してください。

TnbPacketCommander.h750 行目に定義があります。

◆ SetListener()

void SetListener ( IListener pListener)

[設定] リスナー設定.

引数
pListenerリスナー

TnbPacketCommander.h759 行目に定義があります。

◆ SetPacketFormat()

void SetPacketFormat ( IPacketCommandExecuter::IPacket pPacket)

[設定] 解析用パケット指定.

注意
本メソッドで指定したインスタンスは本クラス内で使用しますので、 操作することはしないでください。
引数
pPacketパケット

TnbPacketCommander.h740 行目に定義があります。

◆ SetTearminalTime()

void SetTearminalTime ( DWORD  time = DWORD_MAX)

[設定] 終端時間設定.

キュー格納後、一定時間受信がない場合にキュー内容を解析するようにします。

覚え書き
Open() 時、 キューを使うを指定してない場合、この設定は無意味です。
SetAliveTime() と同時に指定できません。
引数
time終端時間(ms)。

TnbPacketCommander.h784 行目に定義があります。