mirror of
https://github.com/eolinker/apinto
synced 2025-10-05 08:47:04 +08:00
46 lines
940 B
Go
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
|
|
}
|