118 lines
2.1 KiB
Go
118 lines
2.1 KiB
Go
// Package mucp initialises a mucp service
|
|
package mucp
|
|
|
|
import (
|
|
"github.com/micro/go-micro/v2/client"
|
|
cmucp "github.com/micro/go-micro/v2/client/mucp"
|
|
"github.com/micro/go-micro/v2/server"
|
|
smucp "github.com/micro/go-micro/v2/server/mucp"
|
|
"github.com/micro/go-micro/v2/service"
|
|
)
|
|
|
|
type mucpService struct {
|
|
opts service.Options
|
|
}
|
|
|
|
func newService(opts ...service.Option) service.Service {
|
|
options := service.NewOptions(opts...)
|
|
|
|
return &mucpService{
|
|
opts: options,
|
|
}
|
|
}
|
|
|
|
func (s *mucpService) Name() string {
|
|
return s.opts.Server.Options().Name
|
|
}
|
|
|
|
// Init initialises options. Additionally it calls cmd.Init
|
|
// which parses command line flags. cmd.Init is only called
|
|
// on first Init.
|
|
func (s *mucpService) Init(opts ...service.Option) {
|
|
// process options
|
|
for _, o := range opts {
|
|
o(&s.opts)
|
|
}
|
|
}
|
|
|
|
func (s *mucpService) Options() service.Options {
|
|
return s.opts
|
|
}
|
|
|
|
func (s *mucpService) Client() client.Client {
|
|
return s.opts.Client
|
|
}
|
|
|
|
func (s *mucpService) Server() server.Server {
|
|
return s.opts.Server
|
|
}
|
|
|
|
func (s *mucpService) String() string {
|
|
return "mucp"
|
|
}
|
|
|
|
func (s *mucpService) Start() error {
|
|
for _, fn := range s.opts.BeforeStart {
|
|
if err := fn(); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
if err := s.opts.Server.Start(); err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, fn := range s.opts.AfterStart {
|
|
if err := fn(); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (s *mucpService) Stop() error {
|
|
var gerr error
|
|
|
|
for _, fn := range s.opts.BeforeStop {
|
|
if err := fn(); err != nil {
|
|
gerr = err
|
|
}
|
|
}
|
|
|
|
if err := s.opts.Server.Stop(); err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, fn := range s.opts.AfterStop {
|
|
if err := fn(); err != nil {
|
|
gerr = err
|
|
}
|
|
}
|
|
|
|
return gerr
|
|
}
|
|
|
|
func (s *mucpService) Run() error {
|
|
if err := s.Start(); err != nil {
|
|
return err
|
|
}
|
|
|
|
// wait on context cancel
|
|
<-s.opts.Context.Done()
|
|
|
|
return s.Stop()
|
|
}
|
|
|
|
// NewService returns a new mucp service
|
|
func NewService(opts ...service.Option) service.Service {
|
|
options := []service.Option{
|
|
service.Client(cmucp.NewClient()),
|
|
service.Server(smucp.NewServer()),
|
|
}
|
|
|
|
options = append(options, opts...)
|
|
|
|
return newService(options...)
|
|
}
|