mirror of https://github.com/v2ray/v2ray-core
predicate.Not
parent
f3a83c57ab
commit
da9f1a8013
|
@ -23,3 +23,9 @@ func Any(predicates ...Predicate) Predicate {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Not(predicate Predicate) Predicate {
|
||||||
|
return func() bool {
|
||||||
|
return !predicate()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -225,17 +225,21 @@ func NewConnection(conv uint16, writerCloser io.WriteCloser, local *net.UDPAddr,
|
||||||
conn.congestionControl = config.Congestion
|
conn.congestionControl = config.Congestion
|
||||||
conn.sendingWorker = NewSendingWorker(conn)
|
conn.sendingWorker = NewSendingWorker(conn)
|
||||||
|
|
||||||
|
isTerminating := func() bool {
|
||||||
|
return conn.State().Is(StateTerminating, StateTerminated)
|
||||||
|
}
|
||||||
|
isTerminated := func() bool {
|
||||||
|
return conn.State() == StateTerminated
|
||||||
|
}
|
||||||
conn.dataUpdater = NewUpdater(
|
conn.dataUpdater = NewUpdater(
|
||||||
conn.interval,
|
conn.interval,
|
||||||
predicate.Any(conn.sendingWorker.UpdateNecessary, conn.receivingWorker.UpdateNecessary),
|
predicate.All(predicate.Not(isTerminating), predicate.Any(conn.sendingWorker.UpdateNecessary, conn.receivingWorker.UpdateNecessary)),
|
||||||
func() bool {
|
isTerminating,
|
||||||
return conn.State() == StateTerminated
|
|
||||||
},
|
|
||||||
conn.updateTask)
|
conn.updateTask)
|
||||||
conn.pingUpdater = NewUpdater(
|
conn.pingUpdater = NewUpdater(
|
||||||
5000, // 5 seconds
|
5000, // 5 seconds
|
||||||
func() bool { return conn.State() != StateTerminated },
|
predicate.Not(isTerminated),
|
||||||
func() bool { return conn.State() == StateTerminated },
|
isTerminated,
|
||||||
conn.updateTask)
|
conn.updateTask)
|
||||||
conn.pingUpdater.WakeUp()
|
conn.pingUpdater.WakeUp()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue