dotfiles/goagent/pkg/gophx/channel.go
2024-02-17 17:20:08 +02:00

45 lines
829 B
Go

package gophx
type Channel struct {
topic string
bindings map[string]func(any)
}
func NewChannel(topic string, params any, socket *Socket) *Channel {
// TODO: rejoin when socket is reconnected
channel := &Channel{
bindings: make(map[string]func(any)),
topic: topic,
}
msg := message{
joinRef: 0,
ref: 0,
topic: topic,
event: "phx_join",
payload: params,
}
data, err := msg.serializeJSON()
if err != nil {
panic(err)
}
socket.addChannel(channel)
socket.send(data)
return channel
}
func (channel *Channel) On(event string, callback func(any)) {
channel.bindings[event] = callback
}
func (channel *Channel) Push(event string, params any) {
}
func (channel *Channel) handleMessage(msg message) {
if binding, ok := channel.bindings[msg.event]; ok {
go binding(msg.payload)
}
}