Skip to content

Commit 9431c4d

Browse files
committed
[feature] Avoid duplicate proposals - override instead
1 parent 99700cd commit 9431c4d

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

internal/app/controller/controller.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,14 +106,26 @@ func (c *GameController) ProcessAutoRefRequests(id string, request refproto.Auto
106106
if c.Engine.State.GameEventBehavior[event.GameEvent.Type] == GameEventBehaviorMajority {
107107
validUntil := c.Engine.TimeProvider().Add(c.Config.Game.AutoRefProposalTimeout)
108108
newProposal := GameEventProposal{GameEvent: *event.GameEvent, ProposerId: id, ValidUntil: validUntil}
109-
c.Engine.State.GameEventProposals = append(c.Engine.State.GameEventProposals, &newProposal)
109+
110+
eventPresent := false
111+
for _, proposal := range c.Engine.State.GameEventProposals {
112+
if proposal.GameEvent.Type == event.GameEvent.Type && proposal.ProposerId == newProposal.ProposerId {
113+
// update proposal
114+
*proposal = newProposal
115+
eventPresent = true
116+
}
117+
}
118+
if !eventPresent {
119+
c.Engine.State.GameEventProposals = append(c.Engine.State.GameEventProposals, &newProposal)
120+
}
110121

111122
totalProposals := 0
112123
for _, proposal := range c.Engine.State.GameEventProposals {
113124
if proposal.GameEvent.Type == event.GameEvent.Type && proposal.ValidUntil.After(c.Engine.TimeProvider()) {
114125
totalProposals++
115126
}
116127
}
128+
117129
majority := int(math.Floor(float64(len(c.AutoRefServer.Clients)) / 2.0))
118130
if totalProposals > majority {
119131
c.OnNewEvent(event)

0 commit comments

Comments
 (0)