From f33bb7e9a305a716e52a3bec3665a0401809ffb7 Mon Sep 17 00:00:00 2001 From: Dustin Pianalto Date: Thu, 6 Mar 2025 14:04:46 -0900 Subject: [PATCH] Fix bug in race results (maybe) --- derby/derby.go | 24 ++++++++++++++---------- examples/main.go | 5 ++++- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/derby/derby.go b/derby/derby.go index ff0bd9b..530421e 100644 --- a/derby/derby.go +++ b/derby/derby.go @@ -186,7 +186,6 @@ func (dc *DerbyClock) readLoop() { if len(buffer) >= 3 && string(buffer[len(buffer)-3:]) == "C\r\n" { dc.mu.Lock() dc.status = StatusRunning - dc.results = nil dc.mu.Unlock() // Send race start event @@ -204,14 +203,6 @@ func (dc *DerbyClock) readLoop() { // Try to extract a result from the buffer result := dc.tryExtractResult(buffer) if result != nil { - dc.mu.Lock() - // Add result to our stored results - dc.results = append(dc.results, result) - - // Determine finish place based on how many results we have - result.FinishPlace = len(dc.results) - dc.mu.Unlock() - // Send lane finish event dc.eventChan <- Event{ Type: EventLaneFinish, @@ -282,11 +273,24 @@ func (dc *DerbyClock) tryExtractResult(buffer []byte) *Result { continue } + finishPlace := 0 + + switch finishChar { + case "!": + finishPlace = 1 + case "\"": + finishPlace = 2 + case "#": + finishPlace = 3 + case "$": + finishPlace = 4 + } + // Create and return the result return &Result{ Lane: lane, Time: timeVal, - FinishPlace: 0, // Will be set by the caller + FinishPlace: finishPlace, FinishSymbol: finishChar, } } diff --git a/examples/main.go b/examples/main.go index 772546b..5f999ce 100644 --- a/examples/main.go +++ b/examples/main.go @@ -47,6 +47,7 @@ func main() { // Process events from the clock go func() { + raceResults := make([]*derby.Result, 0) for event := range clock.Events() { switch event.Type { case derby.EventRaceStart: @@ -56,14 +57,16 @@ func main() { result := event.Result fmt.Printf("šŸš— Lane %d finished in place %d with time %.4f seconds\n", result.Lane, result.FinishPlace, result.Time) + raceResults = append(raceResults, result) case derby.EventRaceComplete: fmt.Println("\nšŸ† Race complete! Final results:") - for _, result := range clock.Results() { + for _, result := range raceResults { fmt.Printf("Place %d: Lane %d - %.4f seconds\n", result.FinishPlace, result.Lane, result.Time) } fmt.Println("\nEnter command (r/f/q/?):") + raceResults = nil } } }()