2019-11-21 16:19:22 +00:00
|
|
|
package protocol
|
2019-07-17 22:25:42 +00:00
|
|
|
|
|
|
|
import "time"
|
|
|
|
|
|
|
|
const clockBumpInMs = int64(time.Minute / time.Millisecond)
|
|
|
|
|
|
|
|
// CalcMessageClock calculates a new clock value for Message.
|
Move to protobuf for Message type (#1706)
* Use a single Message type `v1/message.go` and `message.go` are the same now, and they embed `protobuf.ChatMessage`
* Use `SendChatMessage` for sending chat messages, this is basically the old `Send` but a bit more flexible so we can send different message types (stickers,commands), and not just text.
* Remove dedup from services/shhext. Because now we process in status-protocol, dedup makes less sense, as those messages are going to be processed anyway, so removing for now, we can re-evaluate if bringing it to status-go or not.
* Change the various retrieveX method to a single one:
`RetrieveAll` will be processing those messages that it can process (Currently only `Message`), and return the rest in `RawMessages` (still transit). The format for the response is:
`Chats`: -> The chats updated by receiving the message
`Messages`: -> The messages retrieved (already matched to a chat)
`Contacts`: -> The contacts updated by the messages
`RawMessages` -> Anything else that can't be parsed, eventually as we move everything to status-protocol-go this will go away.
2019-12-05 16:25:34 +00:00
|
|
|
// It is used to properly sort messages and accommodate the fact
|
2019-07-17 22:25:42 +00:00
|
|
|
// that time might be different on each device.
|
|
|
|
func CalcMessageClock(lastObservedValue int64, timeInMs TimestampInMs) int64 {
|
|
|
|
clock := lastObservedValue
|
|
|
|
if clock < int64(timeInMs) {
|
|
|
|
// Added time should be larger than time skew tollerance for a message.
|
|
|
|
// Here, we use 1 minute which is larger than accepted message time skew by Whisper.
|
|
|
|
clock = int64(timeInMs) + clockBumpInMs
|
|
|
|
} else {
|
|
|
|
clock++
|
|
|
|
}
|
|
|
|
return clock
|
|
|
|
}
|