You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

45 lines
863 B
Go

package whappdc
import "log"
type MessageWorker struct {
incomingHandlers chan MessageHandler
chatWorkers map[string]chan MessageHandler
}
func NewMessageWorker() *MessageWorker {
return &MessageWorker{
incomingHandlers: make(chan MessageHandler),
chatWorkers: make(map[string]chan MessageHandler),
}
}
func (w *MessageWorker) HandleMessage(m MessageHandler) {
w.incomingHandlers <- m
}
func (w *MessageWorker) Start() {
go func() {
for {
select {
case handler := <-w.incomingHandlers:
log.Println("Got Handler for " + handler.Jid)
workerChan, ok := w.chatWorkers[handler.Jid]
if !ok {
workerChan = make(chan MessageHandler)
worker := &ChatWorker{
incomingHandlers: workerChan,
}
worker.Start()
w.chatWorkers[handler.Jid] = workerChan
}
workerChan <- handler
}
}
}()
}