gost/pkg/registry/service.go
2022-02-17 23:30:13 +08:00

51 lines
772 B
Go

package registry
import (
"sync"
"github.com/go-gost/gost/pkg/service"
)
var (
svcReg = &serviceRegistry{}
)
func Service() *serviceRegistry {
return svcReg
}
type serviceRegistry struct {
m sync.Map
}
func (r *serviceRegistry) Register(name string, svc service.Service) error {
if name == "" || svc == nil {
return nil
}
if _, loaded := r.m.LoadOrStore(name, svc); loaded {
return ErrDup
}
return nil
}
func (r *serviceRegistry) Unregister(name string) {
r.m.Delete(name)
}
func (r *serviceRegistry) IsRegistered(name string) bool {
_, ok := r.m.Load(name)
return ok
}
func (r *serviceRegistry) Get(name string) service.Service {
if name == "" {
return nil
}
v, ok := r.m.Load(name)
if !ok {
return nil
}
return v.(service.Service)
}