1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2026-05-08 21:49:08 -04:00

go style task engine

This commit is contained in:
Darien Raymond
2016-12-29 22:17:12 +01:00
parent bdfb879963
commit 690d71b16e
4 changed files with 100 additions and 132 deletions

View File

@@ -11,6 +11,7 @@ import (
"v2ray.com/core/common/log"
v2net "v2ray.com/core/common/net"
"v2ray.com/core/common/serial"
"v2ray.com/core/common/signal"
"v2ray.com/core/proxy"
"v2ray.com/core/transport/internet"
"v2ray.com/core/transport/internet/udp"
@@ -168,35 +169,37 @@ func (v *DokodemoDoor) HandleTCPConnection(conn internet.Connection) {
})
defer ray.InboundOutput().Release()
var wg sync.WaitGroup
reader := v2net.NewTimeOutReader(v.config.Timeout, conn)
defer reader.Release()
wg.Add(1)
go func() {
requestDone := signal.ExecuteAsync(func() error {
defer ray.InboundInput().Close()
v2reader := buf.NewReader(reader)
defer v2reader.Release()
if err := buf.PipeUntilEOF(v2reader, ray.InboundInput()); err != nil {
log.Info("Dokodemo: Failed to transport all TCP request: ", err)
return err
}
wg.Done()
ray.InboundInput().Close()
}()
wg.Add(1)
go func() {
return nil
})
responseDone := signal.ExecuteAsync(func() error {
defer ray.InboundOutput().Release()
v2writer := buf.NewWriter(conn)
defer v2writer.Release()
if err := buf.PipeUntilEOF(ray.InboundOutput(), v2writer); err != nil {
log.Info("Dokodemo: Failed to transport all TCP response: ", err)
return err
}
wg.Done()
}()
return nil
})
wg.Wait()
signal.ErrorOrFinish2(requestDone, responseDone)
}
type Factory struct{}