serv_grpc.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // package serv_grpc -- сервер GRPC-запросов шины данных
  2. package serv_grpc
  3. import (
  4. "fmt"
  5. "io"
  6. "log"
  7. "net"
  8. "os"
  9. "google.golang.org/grpc"
  10. "p78git.ddns.net/svi/gobus/internal/serv_grpc/serv_get"
  11. "p78git.ddns.net/svi/gobus/internal/serv_grpc/serv_public"
  12. "p78git.ddns.net/svi/gobus/internal/serv_grpc/serv_subcsribe"
  13. "p78git.ddns.net/svi/gobus/internal/serv_grpc/serv_subscribe_buffer"
  14. "p78git.ddns.net/svi/gobus/internal/serv_grpc/serv_sync"
  15. "p78git.ddns.net/svi/gobus/pkg/net/netapi"
  16. "p78git.ddns.net/svi/gobus/pkg/types"
  17. )
  18. // ServGrpc -- сервер GRPC-запросов шины данных
  19. type ServGrpc struct {
  20. netapi.UnsafeGoBusServer
  21. srv net.Listener
  22. port string
  23. *serv_get.ServGet
  24. *serv_public.ServPublic
  25. *serv_sync.ServSync
  26. *serv_subcsribe.ServSubscribe
  27. *serv_subscribe_buffer.ServSubscribeBuffer
  28. }
  29. // NewServGrpc -- возвращает новый GRPC-сервер шины данных
  30. func NewServGrpc(serv types.IService) (*ServGrpc, error) {
  31. log.Printf("NewServGrpc()\n")
  32. if serv == nil {
  33. return nil, fmt.Errorf("NewServGrpc(): IService==nil")
  34. }
  35. port := os.Getenv("SERV_GRPC_PORT")
  36. if port == "" {
  37. return nil, fmt.Errorf("NewServGrpc(): env SERV_GRPC_PORT not set")
  38. }
  39. sf := &ServGrpc{
  40. port: port,
  41. }
  42. var err error
  43. sf.ServPublic, err = serv_public.NewServPublic(serv)
  44. if err != nil {
  45. return nil, fmt.Errorf("NewServGrpc(): in create ServPublic, err=\n\t%w", err)
  46. }
  47. sf.ServSubscribe, err = serv_subcsribe.NewServSubscribe(serv)
  48. if err != nil {
  49. return nil, fmt.Errorf("NewServGrpc(): in create ServSubscribe, err=\n\t%w", err)
  50. }
  51. _ = netapi.GoBusServer(sf)
  52. return sf, nil
  53. }
  54. // Run -- запускает GRPC-сервер в работу
  55. func (sf *ServGrpc) Run() {
  56. log.Printf("ServGrpc.Run()\n")
  57. go sf.listen()
  58. }
  59. // Слушает порт
  60. func (sf *ServGrpc) listen() {
  61. var err error
  62. sf.srv, err = net.Listen("tcp", ":"+sf.port)
  63. if err != nil {
  64. log.Printf("ServGrpc.listen(): failed to listen, err=\n\t%v\n", err)
  65. return
  66. }
  67. opts := []grpc.ServerOption{}
  68. grpcServer := grpc.NewServer(opts...)
  69. netapi.RegisterGoBusServer(grpcServer, sf)
  70. err = grpcServer.Serve(sf.srv)
  71. if err != nil && err != io.EOF {
  72. strErr := fmt.Sprintf("ServGrpc.listen(): failed to listen, err=\n\t%v\n", err)
  73. log.Printf("ServGrpc.listen(): ошибка при работе GRPC-сервера, err=\n\t%v\n", strErr)
  74. }
  75. log.Printf("ServGrpc.listen(): работа сервера завершена")
  76. }