package tcp import ( "context" "github.com/gogf/gf/v2/net/gtcp" "github.com/gogf/gf/v2/net/gtrace" "hotgo/internal/consts" ) // initCtx 初始化上下文对象指针到上下文对象中,以便后续的请求流程中可以修改 func initCtx(ctx context.Context, model *Context) (newCtx context.Context, cancel context.CancelFunc) { if model.TraceID != "" { newCtx, _ = gtrace.WithTraceID(ctx, model.TraceID) } else { newCtx = ctx } newCtx = context.WithValue(newCtx, consts.ContextTCPKey, model) newCtx, cancel = context.WithCancel(newCtx) return } // SetCtx 设置上下文变量 func SetCtx(ctx context.Context, model *Context) { context.WithValue(ctx, consts.ContextTCPKey, model) } // GetCtx 获得上下文变量,如果没有设置,那么返回nil func GetCtx(ctx context.Context) *Context { value := ctx.Value(consts.ContextTCPKey) if value == nil { return nil } if localCtx, ok := value.(*Context); ok { return localCtx } return nil } // GetCtxConn . func GetCtxConn(ctx context.Context) *gtcp.Conn { c := GetCtx(ctx) if c == nil { return nil } return c.Conn } // GetCtxAuth 认证元数据 func GetCtxAuth(ctx context.Context) *AuthMeta { c := GetCtx(ctx) if c == nil { return nil } return c.Auth }