TRL:Terminal Request Library
ターミナルリクエストライブラリ

TrlServerLib(Windows版)- VBAでの利用

インストール方法
  1. PC上にダウンロードしたファイルを展開(解凍)してください。
  2. フォルダ内の「TrlDotNetComRegister.exe」を管理者権限で実行してください。
  3. ExcelやAccessのVBA画面から、「参照設定」で「TrlServerLib」を参照してください。

※開発したPC以外で使用する場合も、そのPC上で上記1~2の作業が必要になります。



アンインストール方法
  1. インストール時に展開したフォルダを使用します。
  2. フォルダ内の「TrlDotNetComUnregister.exe」を管理者権限で実行してください。
  3. もう使わなければ、フォルダごと削除してください。

※開発したPC以外で使用した場合も、そのPC上で上記と同様の作業が必要になります。



使用方法
 Excelを例に記載していますが、AccessでもFormを使って使用できます。

クラスの宣言
 UserFormのモジュール内で、TrlServerLib.Serverクラスを宣言してください。
Option Explicit

    Private WithEvents objTrlServer As TrlServerLib.Server


インスタンスの作成と破棄
 UserFormのInitializeイベントなどでServerクラスのインスタンスを作成します。
Private Sub UserForm_Initialize()

    Set objTrlServer = New TrlServerLib.Server
    
End Sub
 UserFormのTerminateイベントなどでServerクラスのインスタンスを破棄します。
Private Sub UserForm_Terminate()

    Set objTrlServer = Nothing
    
End Sub

通信待ち受けの開始と終了
 CommandButtonのClickイベントなどに、待ち受け開始と終了のロジックを追加します。下記の例ではCommandButtonのCaptionを"通信開始"としておきます。TrlStartで待ち受けスレッドを開始した場合、プログラム終了前に必ずTrlStopを実行する必要があります。
Private Sub CommandButton1_Click()

    Dim strErrorMessage As String

    If CommandButton1.Caption = "通信開始" Then
        If objTrlServer.TrlStart(TrlServerLib.TRL_THREAD_MODE_mSingle, _
            CLng(TextBox2.Text), _
            strErrorMessage, "") = True Then

            CommandButton1.Caption = "通信停止"
        Else
            Call MsgBox(strErrorMessage, vbExclamation)
        End If
    Else
        Call objTrlServer.TrlStop
    End If

End Sub
TrlStartメソッド
クライアントからの通信待ち受けを開始します。 TrlStart( _ ByVal pintThreadMode As TrlServerLib.TRL_THREAD_MODE, _ ByVal pintPort As Long, _ ByRef pstrErrorMessage As String, _ ByVal pstrReserved As String) As Boolean
引数内容
pintThreadMode TrlServerLib.TRL_THREAD_MODE型
かならず、TRL_THREAD_MODE_mSingle を指定してください。
pintPort Long型
通信を待ち受ける為のTCPソケット番号(65000~65500を推奨)。他のアプリケーションと重ならない値を渡してください。
pstrErrorMessage String型
メソッドが失敗した場合に、エラーメッセージが返されます。
pstrReserved String型
現在未使用です。空文字列("")を指定してください。
戻り値
Boolean型
True
待ち受け成功です。

False
待ち受け失敗です。エラーメッセージが、pstrErrorMessageに格納されています。
TrlStopメソッド
クライアントからの通信待ち受けを終了します。 TrlStop()

イベントプロシージャの定義
 コードの表示画面の上段にあるドロップダウンリストの「オブジェクト」で「objTrlServer」を選択します。
続いて、ドロップダウンリストの「プロシージャ」で「TrlServerEvent」を選択するとイベントプロシージャがコード内に現れます。

