sh3lly/bus/bus.go

55 lines
746 B
Go

package bus
import (
"errors"
"sync"
)
var (
Stop = make(map[string]Messenger)
mu = &sync.RWMutex{}
)
type Messenger interface {
Send(any)
Recv() any
}
type Route struct {
msg chan any
}
func (r Route) Send(a any) {
select {
case r.msg <- a:
//
}
}
func (r Route) Recv() any {
select {
case in := <-r.msg:
return in
}
}
func NewMessenger(name string) error {
mu.Lock()
defer mu.Unlock()
if _, ok := Stop[name]; ok {
return errors.New(name + " already exists")
}
Stop[name] = &Route{msg: make(chan any)}
return nil
}
func GetMessenger(name string) (Messenger, error) {
mu.RLock()
defer mu.RUnlock()
if _, ok := Stop[name]; !ok {
return nil, errors.New(name + " doesn't exist")
}
return Stop[name], nil
}