ATS-4是基於QXSL的業餘Radio競賽的自動接受和製表系統。隨時訪問AllJA1 ATS-4。
可以使用Docker圖像。將以下腳本粘貼到終端並運行它。
echo -n ' enter mail hostname: '
read host
echo -n ' enter mail username: '
read user
echo -n ' enter mail password: '
read pass
cat << EOS > docker-compose.yaml
version: '3'
services:
ATS4:
image: ghcr.io/nextzlog/ats4:master
ports:
- 9000:9000
volumes:
- ./ats/data:/ats/data
- ./ats/logs:/ats/logs
command: /ats/bin/ats4
environment:
TZ: Asia/Tokyo
ATS4_MAIL_HOST: $host
ATS4_MAIL_USER: $user
ATS4_MAIL_PASS: $pass
ATS4_MAIL_MOCK: false
ATS4_RULE_FILE: /rules/ats.rb
www:
image: nginx:latest
ports:
- 80:80
volumes:
- ./proxy.conf:/etc/nginx/conf.d/default.conf
EOS
echo -n ' enter server domain: '
read name
cat << EOS > proxy.conf
server {
server_name $name ;
location / {
proxy_pass http://ATS4:9000;
location ~ /admin {
allow 127.0.0.1;
deny all;
}
}
}
EOS
docker compose up -d然後,將瀏覽器指向http:// localhost並驗證ATS-4正在運行。
首先,創建docker-compose.yaml如下:
version : ' 3 '
services :
ATS4 :
image : ghcr.io/nextzlog/ats4:master
ports :
- 9000:9000
volumes :
- ./ats/data:/ats/data
- ./ats/logs:/ats/logs
command : /ats/bin/ats4
environment :
TZ : Asia/Tokyo
ATS4_MAIL_HOST : $host
ATS4_MAIL_USER : $user
ATS4_MAIL_PASS : $pass
ATS4_MAIL_MOCK : false
ATS4_RULE_FILE : /rules/ats.rb
www :
image : nginx:latest
ports :
- 80:80
volumes :
- ./proxy.conf:/etc/nginx/conf.d/default.conf然後,請按照下面的說明進行操作。
創建proxy.conf如下:
server {
server_name localhost;
location / {
proxy_pass http://ATS4:9000;
location ~ /admin {
allow 127.0.0.1 ;
deny all ;
}
}
}確保未經授權的客戶無法訪問/admin下的管理頁面。將容器的80端口曝光到Internet,以便無法訪問管理頁面。
在docker-compose.yaml中配置環境變量如下:
environment :
ATS4_MAIL_HOST : $host
ATS4_MAIL_USER : $user
ATS4_MAIL_PASS : $pass
ATS4_MAIL_MOCK : false正確修改設置。
在docker-compose.yaml中配置環境變量如下:
environment :
ATS4_RULE_FILE : /rules/ats.rb
# ATS4_RULE_FILE: /rules/1am.rb
# ATS4_RULE_FILE: /rules/ja1.rb
# ATS4_RULE_FILE: /rules/uec.rb當然,您可以通過將外部紅寶石文件安裝到容器中來指定不同的規則。例如,請參見ats.rb
最後,創建一個容器如下:
$ docker compose up -d訪問80個容器的端口。
停止並卸下容器,如下所示:
$ docker compose down拉動最新圖像如下:
$ docker pull ghcr.io/nextzlog/ats4:master您可以通過在開發模式下啟動ATS-4來更改Scala代碼和配置,而無需重新啟動:如下:
$ sbt run然後,訪問http:// localhost:9000/admin/shell以交互制定競賽規則。您可以通過將QSO數據附加到Web表單來測試評分算法。
ATS-4提供了實時比賽的流媒體API。
競賽參與者將提前向ATS-4註冊其帳戶信息。 ATS-4通過將GET請求發送到http://localhost:8873?id=<UUID>來返回安全密鑰(UUID)。客戶可以通過在8873端口和Access /agent/<UUID>上偵聽來檢索密鑰。
比賽開始時,客戶端始終通過WebSocket連接到服務器。每次參與者在播出另一個參與者時,客戶都會將QSO記錄中的差異發送到服務器。從客戶端到服務器的消息必須遵循以下格式。
| 位置 | 場地 |
|---|---|
| 第一字節 | 刪除QSO的數量 |
| 順序 | QSO數據的標題 |
| 順序 | QSO實體要刪除 |
| 順序 | QSO實體附加 |
消息的第二個和後續字節格式化為單個電子日誌文件。格式必須由QXSL庫正式支持。
服務器接收QSO記錄,分數,等待幾秒鐘,然後將分數更新通知所有客戶。從服務器到客戶端的JSON消息的格式如下:
{
"14MHz" : [
{ "call" : " JA1ZLO " , "score" : 200 , "total" : 2200 },
{ "call" : " JA1YWX " , "score" : 100 , "total" : 2100 }
]
}一個簡單的Websocket客戶端用於ATS-4,可以寫如下:
<!DOCTYPE html >
< html lang =' ja ' >
< head >
< title > ATS-4 </ title >
< script type =" application/javascript " src =" client.js " > </ script >
</ head >
< body >
< h1 > Streaming Demo </ h1 >
< textarea cols =' 160 ' rows =' 30 ' id =' QSOs ' > </ textarea >
< p >
< label > Delete < input type =' number ' id =' trim ' min =' 0 ' max =' 255 ' value =' 0 ' > QSOs, </ label >
< label > Submission Key: < input type =' text ' id =' UUID ' placeholder =' /agent/UUID ' > </ label >
< button type =' button ' onclick =' access(); ' > Access </ button >
< button type =' button ' onclick =' submit(); ' > Submit </ button >
</ p >
< div id =' messages ' > </ div >
</ body >
</ html >引用的JavaScript程序可以寫如下:
let sock ;
function access ( ) {
const uuid = document . getElementById ( 'UUID' ) . value ;
sock = new WebSocket ( 'ws://localhost:9000' + uuid ) ;
sock . binaryType = 'arraybuffer' ;
sock . onmessage = function ( msg ) {
const decoder = new TextDecoder ( ) ;
const data = decoder . decode ( new Uint8Array ( msg . data ) ) ;
const text = document . createTextNode ( data ) ;
const node = document . createElement ( 'div' ) ;
document . getElementById ( 'messages' ) . appendChild ( node ) ;
node . appendChild ( text ) ;
} ;
}
function submit ( ) {
const encoder = new TextEncoder ( ) ;
const QSOs = document . getElementById ( 'QSOs' ) . value ;
const trim = document . getElementById ( 'trim' ) . value ;
const data = new TextEncoder ( ) . encode ( QSOs ) ;
const full = new ( data . constructor ) ( data . length + 1 ) ;
full [ 0 ] = parseInt ( trim ) ;
full . set ( data , 1 ) ;
sock . send ( full ) ;
} 隨時在Nextzlog/todo上提出問題。在Twitter上關注@nextzlog。
無線部開発班
該程序是免費的軟件:您可以根據自由軟件基金會發布的GNU通用公共許可證的條款進行重新分配和/或修改它,該版本是許可證的第3版,或(按您的選項)任何以後的版本。
該程序的分佈是希望它將有用的,但沒有任何保修;即使沒有對特定目的的適銷性或適合性的隱含保證。有關更多詳細信息,請參見GNU通用公共許可證。
您應該已經收到了GNU通用公共許可證的副本以及此計劃。如果沒有,請參見http://www.gnu.org/licenses/。