以下の例では、通信状況を表示するためListBoxをひとつフォーム上に配置しています。
クライアントから以下の3種類のリクエストを処理する例を記載しています。
  1. 商品名問い合わせ
    • クライアントからのリクエスト情報(pstrData)には、"0001"(処理区分)に続いて商品コードがセットされていると想定。
    • 商品コードでデータベースを検索し、商品名をレスポンス情報として返す。
  2. 商品画像問い合わせ
    • リクエスト情報には、"0002"(処理区分)に続いて商品コードがセットされていると想定。
    • 商品コードでデータベースを検索し、商品画像ファイルのパスを取得し、クライアントへ画像ファイルを送信。
    • 正常応答のレスポンス情報を返す。
  3. 日報報告
    • リクエスト情報には、"0003"(処理区分)に続いて日報ファイル名がセットされていると想定。
    • 日報ファイル名を使用して、クライアントから日報ファイルを受信。
    • 正常応答のレスポンス情報を返す。
Private Sub objTrlServer_TrlServerEvent( _
    ByVal pobjHandle As Variant, _
    ByVal pintStatus As TrlServerLib.TRL_STATUS, _
    ByVal pintCommandSerialNumber As Long, _
    ByVal pstrIp As String, _
    ByVal pstrClientKey As String, _
    ByVal pstrData As String, _
    ByVal pstrErrorMessage As String)

    Dim strItemName As String
    Dim strItemPicturePath As String
    Dim strFuncError As String

    Select Case pintStatus

        Case TrlServerLib.TRL_STATUS_mListenerInfo

            Call mdlSetList("[Server]" & Replace(pstrData, vbCrLf, ""), 0)

        Case TrlServerLib.TRL_STATUS_mListenerError

            Call mdlSetList("[Server]" & Replace(pstrErrorMessage, vbCrLf, ""), 0)
            CommandButton1.Caption = "通信開始"

        Case TrlServerLib.TRL_STATUS_mListenerStop

            Call mdlSetList("[Server]" & Replace(pstrData, vbCrLf, ""), 0)
            CommandButton1.Caption = "通信開始"

        Case TrlServerLib.TRL_STATUS_mClientAccept

            Call mdlSetList("[" & pstrIp & "/" & RTrim(pstrClientKey) & "]" & "接続されました。", 0)

            Select Case Mid(pstrData, 1, 4)

                Case "0001" '商品名問い合わせ

                    If mdlGetItemName(Mid(pstrData, 5), strItemName, strFuncError) = True Then
                        Call objTrlServer.TrlResponse(pobjHandle, 1, "1:" & strItemName)
                    Else
                        Call objTrlServer.TrlResponse(pobjHandle, 1, "0:" & strFuncError) '商品名問い合わせ失敗
                    End If

                Case "0002" '商品画像問い合わせ

                    If mdlGetItemPicrture(Mid(pstrData, 5), strItemPicturePath, strFuncError) = True Then
                        Call objTrlServer.TrlSendFile(pobjHandle, 1, strItemPicturePath, "ItemPicture.jpg", "")
                    Else
                        Call objTrlServer.TrlResponse(pobjHandle, 2, "0:" & strFuncError) '商品画像問い合わせ失敗
                    End If

                Case "0003" '日報報告

                    Call objTrlServer.TrlRecvFile(pobjHandle, 1, _
                        RTrim(pstrClientKey) & "_" & Mid(pstrData, 5), Mid(pstrData, 5))

            End Select

        Case TrlServerLib.TRL_STATUS_mClientSuccess

            Select Case Mid(pstrData, 1, 4)

                Case "0001" '商品名問い合わせ

                    If pintCommandSerialNumber = 1 Then
                        Call mdlSetList("[" & pstrIp & "/" & RTrim(pstrClientKey) & "]" & "Response成功", 0)
                    End If

                Case "0002" '商品画像問い合わせ

                    If pintCommandSerialNumber = 1 Then
                        Call mdlSetList("[" & pstrIp & "/" & RTrim(pstrClientKey) & "]" & "SendFile成功", 0)
                        Call objTrlServer.TrlResponse(pobjHandle, 2, "1:") '商品画像問い合わせ成功
                    ElseIf pintCommandSerialNumber = 2 Then
                        Call mdlSetList("[" & pstrIp & "/" & RTrim(pstrClientKey) & "]" & "Response成功", 0)
                    End If

                Case "0003" '日報報告

                    If pintCommandSerialNumber = 1 Then
                        Call mdlSetList("[" & pstrIp & "/" & RTrim(pstrClientKey) & "]" & "RecvFile成功", 0)
                        Call objTrlServer.TrlResponse(pobjHandle, 2, "1:") '日報報告成功
                    ElseIf pintCommandSerialNumber = 2 Then
                        Call mdlSetList("[" & pstrIp & "/" & RTrim(pstrClientKey) & "]" & "Response成功", 0)
                    End If

            End Select

            Case TrlServerLib.TRL_STATUS_mClientError

                Call mdlSetList("[" & pstrIp & "/" & RTrim(pstrClientKey) & "]" & Replace(pstrErrorMessage, vbCrLf, ""), 0)

    End Select
