package entry
import (
"errors"
"github.com/goodrain/rainbond/api/eventlog/conf"
grpcserver "github.com/goodrain/rainbond/api/eventlog/entry/grpc/server"
"github.com/goodrain/rainbond/api/eventlog/store"
"golang.org/x/net/context"
"sync"
"github.com/sirupsen/logrus"
)
type EventLogServer struct {
conf conf.EventLogServerConf
log *logrus.Entry
cancel func()
context context.Context
storemanager store.Manager
messageChan chan []byte
listenErr chan error
serverLock sync.Mutex
stopReceiveMessage bool
eventRPCServer *grpcserver.EventLogRPCServer
}
func NewEventLogServer(conf conf.EventLogServerConf, log *logrus.Entry, storeManager store.Manager) (*EventLogServer, error) {
ctx, cancel := context.WithCancel(context.Background())
s := &EventLogServer{
conf: conf,
log: log,
cancel: cancel,
context: ctx,
storemanager: storeManager,
listenErr: make(chan error),
}
eventRPCServer := grpcserver.NewServer(conf, log, storeManager, s.listenErr)
s.messageChan = s.storemanager.ReceiveMessageChan()
if s.messageChan == nil {
return nil, errors.New("receive log message server can not get store message chan ")
}
s.eventRPCServer = eventRPCServer
return s, nil
}
func (s *EventLogServer) Serve() {
s.eventRPCServer.Start()
}
func (s *EventLogServer) Stop() {
s.cancel()
s.eventRPCServer.Stop()
s.log.Info("receive event message server stop")
}
func (s *EventLogServer) ListenError() chan error {
return s.listenErr
}