Skip to content

Commit dece45c

Browse files
authored
Merge pull request #3532 from ikemen-engine/fix3
fix: desync not ending netplay session
2 parents e5618ca + 419ea09 commit dece45c

1 file changed

Lines changed: 17 additions & 5 deletions

File tree

src/rollback.go

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ func (rs *RollbackSystem) hijackRunMatch(s *System) bool {
5353
panic(err)
5454
}
5555

56+
// Desync/disconnect callbacks may request a session abort outside the normal input path.
57+
if s.esc {
58+
break
59+
}
60+
5661
// Sync speculative inputs and run a speculative frame
5762
running = rs.runFrame(s)
5863

@@ -62,7 +67,7 @@ func (rs *RollbackSystem) hijackRunMatch(s *System) bool {
6267

6368
rs.session.next = rs.session.now + 1000/60
6469

65-
if !running {
70+
if s.esc || !running {
6671
break
6772
}
6873

@@ -71,7 +76,7 @@ func (rs *RollbackSystem) hijackRunMatch(s *System) bool {
7176
//rs.session.loopTimer.usToWaitThisLoop()
7277
running = s.update()
7378

74-
if !running {
79+
if s.esc || !running {
7580
break
7681
}
7782
}
@@ -151,6 +156,10 @@ func (rs *RollbackSystem) runFrame(s *System) bool {
151156
var buffer []byte
152157
var ggpoerr error
153158

159+
if s.esc {
160+
return false
161+
}
162+
154163
if rs.session.syncTest && rs.session.netTime == 0 {
155164
if rs.session.config.DesyncTestAI {
156165
buffer = getAIInputs(0)
@@ -201,7 +210,7 @@ func (rs *RollbackSystem) runFrame(s *System) bool {
201210
if err != nil {
202211
panic(err)
203212
}
204-
if !keepRunning {
213+
if s.esc || !keepRunning {
205214
return false
206215
}
207216
}
@@ -732,7 +741,9 @@ func (r *RollbackSession) OnEvent(info *ggpo.Event) {
732741
fmt.Println("EventCodeDisconnectedFromPeer")
733742
sys.endMatch = true
734743
r.SaveReplay()
735-
sys.sessionWarning = fmt.Sprintf(sys.motif.WarningInfo.Text.Text["disconnect"], int(info.Player))
744+
if sys.sessionWarning == "" {
745+
sys.sessionWarning = fmt.Sprintf(sys.motif.WarningInfo.Text.Text["disconnect"], int(info.Player))
746+
}
736747
case ggpo.EventCodeTimeSync:
737748
fmt.Printf("EventCodeTimeSync: FramesAhead %f TimeSyncPeriodInFrames: %d\n", info.FramesAhead, info.TimeSyncPeriodInFrames)
738749
r.loopTimer.OnGGPOTimeSyncEvent(info.FramesAhead)
@@ -741,7 +752,8 @@ func (r *RollbackSession) OnEvent(info *ggpo.Event) {
741752
r.log.saveLogs()
742753
}
743754
fmt.Println("EventCodeDesync")
744-
sys.endMatch = true
755+
log.Printf("Rollback desync detected")
756+
sys.esc = true
745757
r.SaveReplay()
746758
sys.sessionWarning = sys.motif.WarningInfo.Text.Text["desync"]
747759
case ggpo.EventCodeConnectionInterrupted:

0 commit comments

Comments
 (0)