1
0
mirror of https://github.com/go-micro/go-micro.git synced 2025-01-05 10:20:53 +02:00
go-micro/network/router/router.go

86 lines
1.9 KiB
Go
Raw Normal View History

2019-06-21 17:17:12 +02:00
// Package router provides a network routing control plane
package router
import (
"time"
"github.com/micro/go-micro/network/router/table"
)
2019-07-10 08:45:27 +02:00
const (
2019-07-10 08:51:24 +02:00
// Status codes
2019-07-10 08:45:27 +02:00
// Running means the router is up and running
Running StatusCode = iota
// Stopped means the router has been stopped
Stopped
// Error means the router has encountered error
Error
2019-07-10 08:51:24 +02:00
// Advert types
// Announce is advertised when the router announces itself
Announce AdvertType = iota
// Update advertises route updates
Update
)
2019-06-21 17:17:12 +02:00
// Router is an interface for a routing control plane
type Router interface {
2019-07-10 08:56:18 +02:00
// Router provides a routing table
table.Table
// Init initializes the router with options
Init(...Option) error
// Options returns the router options
Options() Options
// Advertise advertises routes to the network
2019-07-04 03:06:59 +02:00
Advertise() (<-chan *Advert, error)
2019-07-10 08:45:27 +02:00
// Process processes incoming adverts
Process(*Advert) error
// Status returns router status
Status() Status
// Stop stops the router
Stop() error
2019-07-10 08:56:52 +02:00
// Returns the router implementation
String() string
}
// Option used by the router
type Option func(*Options)
// AdvertType is route advertisement type
type AdvertType int
// Advert contains a list of events advertised by the router to the network
2019-07-04 03:06:59 +02:00
type Advert struct {
2019-07-10 08:45:27 +02:00
// Id is the router Id
Id string
// Type is type of advert
Type AdvertType
// Timestamp marks the time when the update is sent
Timestamp time.Time
// TTL is Advert TTL
2019-07-11 13:36:39 +02:00
TTL time.Duration
// Events is a list of routing table events to advertise
Events []*table.Event
}
// StatusCode defines router status
type StatusCode int
// Status is router status
type Status struct {
// Error is router error
Error error
// Code defines router status
Code StatusCode
}
2019-07-10 08:45:27 +02:00
var (
// DefaultRouter is default network router
DefaultRouter = NewRouter()
)
// NewRouter creates new Router and returns it
func NewRouter(opts ...Option) Router {
return newRouter(opts...)
}