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) } }