package cmd import ( "context" "fmt" "git.5iot.com/iotlcm-public/iotlcm-upstream-proxy/internal/controller/infopb" "git.5iot.com/iotlcm-public/iotlcm-upstream-proxy/internal/controller/msgcallpb" "git.5iot.com/iotlcm-public/iotlcm-upstream-proxy/internal/service" "git.5iot.com/iotlcm-public/iotlcm-upstream-proxy/internal/pub/xjpubconsts" "git.5iot.com/iotlcm-public/iotlcm-upstream-proxy/internal/pub/xjpubservice" "github.com/gogf/gf/contrib/rpc/grpcx/v2" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/gsvc" "github.com/gogf/gf/v2/os/gcmd" "github.com/gogf/gf/v2/util/gconv" "google.golang.org/grpc" "google.golang.org/grpc/reflection" ) const ( ServiceNamePrefix = "iotlcmupstreamproxy" ) var ( gGrpcPort = 8700 gAccessIP = "0.0.0.0" ) var ( Main = gcmd.Command{ Name: "main", Usage: "main", Brief: "start http server", Func: func(ctx context.Context, parser *gcmd.Parser) (err error) { s := g.Server() gGrpcPort = gconv.Int(gcmd.GetOptWithEnv("grpcport")) gAccessIP = gconv.String(gcmd.GetOptWithEnv("accessip")) if len(gAccessIP) == 0 { gAccessIP = "0.0.0.0" } if gGrpcPort == 0 { gGrpcPort = 8110 } nodeName := fmt.Sprintf("%s", ServiceNamePrefix) xjpubservice.Info().SetInfoName(xjpubconsts.ServiceTypeAccess, fmt.Sprintf("%s-http-svc", ServiceNamePrefix), "上游运营商渠道服务", "上游运营商渠道服务") xjpubservice.Info().AddInfoData("grpcport", gGrpcPort) xjpubservice.Info().AddInfoData("accessip", gAccessIP) xjpubservice.Info().AddInfoData("nodeName", nodeName) xjpubservice.InfoRpc().SetInfoName(xjpubconsts.ServiceTypeAccess, fmt.Sprintf("%s-grpc-svc", ServiceNamePrefix), "上游运营商渠道服务", "上游运营商渠道服务") xjpubservice.InfoRpc().AddInfoData("grpcport", gGrpcPort) xjpubservice.InfoRpc().AddInfoData("accessip", gAccessIP) xjpubservice.InfoRpc().AddInfoData("nodeName", nodeName) bindHTTPRoutes(s) err = service.ChannelConfig().Start(ctx) if err != nil { return err } err = service.UpstreamAPI().Start(ctx) if err != nil { return err } go func() { c := grpcx.Server.NewConfig() c.Endpoints = []string{fmt.Sprintf("%s:%d", gAccessIP, gGrpcPort)} c.Options = append(c.Options, []grpc.ServerOption{ grpcx.Server.ChainUnary( grpcx.Server.UnaryValidate, ), }...) sGRPC := grpcx.Server.New(c) sGRPC.Service(&gsvc.LocalService{ Name: fmt.Sprintf("%s-grpc-svc", ServiceNamePrefix), Endpoints: gsvc.Endpoints{gsvc.NewEndpoint(fmt.Sprintf("%s:%d", gAccessIP, gGrpcPort))}, Metadata: gsvc.Metadata{ gsvc.MDProtocol: "grpc", gsvc.MDInsecure: true, }, }) infopb.Register(sGRPC) msgcallpb.Register(sGRPC) reflection.Register(sGRPC.Server) g.Log().Infof(ctx, "GRPC Server启动, listenPort:%d", gGrpcPort) sGRPC.Run() g.Log().Infof(ctx, "GRPC Server堵塞运行结束") }() s.Run() service.UpstreamAPI().Stop(ctx) service.ChannelConfig().Stop(ctx) return nil }, } )