HW13 WIP 008

pull/14/head
Andrey Ivanov 2020-10-09 12:30:17 +03:00 committed by Andrey Ivanov
parent 6355c4138e
commit ac5ab7c6ed
5 changed files with 97 additions and 30 deletions

View File

@ -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())
}
}

View File

@ -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

View File

@ -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
}

View File

@ -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)
}

View File

@ -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()
}