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種類のリクエストを処理する例を記載しています。
- 商品名問い合わせ
- クライアントからのリクエスト情報(pstrData)には、"0001"(処理区分)に続いて商品コードがセットされていると想定。
- 商品コードでデータベースを検索し、商品名をレスポンス情報として返す。
- 商品画像問い合わせ
- リクエスト情報には、"0002"(処理区分)に続いて商品コードがセットされていると想定。
- 商品コードでデータベースを検索し、商品画像ファイルのパスを取得し、クライアントへ画像ファイルを送信。
- 正常応答のレスポンス情報を返す。
- 日報報告
- リクエスト情報には、"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メソッドで送信してください。
|