diff --git a/network/router/router.go b/network/router/router.go index 0a0e4788..cf2e1e9c 100644 --- a/network/router/router.go +++ b/network/router/router.go @@ -8,6 +8,8 @@ import ( var ( // DefaultRouter is default network router DefaultRouter = NewRouter() + // DefaultName is default router service name + DefaultName = "go.micro.router" ) // Router is an interface for a routing control plane diff --git a/network/router/service/service.go b/network/router/service/service.go new file mode 100644 index 00000000..ed2d0bf3 --- /dev/null +++ b/network/router/service/service.go @@ -0,0 +1,113 @@ +package service + +import ( + "sync" + + "github.com/micro/go-micro/client" + "github.com/micro/go-micro/network/router" + pb "github.com/micro/go-micro/network/router/proto" +) + +type svc struct { + router pb.RouterService + opts router.Options + status router.Status + sync.RWMutex +} + +// NewRouter creates new service router and returns it +func NewRouter(opts ...router.Option) router.Router { + // get default options + options := router.DefaultOptions() + + // apply requested options + for _, o := range opts { + o(&options) + } + + // NOTE: might need some client opts here + client := client.DefaultClient + + // NOTE: should we have Client/Service option in router.Options? + s := &svc{ + opts: options, + status: router.Status{Code: router.Stopped, Error: nil}, + router: pb.NewRouterService(router.DefaultName, client), + } + + return s +} + +// Init initializes router with given options +func (s *svc) Init(opts ...router.Option) error { + for _, o := range opts { + o(&s.opts) + } + return nil +} + +// Options returns router options +func (s *svc) Options() router.Options { + return s.opts +} + +// Advertise advertises routes to the network +func (s *svc) Advertise() (<-chan *router.Advert, error) { + return nil, nil +} + +// Process processes incoming adverts +func (s *svc) Process(a *router.Advert) error { + return nil +} + +// Create new route in the routing table +func (s *svc) Create(r router.Route) error { + return nil +} + +// Delete deletes existing route from the routing table +func (s *svc) Delete(r router.Route) error { + return nil +} + +// Update updates route in the routing table +func (s *svc) Update(r router.Route) error { + return nil +} + +// List returns the list of all routes in the table +func (s *svc) List() ([]router.Route, error) { + return nil, nil +} + +// Lookup looks up routes in the routing table and returns them +func (s *svc) Lookup(q router.Query) ([]router.Route, error) { + return nil, nil +} + +// Watch returns a watcher which allows to track updates to the routing table +func (s *svc) Watch(opts ...router.WatchOption) (router.Watcher, error) { + return nil, nil +} + +// Status returns router status +func (s *svc) Status() router.Status { + s.RLock() + defer s.RUnlock() + + // make a copy of the status + status := s.status + + return status +} + +// Stop stops the router +func (s *svc) Stop() error { + return nil +} + +// Returns the router implementation +func (s *svc) String() string { + return "service" +}