Go言語/gotronでHTMLのボタンイベントをGo側で受け取る方法(WebSocket)
gotronを使うにあたり、ウィンドウを出した後の動きはHTML/Javascriptで十分処理可能なのですが、それだとせっかくGo言語を使った意味があまりないので、UIはHTML/CSSで制御はGo言語を目指したいところです。そんな中、UIのボタンイベントをGo言語側で受け取る方法について、ここのREADMEを参考に書いてみました。
HTML側のソース
HTML側のソースです。ボタンを設置しそれを押すとWebSocketを使ってデータを送信してくれます。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=<device-width>, initial-scale=1.0">
<title>Document</title>
</head>
<body style="-webkit-app-region: drag">
<h1>Hello World!</h1>
<div>
<!-- <button style="-webkit-app-region: no-drag">終了</button> -->
<button onclick="sendMessage();">Send</button>
</div>
<script>
let ws = new WebSocket("ws://localhost:" + global.backendPort + "/web/app/events");
function sendMessage(){
ws.send(JSON.stringify({
"event": "event-name",
"AtrNameInFrontend": "Hello World!",
}))
}
</script>
</body>
</html>
Go言語側のソース
window.Onで受け取ることができます。
package main
import (
"github.com/Equanox/gotron"
"bytes"
"fmt"
)
func main() {
window, err := gotron.New("apps")
if err != nil {
panic(err)
}
window.WindowOptions.Width = 800
window.WindowOptions.Height = 600
window.WindowOptions.AutoHideMenuBar = true
done, err := window.Start()
if err != nil {
panic(err)
}
window.On(&gotron.Event{Event: "event-name"}, func(bin []byte) {
buf := bytes.NewBuffer([]byte(bin))
fmt.Println("Message: ", buf)
})
<-done
}
ボタンをクリックするとターミナルに以下のように出力されます。
Message: {"event":"event-name","AtrNameInFrontend":"Hello World!"}
スポンサーリンク
