package cmd import ( "context" "net" "time" "github.com/ayflying/p2p/internal/controller/p2p" "github.com/ayflying/p2p/internal/service" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" "github.com/gogf/gf/v2/os/gcmd" "github.com/gogf/gf/v2/os/gctx" "github.com/gogf/gf/v2/os/gtimer" ) func init() { err := Main.AddCommand(&Main, &Debug, &P2p) if err != nil { g.Log().Error(gctx.GetInitCtx(), err) return } } var ( Main = gcmd.Command{ Name: "main", Usage: "main", Brief: "start http server", Func: func(ctx context.Context, parser *gcmd.Parser) (err error) { parser, err = gcmd.Parse(g.MapStrBool{ "w,ws": true, "g,gateway": true, "p,port": true, }) addr := g.Cfg().MustGet(ctx, "ws.address").String() ws := parser.GetOpt("ws", addr).String() //port := parser.GetOpt("port", 0).Int() s := g.Server() s.Group("/", func(group *ghttp.RouterGroup) { group.Middleware(ghttp.MiddlewareHandlerResponse) group.Bind( p2p.NewV1(), ) }) //启动p2p服务端网关 s.Group("/ws", func(group *ghttp.RouterGroup) { group.Middleware(ghttp.MiddlewareHandlerResponse) err = service.P2P().GatewayStart(ctx, group) if err != nil { g.Log().Error(ctx, err) } }) //s.SetPort(port) // 延迟启动 gtimer.SetTimeout(ctx, time.Second*5, func(ctx context.Context) { g.Log().Debug(ctx, "开始执行客户端") // 启动p2p客户端 err = service.P2P().Start(ctx, ws) g.Log().Debugf(ctx, "当前监听端口:%v", s.GetListenedPort()) addrs, _ := net.InterfaceAddrs() for _, addr := range addrs { if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() && ipnet.IP.To4() != nil { g.Log().Infof(ctx, "访问地址:http://%v:%d", ipnet.IP.String(), s.GetListenedPort()) } } }) s.Run() return nil }, } )