End Sub

Private Sub mdlSetList(ByVal pstrBuff As String)

    Call ListBox1.AddItem(Format(Now(), "yyyy/mm/dd hh:nn:ss") & pstrBuff, 0)
    ListBox1.Selected(0) = True

End Sub

'--- このロジックはTRLと直接関係ないため省略します。
Private Function mdlGetItemName(ByVal pstrItemCode As String, ByRef pstrItemName As String, ByRef pstrError As String) As Boolean
    ・・・
    '商品情報検索ロジック
    ・・・
End Function

'--- このロジックはTRLと直接関係ないため省略します。
Private Function mdlGetItemPicrture(ByVal pstrItemCode As String, ByRef pstrItemPicturePath As String, ByRef pstrError As String) As Boolean
    ・・・
    '商品画像検索ロジック
    ・・・
End Function

TrlServerEventイベント
クライアントからリクエストがあると発生します。 また、コマンドの実行結果や、待ち受けスレッドからの情報が報告されます。 Private Sub objTrlServer_TrlServerEvent( _ ByVal pobjHandle As Variant, _ ByVal pintStatus As TrlServerLib.TRL_STATUS, _ ByVal pintCommandSerialNumber As Long, _ ByVal pstrIp As String, _ ByVal pstrClientKey As String, _ ByVal pstrData As String, _ ByVal pstrErrorMessage As String)
引数内容
pobjHandle Variant型
この値はクライアント接続情報のクラスインスタンスです。コマンドを実行する際にそのまま渡してください。
pintStatus TrlServerLib.TRL_STATUS型
TRL_STATUS_mListenerInfo
待ち受けスレッドからの状況報告です。pstrDataに報告内容が格納されています。

TRL_STATUS_mListenerError
待ち受けスレッドからのエラー報告です。pstrErrorMessageにエラー内容が格納されています。待ち受けスレッドは停止します。

TRL_STATUS_mListenerStop
待ち受けスレッドからの終了報告です。pstrDataに終了した旨が格納されています。待ち受けスレッドは停止します。TrlStopが呼ばれると発生します。

TRL_STATUS_mClientAccept
クライアントからのリクエストを受けたときに発生します。

TRL_STATUS_mClientSuccess
クライアントへのコマンドが成功したときに発生します。TrlResponseの成功時である場合、クライアントは切断されます。

