2024-10-07 21:15:25 -04:00
|
|
|
//go:build js && wasm
|
|
|
|
|
2024-10-10 13:44:17 -04:00
|
|
|
package ctx
|
2024-10-07 21:15:25 -04:00
|
|
|
|
|
|
|
import (
|
|
|
|
"syscall/js"
|
|
|
|
|
|
|
|
"github.com/labstack/echo/v4"
|
|
|
|
)
|
|
|
|
|
2024-10-10 13:44:17 -04:00
|
|
|
type BroadcastContext struct {
|
|
|
|
echo.Context
|
|
|
|
Channel js.Value
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *BroadcastContext) BroadcastMessage(message string) {
|
|
|
|
c.Channel.Call("postMessage", message)
|
|
|
|
}
|
|
|
|
|
2024-10-07 21:15:25 -04:00
|
|
|
type JSHandler func(this js.Value, args []js.Value) interface{}
|
|
|
|
|
|
|
|
func UseBroadcastChannel(channelName string, handler JSHandler) echo.MiddlewareFunc {
|
|
|
|
var channel js.Value
|
|
|
|
|
|
|
|
return func(next echo.HandlerFunc) echo.HandlerFunc {
|
|
|
|
return func(c echo.Context) error {
|
|
|
|
if channel.IsUndefined() {
|
|
|
|
channel = js.Global().Get("BroadcastChannel").New(channelName)
|
|
|
|
channel.Call("addEventListener", "message", handler)
|
|
|
|
}
|
|
|
|
|
|
|
|
cc := &BroadcastContext{
|
|
|
|
Context: c,
|
|
|
|
Channel: channel,
|
|
|
|
}
|
|
|
|
return next(cc)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func PostBroadcastMessage(c echo.Context, message string) {
|
|
|
|
cc := c.(*BroadcastContext)
|
|
|
|
cc.BroadcastMessage(message)
|
|
|
|
}
|