package main import ( clientv3 "go.etcd.io/etcd/client/v3" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/resolver" "sonet/internal/gateway_ws/server" "sonet/internal/postal/logic" "sonet/pkg/config" "sonet/pkg/grpc/discovery" "sonet/pkg/grpc/generic" "sonet/pkg/utils/logger" "sonet/pkg/utils/shutdown" ) type GatewayWsConfig struct { HttpPort int } // websocket server with postalService func main() { grpclog.SetLoggerV2(logger.Logger) appConf := &GatewayWsConfig{} conf := config.LoadConfig(appConf, "cmd/gateway_ws") // registry and run... etcdClient, err := clientv3.New(conf.Etcd) if err != nil { panic(err) } etcdResolver := discovery.NewResolver(etcdClient) resolver.Register(etcdResolver) grpcFactory := generic.NewGpcGenericClientFactory(etcdResolver, grpc.WithTransportCredentials(insecure.NewCredentials())) grpcFactory.Init() connHandler := server.NewConnHandler(grpcFactory) httpServer := server.NewHttpServer(connHandler) go func() { err = httpServer.Run(appConf.HttpPort) if err != nil { panic(err) } }() registry := discovery.NewRegister(etcdClient) shutdown.AddShutdownHook(registry.Stop) postalServer := logic.NewPostalServer() go func() { err = postalServer.Run(conf.Grpc, registry) if err != nil { panic(err) } }() shutdown.Await() }