45 lines
829 B
Go
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)
|
|
}
|
|
}
|