| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- // package serv_grpc -- сервер GRPC-запросов шины данных
- package serv_grpc
- import (
- "fmt"
- "io"
- "log"
- "net"
- "os"
- "google.golang.org/grpc"
- "p78git.ddns.net/svi/gobus/internal/serv_grpc/serv_get"
- "p78git.ddns.net/svi/gobus/internal/serv_grpc/serv_public"
- "p78git.ddns.net/svi/gobus/internal/serv_grpc/serv_subcsribe"
- "p78git.ddns.net/svi/gobus/internal/serv_grpc/serv_subscribe_buffer"
- "p78git.ddns.net/svi/gobus/internal/serv_grpc/serv_sync"
- "p78git.ddns.net/svi/gobus/pkg/net/netapi"
- "p78git.ddns.net/svi/gobus/pkg/types"
- )
- // ServGrpc -- сервер GRPC-запросов шины данных
- type ServGrpc struct {
- netapi.UnsafeGoBusServer
- srv net.Listener
- port string
- *serv_get.ServGet
- *serv_public.ServPublic
- *serv_sync.ServSync
- *serv_subcsribe.ServSubscribe
- *serv_subscribe_buffer.ServSubscribeBuffer
- }
- // NewServGrpc -- возвращает новый GRPC-сервер шины данных
- func NewServGrpc(serv types.IService) (*ServGrpc, error) {
- log.Printf("NewServGrpc()\n")
- if serv == nil {
- return nil, fmt.Errorf("NewServGrpc(): IService==nil")
- }
- port := os.Getenv("SERV_GRPC_PORT")
- if port == "" {
- return nil, fmt.Errorf("NewServGrpc(): env SERV_GRPC_PORT not set")
- }
- sf := &ServGrpc{
- port: port,
- }
- var err error
- sf.ServPublic, err = serv_public.NewServPublic(serv)
- if err != nil {
- return nil, fmt.Errorf("NewServGrpc(): in create ServPublic, err=\n\t%w", err)
- }
- sf.ServSubscribe, err = serv_subcsribe.NewServSubscribe(serv)
- if err != nil {
- return nil, fmt.Errorf("NewServGrpc(): in create ServSubscribe, err=\n\t%w", err)
- }
- _ = netapi.GoBusServer(sf)
- return sf, nil
- }
- // Run -- запускает GRPC-сервер в работу
- func (sf *ServGrpc) Run() {
- log.Printf("ServGrpc.Run()\n")
- go sf.listen()
- }
- // Слушает порт
- func (sf *ServGrpc) listen() {
- var err error
- sf.srv, err = net.Listen("tcp", ":"+sf.port)
- if err != nil {
- log.Printf("ServGrpc.listen(): failed to listen, err=\n\t%v\n", err)
- return
- }
- opts := []grpc.ServerOption{}
- grpcServer := grpc.NewServer(opts...)
- netapi.RegisterGoBusServer(grpcServer, sf)
- err = grpcServer.Serve(sf.srv)
- if err != nil && err != io.EOF {
- strErr := fmt.Sprintf("ServGrpc.listen(): failed to listen, err=\n\t%v\n", err)
- log.Printf("ServGrpc.listen(): ошибка при работе GRPC-сервера, err=\n\t%v\n", strErr)
- }
- log.Printf("ServGrpc.listen(): работа сервера завершена")
- }
|