さくらスクリプト通信プロトコル(SSTP)を使って、ローカルホスト上のSSTPサーバと通信するコンポーネントです。
DirectSSTPにのみ対応しています。
SenderName: String [読/書][設/実]
SSTPのSenderヘッダ文字列を設定します。つまり送り手のアプリケーション(Delphi側)のアプリケーション名です。自分が開発しているアプリケーションの名前を入れてください。デフォルトは「My Program」ですが、必ず変更する必要があります。
StatusCode: Integer [読のみ][実のみ]
最後に発行したSSTPリクエストによって帰ってきた、ステータスコードの数値が入ります。OKなら200番台、それ以外ならエラーです。詳しくは、SSTP仕様書をご覧ください。
SentLog: String [読のみ][実のみ]
最後に発行したSSTP文がそのまま入っています。チェックにどうぞ。再送の直後にも再送のときに発行した文が入っています。
RecvLog: String [読のみ][実のみ]
最後に行った通信による、SSTPサーバからのレスポンスが全部記録されています。再送の直後にも再送のときのレスポンスが入っています。
LastStatus: TSstpResult; [読のみ][実のみ]
最後のSSTPサーバからのレスポンスが、TSstpResult型(コード参照)で入っています。
CueCount: integer; [読のみ][実のみ]
再送キューに現在入っているSENDメッセージの数を返します。
Interval: integer; [読/書][設/実]
再送キューから再送を行う間隔をミリ秒で指定します。1000より小さい値も設定できますが、SSTPサーバに過負荷を与える可能性がありますので、できるだけ設定しないようにしてください。
Sleep: boolean; [読/書][設/実]
再送キューからの再送を一時停止します。Sleep = trueの間は、SstpSENDCueメソッドによってメッセージが入力されても、コンポーネント内部で記憶されるだけで、実際にはSSTPサーバには送信されません。Sleep = falseになったときに、送信され始めます。
TargetHWnd: THandle; [読/書][設/実]
[DirectSSTP]ターゲットウィンドウハンドルを設定します。
Handle: THandle; [読のみ][実のみ]
[DirectSSTP]FastSSTPは、内部でウィンドウハンドルを1つ作成し、これを使ってSSTPサーバとDirectSSTP通信を行います。
このプロパティは、そのウィンドウハンドルを返します。DirectSSTPでSSTP文のHWndに設定させれるハンドルです。
独自のSSTP文を作りたいのでない限り、直接利用することはあまりないと思います。
function TFastSstp.SstpSEND(const Script: String;
const Option: TSstpSendOptions = []): TSstpResult; overload;
function SstpSEND(const Script: TStrings;
const Option: TSstpSendOptions = [];
const Handle: HWND = 0): TSstpResult; overload;
SENDリクエストをすぐに送信します。自動的にSSTPサーバと接続し、SENDリクエストを送信し、ステータスコードを受け取ります。Scriptには、認識可能なさくらスクリプト本文を、Optionには、set of (soNoDescript, soNoTranslate)を渡します。
オーバーロード関数ですので、引数によって適切な方が呼ばれます。
第1の呼び出しは、引数にString型を取る、SSTP/1.1相当の単純なSENDリクエストを送信します。
第2の呼び出しは、SSTP/1.2および1.3に対応します。引数にTStrings型を取ります。Script: TStringsはメソッド内部では解放されませんので自前で解放処理してください。Scriptの1行目(Script[0])がScriptエントリに、2行目以降はEntryエントリに変換されて送信されます。
[TCP/IP] TCP/IPで送信する場合、Handleに0以外の値を設定すると、HWndエントリが送信されます。不要ならHandle=0としてください。
[DirectSSTP] DirectSSTPモードでは、Handleの値が優先されますが、これが省略された場合でも、デフォルトのHWndエントリが送信されます(当然)。
戻り値はTSstpResult列挙型の値です。ステータスコードの数値自体で結果を知りたい場合はStatusCodeプロパティを使用してください。
function TFastSstp.SstpSENDCue(const Script: String;
const HighPriority: boolean = false;
const Option: TSstpSendOptions = []): integer;
SENDリクエストを、再送モードで送信します。このメソッドで呼び出された場合、そのスクリプトはすぐには送信されず、再送キュー(FSendCue)に入ります。再送キューに送られたスクリプトは、Intervalミリ秒間隔で、自動的にSSTPサーバに送信されます。Intervalプロパティも参照してください。
HighPriority = trueの場合、キューの先頭に配置されますので、すぐに送信されます。falseの場合は、キューの後ろ側に付け足されます。
キューが空だった場合を除き、すぐに送信されるわけではないので、戻り値はTSstpResult型ではありません。代わりに、そのメッセージを識別するinteger値がIDとして生成され、返されます。再送に関係する各種イベントは、メッセージの再送のときに、このIDをパラメータとして渡しますので、IDを記憶しておく事で、メッセージを同定することが可能です。
function TFastSstp.SstpEXECUTE(const Command: String): String;
EXECUTEリクエストを送信します。自動的にSSTPサーバと接続し、EXECUTEリクエストを送信し、ステータスコードと追加データを受け取ったあと切断します。
追加データはString変数に入っています。
関数呼び出しが成功したかどうかについては、LastStatusプロパティで参照してください。
function TFastSstp.SstpCOMMUNICATE(const Sentence: String
const Port: integer = 0): TSstpResult;
COMMUNICATE/1.2リクエストを送信します。Portに0を指定する(引数を省略すれば自動的に0になります)場合、COMMUNICATE/1.1相当のリクエストとなります。Portに0以外の値を指定すれば、COMMUNICATE/1.2相当のリクエストとなります。
function TFastSstp.SstpGIVE(const Document: String): TSstpResult;
GIVE/1.0リクエストを送信します。内部でSstpGIVE1_1メソッドを呼び出します。互換性のために残っていますが、使っても差し支えありません。
function TFastSstp.SstpGIVE1_1(const Data: String;
const DataType: TGiveType = gtDocument): TSstpResult;
GIVE/1.1リクエストを送信します。DataTypeには、gtDocumentまたはgtSongnameを渡します。
Dataパラメータに、それに応じたデータを渡してください。
戻り値はサーバからの応答です。
function TFastSstp.SstpExGetName: String;
EXECUTEメソッドでgetnameコマンドを発行し、その結果の文字列を返します。
function TFastSstp.SstpExSetCookie(const Key, Value: String):
TSstpResult;
EXECUTEメソッドでSetCookieコマンドを発行します。
複数行のデータには対応しません(つまり、#13#10が含まれるデータの改行は自動的に消します)
function TFastSstp.SstpExGetCookie(const Key: String): String;
EXECUTEメソッドでGetCookieコマンドを発行し、その結果の文字列を返します。
複数行のデータには対応しません(つまり、#13#10が含まれるデータの改行は自動的に消します)
function TFastSstp.SstpExGetVersion: String;
EXECUTEメソッドでGetVersionを発行し、ステータスコードを返します。
function TFastSstp.SstpExQuiet(const Quiet: boolean): TSstpResult;
EXECUTEメソッドでQuietまたはRestoreを発行し、ステータスコードを返します。
Quiet = trueでQuiet, Quiet = falseでRestoreを発行です。
procedure ClearCue;
再送キューに入っているメッセージを全部削除します。
OnResendResend
再送キューのメッセージの送信に失敗し、そのメッセージをもう一度後で送りなおすと決定されたときに発生します。
このイベントハンドラの中で、LastStatus, StatusCodeにアクセスできます。
OnResendEnd
再送キューのメッセージの送信に成功し、そのメッセージを再送キューから削除するときに発生します。
このイベントハンドラの中で、LastStatus, StatusCodeにアクセスできます。
OnResendTrying
再送キューのメッセージの送信直前に発生します。
OnResendCountChange
再送キューの登録数が変わった直後に発生します。登録数は、CueCountプロパティで参照してください。
OnAfterConnection
全てのSSTPリクエストが送信し終わった直後に発生します。RecvLog,
SentLog, LastStatus, StatusCodeの各プロパティにアクセスできます。SSTP文の発行回数のカウントくらいには使えるかもしれません。
内部処理が違うので、SstpExTimeOutの場合には発生しません。
新規アプリケーションを1つ作成し、フォームにTFastSstpを1つ配置します。SenderNameプロパティに、適当な名前を付けてあげてください。フォームのOnCreateイベントに次のように書きます。
procedure TForm1.Form1OnCreate(Sender: TObject);
begin
FastSstp1.SstpSEND('\s0\hテストプログラムが起動したよ。\e', [soNoDescript]);
end;
あとはこのアプリケーションを実行するだけです。