HW13 WIP 008
parent
6355c4138e
commit
ac5ab7c6ed
|
@ -3,7 +3,6 @@ package main
|
|||
import (
|
||||
"flag"
|
||||
oslog "log"
|
||||
"net"
|
||||
"os"
|
||||
"os/signal"
|
||||
|
||||
|
@ -14,7 +13,6 @@ import (
|
|||
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/internal/logger"
|
||||
internalhttp "github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/internal/server/http"
|
||||
store "github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/internal/storage"
|
||||
googrpc "google.golang.org/grpc"
|
||||
)
|
||||
|
||||
var configFile string
|
||||
|
@ -46,32 +44,27 @@ func main() {
|
|||
calendar := app.New(log, st)
|
||||
|
||||
serverHTTP := internalhttp.NewServer(calendar, conf.Server.Address, conf.Server.Port)
|
||||
|
||||
listnGrpc, err := net.Listen("tcp", net.JoinHostPort(conf.Grpc.Address, conf.Grpc.Port))
|
||||
if err != nil {
|
||||
log.Fatalf("failed to listen %v", err)
|
||||
}
|
||||
serverGRPC := googrpc.NewServer()
|
||||
grpc.RegisterGrpcServer(serverGRPC, grpc.Service{App: *calendar})
|
||||
if err := serverGRPC.Serve(listnGrpc); err != nil {
|
||||
log.Errorf("failed to start grpc server: " + err.Error())
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
go func() {
|
||||
signals := make(chan os.Signal, 1)
|
||||
signal.Notify(signals)
|
||||
|
||||
<-signals
|
||||
signal.Stop(signals)
|
||||
|
||||
if err := serverHTTP.Stop(); err != nil {
|
||||
log.Errorf("failed to stop http server: " + err.Error())
|
||||
if err := serverHTTP.Start(); err != nil {
|
||||
log.Errorf("failed to start http server: " + err.Error())
|
||||
os.Exit(1)
|
||||
}
|
||||
}()
|
||||
|
||||
if err := serverHTTP.Start(); err != nil {
|
||||
log.Errorf("failed to start http server: " + err.Error())
|
||||
os.Exit(1)
|
||||
serverGRPC := grpc.New(calendar)
|
||||
go func() {
|
||||
if err := serverGRPC.Start(conf); err != nil {
|
||||
log.Errorf("failed to start grpc server: " + err.Error())
|
||||
os.Exit(1)
|
||||
}
|
||||
}()
|
||||
|
||||
signals := make(chan os.Signal, 1)
|
||||
signal.Notify(signals)
|
||||
<-signals
|
||||
signal.Stop(signals)
|
||||
serverGRPC.Stop()
|
||||
if err := serverHTTP.Stop(); err != nil {
|
||||
log.Errorf("failed to stop http server: " + err.Error())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,13 +5,13 @@ go 1.14
|
|||
require (
|
||||
github.com/BurntSushi/toml v0.3.1
|
||||
github.com/amitrai48/logger v0.0.0-20190214092904-448001c055ec
|
||||
github.com/daixiang0/gci v0.2.4 // indirect
|
||||
github.com/go-sql-driver/mysql v1.5.0
|
||||
github.com/golang/protobuf v1.4.2
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.15.0
|
||||
github.com/stretchr/testify v1.4.0
|
||||
go.uber.org/zap v1.15.0 // indirect
|
||||
golang.org/x/net v0.0.0-20200625001655-4c5254603344
|
||||
golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305 // indirect
|
||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013
|
||||
google.golang.org/grpc v1.32.0
|
||||
google.golang.org/protobuf v1.25.0 // indirect
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package grpc
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/golang/protobuf/ptypes"
|
||||
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/internal/storage/event"
|
||||
)
|
||||
|
@ -38,3 +40,22 @@ func pbeventWitID2eventAndID(pbe *EventWthID) (id event.ID, evt event.Event, err
|
|||
}
|
||||
return event.ID(pbe.ID), evt, nil
|
||||
}
|
||||
|
||||
func evtMap2pbEventList(evtMap map[event.ID]event.Event) (*EventList, error) {
|
||||
var events = &EventList{}
|
||||
var err error
|
||||
for k, v := range evtMap {
|
||||
evt := Event{ID: int64(k), Title: v.Title, Latency: ptypes.DurationProto(v.Latency), Note: v.Note, UserID: v.UserID, NotifyTime: ptypes.DurationProto(v.NotifyTime)}
|
||||
evt.Date, err = ptypes.TimestampProto(v.Date)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
events.Events = append(events.Events, &evt)
|
||||
}
|
||||
return events, err
|
||||
}
|
||||
|
||||
func pbDate2Time(e *Date) (start time.Time, qrange string, err error) {
|
||||
date, err := ptypes.Timestamp(e.Date)
|
||||
return date, string(e.Range), err
|
||||
}
|
||||
|
|
|
@ -2,9 +2,11 @@ package grpc
|
|||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
"github.com/golang/protobuf/ptypes/empty"
|
||||
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/internal/app"
|
||||
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/internal/storage/event"
|
||||
)
|
||||
|
||||
type Service struct {
|
||||
|
@ -33,18 +35,38 @@ func (s Service) Update(ctx context.Context, e *EventWthID) (*empty.Empty, error
|
|||
return nil, s.App.Storage.Update(cid, ce)
|
||||
}
|
||||
|
||||
// TODO: Implement
|
||||
func (s Service) Delete(ctx context.Context, e *EventID) (*empty.Empty, error) {
|
||||
return nil, nil
|
||||
return nil, s.App.Storage.Delete(event.ID(e.ID))
|
||||
}
|
||||
|
||||
// TODO: Implement
|
||||
func (s Service) List(ctx context.Context, e *empty.Empty) (*EventList, error) {
|
||||
return nil, nil
|
||||
tmp, err := s.App.Storage.List()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return evtMap2pbEventList(tmp)
|
||||
}
|
||||
|
||||
// TODO: Implement
|
||||
func (s Service) GetByID(ctx context.Context, e *EventID) (*EventList, error) {
|
||||
return nil, nil
|
||||
tmp, ok := s.App.Storage.GetByID(event.ID(e.ID))
|
||||
if !ok {
|
||||
return nil, errors.New("event not found")
|
||||
}
|
||||
return evtMap2pbEventList(map[event.ID]event.Event{event.ID(e.ID): tmp})
|
||||
}
|
||||
|
||||
// TODO: Implement
|
||||
func (s Service) GetByDate(ctx context.Context, e *Date) (*EventList, error) {
|
||||
return nil, nil
|
||||
d, r, err := pbDate2Time(e)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
tmp, err := s.App.Storage.GetByDate(d, r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return evtMap2pbEventList(tmp)
|
||||
}
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
package grpc
|
||||
|
||||
import (
|
||||
"net"
|
||||
|
||||
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/internal/app"
|
||||
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/internal/config"
|
||||
googrpc "google.golang.org/grpc"
|
||||
)
|
||||
|
||||
type Server struct {
|
||||
s *googrpc.Server
|
||||
app app.App
|
||||
}
|
||||
|
||||
func New(app *app.App) Server {
|
||||
return Server{s: googrpc.NewServer(), app: *app}
|
||||
}
|
||||
|
||||
func (s *Server) Start(conf config.Config) error {
|
||||
s.app.Logger.Infof("GRPC server starting")
|
||||
listnGrpc, err := net.Listen("tcp", net.JoinHostPort(conf.Grpc.Address, conf.Grpc.Port))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return s.s.Serve(listnGrpc)
|
||||
}
|
||||
|
||||
func (s *Server) Stop() {
|
||||
s.s.GracefulStop()
|
||||
}
|
Loading…
Reference in New Issue