Preparations for service infrastructure

This commit is contained in:
Andreas Neue 2016-08-21 23:58:38 +02:00
parent 258cb6e4f9
commit d21b5cccfe
1 changed files with 46 additions and 0 deletions

46
service.go Normal file
View File

@ -0,0 +1,46 @@
// vim:ts=4:sts=4:sw=4:noet:tw=72
package ircd
import (
"time"
"code.dnix.de/an/irc"
)
type Service struct {
recvq chan *irc.Message
handlers map[string]func(*irc.Message)
}
func NewService() *Service {
recvq := make(chan *irc.Message, 1024)
handlers := make(map[string]func(*irc.Message))
return &Service{recvq: recvq, handlers: handlers}
}
func (svc *Service) Run() {
go svc.dispatcher()
}
func (svc *Service) Dispatch(msg *irc.Message) {
svc.recvq <- msg
}
func (svc *Service) Handler(cmd string, fn func(*irc.Message)) {
svc.handlers[cmd] = fn
}
func (svc *Service) dispatcher() {
for {
select {
case msg := <-svc.recvq:
if fn, exists := sv.handlers[msg.Pre]; exists {
fn(msg)
}
default:
time.Sleep(100 * time.Microsecond)
}
}
return
}