package chat const messageBuffer = 20 // Host knows about all the commands and channels. type Host struct { defaultChannel *Channel commands Commands done chan struct{} } func NewHost() *Host { h := Host{ commands: defaultCmdHandlers, } h.defaultChannel = h.CreateChannel("") return &h } func (h *Host) handleCommand(m Message) { // TODO: ... } func (h *Host) broadcast(ch *Channel, m Message) { // TODO: ... } func (h *Host) CreateChannel(id string) *Channel { out := make(chan Message, 20) ch := NewChannel(id, out) go func() { for msg := range out { if msg.IsCommand() { go h.handleCommand(msg) continue } h.broadcast(ch, msg) } }() return ch }