|  | @@ -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)
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 |