micro/server/server.go

104 lines
1.9 KiB
Go
Raw Normal View History

2015-01-14 02:31:27 +03:00
package server
import (
"os"
"os/signal"
"syscall"
"code.google.com/p/go-uuid/uuid"
2015-01-31 18:49:21 +03:00
log "github.com/golang/glog"
2015-01-14 02:31:27 +03:00
)
type Server interface {
2015-05-27 00:39:48 +03:00
Config() options
Init(...Option)
Handle(Handler) error
NewHandler(interface{}) Handler
NewSubscriber(string, interface{}) Subscriber
Subscribe(Subscriber) error
Register() error
Deregister() error
2015-01-14 02:31:27 +03:00
Start() error
Stop() error
}
2015-05-21 21:28:57 +03:00
type Option func(*options)
2015-05-21 21:24:57 +03:00
2015-01-14 02:31:27 +03:00
var (
2015-05-27 00:39:48 +03:00
DefaultAddress = ":0"
DefaultName = "go-server"
DefaultVersion = "1.0.0"
2015-05-27 00:39:48 +03:00
DefaultId = uuid.NewUUID().String()
DefaultServer Server = newRpcServer()
2015-01-14 02:31:27 +03:00
)
2015-05-27 00:39:48 +03:00
func Config() options {
return DefaultServer.Config()
}
func Init(opt ...Option) {
2015-01-14 02:31:27 +03:00
if DefaultServer == nil {
2015-05-27 00:39:48 +03:00
DefaultServer = newRpcServer(opt...)
2015-01-14 02:31:27 +03:00
}
2015-05-27 00:39:48 +03:00
DefaultServer.Init(opt...)
2015-01-14 02:31:27 +03:00
}
2015-05-27 00:39:48 +03:00
func NewServer(opt ...Option) Server {
return newRpcServer(opt...)
2015-05-23 19:40:53 +03:00
}
func NewSubscriber(topic string, h interface{}) Subscriber {
return DefaultServer.NewSubscriber(topic, h)
}
func NewHandler(h interface{}) Handler {
return DefaultServer.NewHandler(h)
}
func Handle(h Handler) error {
return DefaultServer.Handle(h)
2015-01-14 02:31:27 +03:00
}
func Subscribe(s Subscriber) error {
return DefaultServer.Subscribe(s)
}
func Register() error {
return DefaultServer.Register()
2015-01-14 02:31:27 +03:00
}
func Deregister() error {
return DefaultServer.Deregister()
2015-01-14 02:31:27 +03:00
}
func Run() error {
if err := Start(); err != nil {
return err
}
if err := DefaultServer.Register(); err != nil {
return err
2015-05-21 21:24:57 +03:00
}
2015-01-14 02:31:27 +03:00
ch := make(chan os.Signal, 1)
signal.Notify(ch, syscall.SIGTERM, syscall.SIGINT, syscall.SIGKILL)
2015-01-31 18:49:21 +03:00
log.Infof("Received signal %s", <-ch)
2015-01-14 02:31:27 +03:00
if err := DefaultServer.Deregister(); err != nil {
return err
}
2015-01-14 02:31:27 +03:00
return Stop()
}
func Start() error {
2015-05-27 00:39:48 +03:00
config := DefaultServer.Config()
log.Infof("Starting server %s id %s", config.Name(), config.Id())
2015-01-14 02:31:27 +03:00
return DefaultServer.Start()
}
func Stop() error {
2015-01-31 18:49:21 +03:00
log.Infof("Stopping server")
2015-01-14 02:31:27 +03:00
return DefaultServer.Stop()
}