Files
apinto/drivers/plugins/proxy-mirror/handler.go
huangmengzhu a077ec7a20 重构 clone
2023-03-02 19:46:51 +08:00

46 lines
940 B
Go

package proxy_mirror
import (
"github.com/eolinker/eosc/eocontext"
"github.com/eolinker/eosc/log"
)
type proxyMirrorCompleteHandler struct {
orgComplete eocontext.CompleteHandler
service *mirrorService
}
func newMirrorHandler(eoCtx eocontext.EoContext, service *mirrorService) (eocontext.CompleteHandler, error) {
handler := &proxyMirrorCompleteHandler{
orgComplete: eoCtx.GetComplete(),
service: service,
}
return handler, nil
}
func (p *proxyMirrorCompleteHandler) Complete(ctx eocontext.EoContext) error {
cloneCtx, err := ctx.Clone()
//先执行原始Complete, 再执行镜像请求的Complete
orgErr := p.orgComplete.Complete(ctx)
if err != nil {
log.Warn(err)
return orgErr
}
cloneCtx.SetApp(p.service)
cloneCtx.SetBalance(p.service)
cloneCtx.SetUpstreamHostHandler(p.service)
go func() {
err = p.orgComplete.Complete(cloneCtx)
if err != nil {
log.Error(err)
}
}()
return orgErr
}