TRL_STATUS_mClientError
クライアントへのコマンドが失敗したときに発生します。クライアントは切断されます。
pintCommandSerialNumber Long型
コマンド実行時にセットするコマンドシリアル番号です。pintStatusがmClientSuccessやmClientErrorの場合に、そのままこの値がセットされてきます。どのステップのどのコマンドの結果を受け取ったのかの判断に使用できます。コマンド結果以外の場合は0がセットされてきます。
pstrIp String型
クライアントのIPアドレスです。どの端末からのリクエストかを判断できます。この値は、クライアントの切断まで、同じ値がセットされてきます。
pstrClientKey String型
クライアントからリクエスト時にセットされたクライアント情報です。コンピュータ名や端末番号などがセットされることを想定しています。これにより、どの端末からのリクエストかを判断できます。この値は、クライアントの切断まで、同じ値がセットされてきます。
pstrData String型
クライアントからリクエスト時にセットされたリクエスト情報です。この値はクライアントから任意の文字列をセットできるので、処理を判別したり情報を受け渡したりすることができます。この値は、クライアントの切断まで、同じ値がセットされてきます。
pstrErrorMessage String型
クライアントへのコマンドが失敗した場合などに、エラーメッセージが返されます。
TrlSendFileメソッド(コマンド)
クライアントへファイルを送信します。 ※ファイルは2MBまでの大きさのものしか送信できません。 TrlSendFile( _ ByVal pobjHandle As Variant, _ ByVal pintCommandSerialNumber As Long, _ ByVal pstrLocalFilePath As String, _ ByVal pstrRemoteFileName As String, _ ByVal pstrFieldInfo As String)
引数内容
pobjHandle Variant型
TrlServerEventイベントで受け取ったものをそのまま渡してください。
pintCommandSerialNumber Long型
コマンドシリアル番号です。任意の値を設定してください。このコマンドを実行した結果通知をTrlServerEventで受け取る際、そのままこの値がセットされてきます。
pstrLocalFilePath String型
送信するファイルのパスを指定します。
pstrRemoteFileName String型
クライアント側で保存する時のファイル名です。
pstrFieldInfo String型
現在未使用です。空文字列("")を指定してください。
TrlRecvFileメソッド(コマンド)
クライアントからファイルを受信します。 ※ファイルは2MBまでの大きさのものしか受信できません。 TrlRecvFile( _ ByVal pobjHandle As Variant, _ ByVal pintCommandSerialNumber As Long, _ ByVal pstrLocalFilePath As String, _ ByVal pstrRemoteFileName As String)
引数内容
pobjHandle Variant型
TrlServerEventイベントで受け取ったものをそのまま渡してください。
pintCommandSerialNumber Long型
コマンドシリアル番号です。任意の値を設定してください。このコマンドを実行した結果通知をTrlServerEventで受け取る際、そのままこの値がセットされてきます。
pstrLocalFilePath String型
受信したファイルを保存する時のパスを指定します。
pstrRemoteFileName String型
クライアント側の受信するファイル名です。
TrlResponseメソッド(コマンド)
クライアントへレスポンスを送信します。 TrlResponse( _ ByVal pobjHandle As Variant, _ ByVal pintCommandSerialNumber As Long, _ ByVal pstrResponse As String)
引数内容
pobjHandle Variant型
TrlServerEventイベントで受け取ったものをそのまま渡してください。
pintCommandSerialNumber Long型
コマンドシリアル番号です。任意の値を設定してください。このコマンドを実行した結果通知をTrlServerEventで受け取る際、そのままこの値がセットされてきます。
pstrResponse String型
レスポンスとして送信する任意の文字列を指定してください。 ※送信できるレスポンスは1KBまでです。 なお、この引数はShift-JISにエンコードしてバイナリデータとして送信され、クライアント側で適切なエンコードに戻されます。よって、送信できる文字数は、すべてが半角文字であれば1024文字、すべてが全角文字であれば512文字ということになります。バイナリ情報などを送信したい場合は一旦ファイルに出力してから、TrlSendFileメソッドで送信してください。

ダウンロード
ファイル内容
20170207_TrlServerLib_Windows.zip バージョン1.0.0.0を配布します。
バージョン0.0.0.0から起動時ダイアログ表示を廃止したものです。
十分、動作ご確認の上、ご利用ください。 ※使用するPCには、.NET Framework 2.0/3.0/3.5のいずれかがインストールされている必要があります。
20160415_TrlServerLib_Windows.zip ベータ版(バージョン0.0.0.0)を配布します。十分、動作ご確認の上、ご利用ください。 ※使用するPCには、.NET Framework 2.0/3.0/3.5のいずれかがインストールされている必要があります。





累積:
今日:
昨日:
Copyright (C) 2016 森山商店 All Rights Reserved.