|
|
@@ -1,53 +0,0 @@
|
|
|
-package router
|
|
|
-
|
|
|
-import (
|
|
|
- "context"
|
|
|
- "sync"
|
|
|
-)
|
|
|
-
|
|
|
-type Router interface {
|
|
|
- Pick(ctx context.Context) (string, bool)
|
|
|
-}
|
|
|
-
|
|
|
-type defaultRouter byte
|
|
|
-
|
|
|
-func (defaultRouter) Pick(ctx context.Context) (string, bool) {
|
|
|
- return "", false
|
|
|
-}
|
|
|
-
|
|
|
-type syncRouter struct {
|
|
|
- sync.RWMutex
|
|
|
- Router
|
|
|
-}
|
|
|
-
|
|
|
-func (r *syncRouter) Pick(ctx context.Context) (string, bool) {
|
|
|
- r.RLock()
|
|
|
- defer r.RUnlock()
|
|
|
-
|
|
|
- return r.Router.Pick(ctx)
|
|
|
-}
|
|
|
-
|
|
|
-func (r *syncRouter) Set(router Router) {
|
|
|
- r.Lock()
|
|
|
- defer r.Unlock()
|
|
|
-
|
|
|
- r.Router = router
|
|
|
-}
|
|
|
-
|
|
|
-var (
|
|
|
- routerInstance = &syncRouter{
|
|
|
- Router: defaultRouter(0),
|
|
|
- }
|
|
|
-)
|
|
|
-
|
|
|
-func RegisterRouter(router Router) {
|
|
|
- if router == nil {
|
|
|
- panic("Router is nil.")
|
|
|
- }
|
|
|
-
|
|
|
- routerInstance.Set(router)
|
|
|
-}
|
|
|
-
|
|
|
-func Pick(ctx context.Context) (string, bool) {
|
|
|
- return routerInstance.Router.Pick(ctx)
|
|
|
-}
|