非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

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!"}
 

スポンサーリンク

 - Electron, Go言語