Skip to content

Commit

Permalink
Added a new method to proto presence message to check for newer message
Browse files Browse the repository at this point in the history
  • Loading branch information
sacOO7 committed Aug 15, 2023
1 parent d0a618c commit a2e2d38
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 6 deletions.
14 changes: 14 additions & 0 deletions ably/proto_presence_message.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package ably

import (
"fmt"
"strings"
)

// PresenceAction describes the possible actions members in the presence set can emit (TP2).
Expand Down Expand Up @@ -58,3 +59,16 @@ func (m PresenceMessage) String() string {
"update",
}[m.Action], m.ClientID, m.Data)
}

// RTP2b1
func (msg *PresenceMessage) isServerSynthesizedPresenceMessage() bool {
return strings.HasPrefix(msg.ID, msg.ConnectionID)
}

func (oldMessage *PresenceMessage) IsNewerThan(incomingMessage *PresenceMessage) bool {
if oldMessage.isServerSynthesizedPresenceMessage() ||
incomingMessage.isServerSynthesizedPresenceMessage() {
return oldMessage.Timestamp > incomingMessage.Timestamp
}
return false
}
7 changes: 1 addition & 6 deletions ably/realtime_presence.go
Original file line number Diff line number Diff line change
Expand Up @@ -173,10 +173,6 @@ func (pres *RealtimePresence) processIncomingMessage(msg *protocolMessage, syncS
pres.syncStart(syncSerial)
}

isSynthesizedLeave := func(oldMsg *PresenceMessage, newMsg *PresenceMessage) bool {
return false
}

// RTP17
for _, presenceMember := range msg.Presence {
memberKey := presenceMember.ClientID
Expand Down Expand Up @@ -206,8 +202,7 @@ func (pres *RealtimePresence) processIncomingMessage(msg *protocolMessage, syncS
memberKey := presenceMember.ConnectionID + presenceMember.ClientID

if oldPresenceMember, ok := pres.members[memberKey]; ok { // RTP2a
if isSynthesizedLeave(oldPresenceMember, presenceMember) && // // RTP2b1
oldPresenceMember.Timestamp >= presenceMember.Timestamp {
if oldPresenceMember.IsNewerThan(presenceMember) { // RTP2b1
continue // do not process message with older timestamp // RTP2b1a
}
}
Expand Down

0 comments on commit a2e2d38

Please sign in to comment.