123 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Package mucp initialises a mucp service
 | 
						|
package mucp
 | 
						|
 | 
						|
import (
 | 
						|
	"github.com/micro/go-micro/v3/client"
 | 
						|
	cmucp "github.com/micro/go-micro/v3/client/mucp"
 | 
						|
	"github.com/micro/go-micro/v3/model"
 | 
						|
	"github.com/micro/go-micro/v3/server"
 | 
						|
	smucp "github.com/micro/go-micro/v3/server/mucp"
 | 
						|
	"github.com/micro/go-micro/v3/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) Model() model.Model {
 | 
						|
	return s.opts.Model
 | 
						|
}
 | 
						|
 | 
						|
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...)
 | 
						|
}
 |