serv_grpc.go 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. _ = netapi.GoBusServer(sf)
  48. return sf, nil
  49. }
  50. // Run -- запускает GRPC-сервер в работу
  51. func (sf *ServGrpc) Run() {
  52. log.Printf("ServGrpc.Run()\n")
  53. go sf.listen()
  54. }
  55. // Слушает порт
  56. func (sf *ServGrpc) listen() {
  57. var err error
  58. sf.srv, err = net.Listen("tcp", ":"+sf.port)
  59. if err != nil {
  60. log.Printf("ServGrpc.listen(): failed to listen, err=\n\t%v\n", err)
  61. return
  62. }
  63. opts := []grpc.ServerOption{}
  64. grpcServer := grpc.NewServer(opts...)
  65. netapi.RegisterGoBusServer(grpcServer, sf)
  66. err = grpcServer.Serve(sf.srv)
  67. if err != nil && err != io.EOF {
  68. strErr := fmt.Sprintf("ServGrpc.listen(): failed to listen, err=\n\t%v\n", err)
  69. log.Printf("ServGrpc.listen(): ошибка при работе GRPC-сервера, err=\n\t%v\n", strErr)
  70. }
  71. log.Printf("ServGrpc.listen(): работа сервера завершена")
  72. }