ATS-4 adalah sistem Penerimaan & Tabulasi Otomatis untuk Kontes Amatir-Radio, berdasarkan QXSL. Jangan ragu untuk mengunjungi Allja1 ATS-4.
Gambar Docker tersedia. Tempel seluruh skrip berikut ke terminal dan jalankan.
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 -dKemudian, arahkan browser Anda ke http: // localhost dan verifikasi bahwa ATS-4 berjalan.
Pertama, buat docker-compose.yaml sebagai berikut:
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.confKemudian, ikuti instruksi di bawah ini.
Buat proxy.conf sebagai berikut:
server {
server_name localhost;
location / {
proxy_pass http://ATS4:9000;
location ~ /admin {
allow 127.0.0.1 ;
deny all ;
}
}
} Pastikan bahwa klien yang tidak sah tidak dapat mengakses halaman administrasi di bawah /admin . Ekspos port 80 dari wadah ke internet sehingga halaman administrasi tidak dapat diakses.
Konfigurasikan variabel lingkungan dalam docker-compose.yaml sebagai berikut:
environment :
ATS4_MAIL_HOST : $host
ATS4_MAIL_USER : $user
ATS4_MAIL_PASS : $pass
ATS4_MAIL_MOCK : falseUbah pengaturan dengan benar.
Konfigurasikan variabel lingkungan dalam docker-compose.yaml sebagai berikut:
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 Tentu saja, Anda dapat menentukan aturan yang berbeda dengan memasang file ruby eksternal ke dalam wadah. Lihat ats.rb misalnya.
Akhirnya, buat wadah sebagai berikut:
$ docker compose up -dAkses 80 port wadah.
Berhenti dan lepaskan wadah sebagai berikut:
$ docker compose downTarik gambar terbaru sebagai berikut:
$ docker pull ghcr.io/nextzlog/ats4:masterAnda dapat mengubah kode scala dan konfigurasi tanpa memulai kembali dengan memulai ATS-4 dalam mode pengembangan sebagai berikut:
$ sbt runKemudian, akses http: // localhost: 9000/admin/shell untuk mengembangkan aturan kontes secara interaktif. Anda dapat menguji algoritma penilaian dengan melampirkan data QSO ke formulir web.
ATS-4 menyediakan API streaming untuk kontes real-time.
Peserta kontes akan mendaftarkan informasi akun mereka ke ATS-4 sebelumnya. ATS-4 Mengembalikan Kunci Keamanan (UUID) dengan mengirimkan permintaan GET ke http://localhost:8873?id=<UUID> . Klien dapat mengambil kunci dengan mendengarkan di port 8873 dan akses /agent/<UUID> .
Ketika kontes dimulai, klien selalu terhubung ke server melalui WebSocket. Setiap kali seorang peserta menghubungi peserta lain di udara, klien mengirimkan perbedaan dalam catatan QSO ke server. Pesan dari klien ke server harus mengikuti format di bawah ini.
| posisi | bidang |
|---|---|
| Byte 1 | Jumlah QSO yang dihapus |
| urutan | header data QSO |
| urutan | Qso entitas untuk dihapus |
| urutan | Qso entitas untuk ditambahkan |
Byte kedua dan selanjutnya dari pesan diformat sebagai file log elektronik tunggal. Format harus secara resmi didukung oleh perpustakaan QXSL.
Server menerima catatan QSO, mencetak gol, tunggu beberapa detik, dan kemudian memberi tahu semua klien tentang pembaruan skor. Pesan JSON dari server ke klien diformat sebagai berikut:
{
"14MHz" : [
{ "call" : " JA1ZLO " , "score" : 200 , "total" : 2200 },
{ "call" : " JA1YWX " , "score" : 100 , "total" : 2100 }
]
}Klien Websocket sederhana untuk ATS-4 dapat ditulis sebagai berikut:
<!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 >Program JavaScript yang dirujuk dapat ditulis sebagai berikut:
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 ) ;
} Jangan ragu untuk membuat masalah di NextZlog/Todo. Ikuti @nextzlog di Twitter.
無線部開発班
Program ini adalah perangkat lunak gratis: Anda dapat mendistribusikannya kembali dan/atau memodifikasinya di bawah ketentuan Lisensi Publik Umum GNU seperti yang diterbitkan oleh Yayasan Perangkat Lunak Gratis, baik versi 3 dari lisensi, atau (pada opsi Anda) versi selanjutnya.
Program ini didistribusikan dengan harapan akan bermanfaat, tetapi tanpa jaminan apa pun ; bahkan tanpa jaminan tersirat dari dapat diperjualbelikan atau kebugaran untuk tujuan tertentu . Lihat Lisensi Publik Umum GNU untuk lebih jelasnya.
Anda seharusnya menerima salinan Lisensi Publik Umum GNU bersama dengan program ini. Jika tidak, lihat http://www.gnu.org/licenses/.