WebSocket說明
# TaskRunner WebSocket說明
TaskRunner 包含 WebSocket 客戶端與 WebSocket 伺服器,可與 FastWeb 的 WebSocket 伺服器或者TaskRunner 自帶的WebSocket 伺服器連線,其他客戶端可發送 WebSocket 訊息實現遠端執行 TaskRunner 功能。如需要了解 FastWeb 中 WebSocket的通訊方式請參考 Bean通訊。
# 1. 設定
使用 WebSocket 服務的功能前,請先檢查 TaskRunner 中 WebSocket 設定是否正確。如設定正確,TaskRunner 運行後日志中顯示 WebSocket客戶端連線成功
。
TaskRunner自帶的WebSocket伺服器的地址與HTTP服務地址一致,埠號也與HTTP服務的埠號一致。預設為 8080
,預設的WS路徑使用 /message
。
使用websocket路徑的格式如下:
ws://localhost:8080/message
如果服務端啟用了SSL,假設示例埠為 8443
,預設的WS路徑使用 /message
,則相應的路徑格式如下:
wss://localhost:8443/message
如果啟用了身份認證,則 WS 路徑如下:
ws://localhost:8080/sgc/auth/url/{USERNAME}/{PASSWORD}
其中 {USERNAME}
與 {PASSWORD}
處分別修改爲對應連線使用的使用者名稱與密碼。
# 2. 運用
TaskRunner 的任務執行需配合 FastWeb 或者通用WebSocket客戶端使用。
# 2.1. 註冊會話
連線至WebSocket伺服器后,需註冊會話才可使用TaskRunner的WebSocket功能。註冊會話的格式如下:
{"action":"login","sid":"test"}
向WebSocket伺服器發送上述指令后,客戶端會話註冊完成,使用的WS會話ID為 test
。
# 2.2. 發送字串訊息
向其它連線的客戶端發送字串訊息,使用以下格式進行發送。
{"action":"msg","sid":"{SID}","text":"{TEXT}"}
{SID}
為目標客戶端的註冊會話ID,{TEXT}
為發送的文字資訊。
# 2.3. Cmd 批處理
以下是通過直接執行的方式運行批處理的示例。可呼叫批處理語句執行程式重啟。
{"action":"script","syntaxtype":"cmd","script":"taskkill /im TARS.exe /f & ping 127.0.0.1 -n 1 & start \"\" \"C:\\Program Files\\IsoFace\\TARS\\TARS.exe\" "}
除上述方式外,也支援直接執行自定程式列表中批處理型別的自定程式。在自定程式列表中建立 tars
的Cmd
型別自定程式,設計程式內容如下。
echo
:結束程序
taskkill /im TARS.exe /f
:執行下一步驟前等待1秒
ping 127.0.0.1 -n 1
start "" "C:\Program Files\IsoFace\TARS\TARS.exe"
echo
2
3
4
5
6
7
在任一已連線的WebSocket客戶端中發送以下格式的資訊,可執行上述批處理程式。
{"action":"script","taskname":"tars"}
# 2.4. PowerShell 批處理
以下是通過直接執行的方式運行批處理的示例。可呼叫批處理語句執行程式重啟。
{"action":"script","syntaxtype":"powershell","script":"$directory = \"E:\\setup\";$filename = \"test.txt\";$content = \"hello world\";$filePath = Join-Path -Path $directory -ChildPath $filename;if (-not (Test-Path -Path $directory)) {New-Item -ItemType Directory -Path $directory};Set-Content -Path $filePath -Value $content;Write-Output \"file created:$filePath\";"}
除上述方式外,也支援直接執行自定程式列表中批處理型別的自定程式。在自定程式列表中建立 ps_test
的PowerShell
型別自定程式,設計程式內容如下。
# 指定目錄位置
$directory = "E:\setup"
# 指定檔名
$filename = "test.txt"
# 指定檔案內容
$content = "hello world"
# 建立完整的檔案路徑
$filePath = Join-Path -Path $directory -ChildPath $filename
# 建立目錄(如果不存在)
if (-not (Test-Path -Path $directory)) {
New-Item -ItemType Directory -Path $directory
}
# 建立並寫入檔案內容
Set-Content -Path $filePath -Value $content
# 輸出檔案建立成功訊息
Write-Output "file created:$filePath"
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
在任一已連線的WebSocket客戶端中發送以下格式的資訊,可執行上述批處理程式。
{"action":"script","taskname":"ps_test"}
# 2.5. JScript/PascalScript 任務
TaskRunner 通過 WebSocket 訊息呼叫可實現 JScript/PascalScript 的執行。
{"action":"script","syntaxtype":"jscript","script":"{DoOpenBrowser(\"chrome.exe\",\"--kiosk https://isoface.net \",0);}"}
除上述方式外,也支援執行自定程式列表中型別為 JScript
的自定程式。建立一個名為 browser
,型別為JScript
自定程式,內容如下。
//呼叫Chrome瀏覽器打開https://isoface.net/網頁
{
DoOpenBrowser("chrome.exe","--kiosk https://isoface.net",0);
}
2
3
4
在任一已註冊會話ID的WebSocket客戶端中發送以下格式的資訊,可執行上述JScript程式。
{"action":"script","taskname":"browser"}
如果需要在JS程式中引入參數資訊,則 JScript
自定程式可改寫如下,將需要參數化的變數取值替換為 UgParams.Values["param_name"]
:
{
DoOpenBrowser("chrome.exe","--kiosk " + UgParams.Values["url"],0);
}
2
3
如程式與參數直接通過json傳入,直接呼叫的用法如下:
{
"action": "script",
"syntaxtype": "jscript",
"script": "{DoOpenBrowser(\"chrome.exe\",\"--kiosk \" + UgParams.Values[\"url\"],0);}",
"params":[{"name":"url","value":"https://isoface.net"}]
}
2
3
4
5
6
如在自定程式中設定了參數,在任一已註冊會話ID的WebSocket客戶端中,發送以下格式的資訊,可執行上述JScript程式。
{"action":"script","taskname":"browser","params":[{"name":"url","value":"https://isoface.net"}]}
使用參數的json新增了 params
佇列,可在其中根據參數需要修改取值。
{
"action": "script",
"taksname": "task_name",
"params": [
{
"name": "param_name1",
"value": "param_value1"
},
{
"name": "param_name2",
"value": "param_value2"
},
...
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 2.6. 運行工作流
使用websocket客戶端發送以下格式的資訊,以執行工作流。
{"action":"workflow","name":"test_wf"}
如果需要從呼叫中獲取參數作為工作流的變數取值使用,則發送的格式如下:
{"action":"workflow","name":"test_wf","params":[{"name":"Var1","value":"111"}]}
# 2.7. 在JS程式中使用WebSocket
如需要在JS自定程式中使用WebSocket功能,可參考自定函式與自定程式中的函式、程式說明使用。
- WSClient_WriteStream:客戶端發送流訊息。
- WSClient_WriteString:客戶端發送字串訊息。
- WSClient_WriteIsoBean:客戶端發送 IsoBean 關聯的字串資訊。
- WSServer_BroadcastString:服務端發送字串廣播訊息。
- WSServer_BroadcastStream:服務端發送流廣播訊息。
- WSServer_WriteStream:服務端發送流訊息。
- WSServer_WriteString:服務端發送字串訊息。
- GetWebSocketGUID:根據會話ID獲取WebSocket連線的GUID。
# 2.8. 執行資料庫查詢(SQL)
在 TaskRunner 中設定了資料庫連線與預設 SQL 后,可利用 TaskRunner 來執行 SQL 查詢。發送的格式內容如下:
直接發送 SQL 語句:在 WebSocket 訊息中可直接發送 SQL 語句來執行查詢。示例如下(包含參數用法):
{
"action": "execsql",
"db_name": "demo",
"sql": "Insert Into Table_Test(FCode,FName) values(:F1,:F2)",
"params": [
{
"name": "F1",
"value": "003"
},
{
"name": "F2",
"value": "f37"
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
使用預設 SQL 執行查詢:如在預設 SQL 中設定了查詢資訊,可發送需查詢的預設 SQL 來執行查詢。建立一個名稱為 SQL001
的預設 SQL,查詢語句示例如下(包含參數用法):
Insert Into Table_Test(FCode,FName) values(:F1,:F2)
呼叫 WebSocket 執行資料庫查詢的文字示例如下:
{
"action": "execsql",
"db_name": "demo",
"sql_command_id": "SQL001",
"params": [
{
"name": "F1",
"value": "043"
},
{
"name": "F2",
"value": "d23"
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15