Skip to content

Commit 94efe5a

Browse files
Add new serialTimestamp fields
Per [1] at 488e932. Preparation for implementing this tombstoning spec. [1] ably/specification#350
1 parent 1998057 commit 94efe5a

2 files changed

Lines changed: 19 additions & 0 deletions

File tree

Sources/AblyLiveObjects/Protocol/ObjectMessage.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ internal struct InboundObjectMessage {
1414
internal var object: ObjectState? // OM2g
1515
internal var serial: String? // OM2h
1616
internal var siteCode: String? // OM2i
17+
internal var serialTimestamp: Date? // OM2j
1718
}
1819

1920
/// An `ObjectMessage` to be sent in the `state` property of an `OBJECT` `ProtocolMessage`.
@@ -27,6 +28,7 @@ internal struct OutboundObjectMessage {
2728
internal var object: ObjectState? // OM2g
2829
internal var serial: String? // OM2h
2930
internal var siteCode: String? // OM2i
31+
internal var serialTimestamp: Date? // OM2j
3032
}
3133

3234
internal struct ObjectOperation {
@@ -65,6 +67,7 @@ internal struct ObjectsMapEntry {
6567
internal var tombstone: Bool? // OME2a
6668
internal var timeserial: String? // OME2b
6769
internal var data: ObjectData // OME2c
70+
internal var serialTimestamp: Date? // OME2d
6871
}
6972

7073
internal struct ObjectsMap {
@@ -104,6 +107,7 @@ internal extension InboundObjectMessage {
104107
}
105108
serial = wireObjectMessage.serial
106109
siteCode = wireObjectMessage.siteCode
110+
serialTimestamp = wireObjectMessage.serialTimestamp
107111
}
108112
}
109113

@@ -123,6 +127,7 @@ internal extension OutboundObjectMessage {
123127
object: object?.toWire(format: format),
124128
serial: serial,
125129
siteCode: siteCode,
130+
serialTimestamp: serialTimestamp,
126131
)
127132
}
128133
}
@@ -360,6 +365,7 @@ internal extension ObjectsMapEntry {
360365
tombstone = wireObjectsMapEntry.tombstone
361366
timeserial = wireObjectsMapEntry.timeserial
362367
data = try .init(wireObjectData: wireObjectsMapEntry.data, format: format)
368+
serialTimestamp = wireObjectsMapEntry.serialTimestamp
363369
}
364370

365371
/// Converts this `ObjectsMapEntry` to a `WireObjectsMapEntry`, applying the data encoding rules of OD4.

Sources/AblyLiveObjects/Protocol/WireObjectMessage.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ internal struct InboundWireObjectMessage {
1515
internal var object: WireObjectState? // OM2g
1616
internal var serial: String? // OM2h
1717
internal var siteCode: String? // OM2i
18+
internal var serialTimestamp: Date? // OM2j
1819
}
1920

2021
/// An `ObjectMessage` to be sent in the `state` property of an `OBJECT` `ProtocolMessage`.
@@ -28,6 +29,7 @@ internal struct OutboundWireObjectMessage {
2829
internal var object: WireObjectState? // OM2g
2930
internal var serial: String? // OM2h
3031
internal var siteCode: String? // OM2i
32+
internal var serialTimestamp: Date? // OM2j
3133
}
3234

3335
/// The keys for decoding an `InboundWireObjectMessage` or encoding an `OutboundWireObjectMessage`.
@@ -41,6 +43,7 @@ internal enum WireObjectMessageWireKey: String {
4143
case object
4244
case serial
4345
case siteCode
46+
case serialTimestamp
4447
}
4548

4649
internal extension InboundWireObjectMessage {
@@ -96,6 +99,7 @@ internal extension InboundWireObjectMessage {
9699
object = try wireObject.optionalDecodableValueForKey(WireObjectMessageWireKey.object.rawValue)
97100
serial = try wireObject.optionalStringValueForKey(WireObjectMessageWireKey.serial.rawValue)
98101
siteCode = try wireObject.optionalStringValueForKey(WireObjectMessageWireKey.siteCode.rawValue)
102+
serialTimestamp = try wireObject.optionalAblyProtocolDateValueForKey(WireObjectMessageWireKey.serialTimestamp.rawValue)
99103
}
100104
}
101105

@@ -131,6 +135,9 @@ extension OutboundWireObjectMessage: WireObjectEncodable {
131135
if let object {
132136
result[WireObjectMessageWireKey.object.rawValue] = .object(object.toWireObject)
133137
}
138+
if let serialTimestamp {
139+
result[WireObjectMessageWireKey.serialTimestamp.rawValue] = .number(NSNumber(value: serialTimestamp.timeIntervalSince1970 * 1000))
140+
}
134141
return result
135142
}
136143
}
@@ -386,19 +393,22 @@ internal struct WireObjectsMapEntry {
386393
internal var tombstone: Bool? // OME2a
387394
internal var timeserial: String? // OME2b
388395
internal var data: WireObjectData // OME2c
396+
internal var serialTimestamp: Date? // OME2d
389397
}
390398

391399
extension WireObjectsMapEntry: WireObjectCodable {
392400
internal enum WireKey: String {
393401
case tombstone
394402
case timeserial
395403
case data
404+
case serialTimestamp
396405
}
397406

398407
internal init(wireObject: [String: WireValue]) throws(InternalError) {
399408
tombstone = try wireObject.optionalBoolValueForKey(WireKey.tombstone.rawValue)
400409
timeserial = try wireObject.optionalStringValueForKey(WireKey.timeserial.rawValue)
401410
data = try wireObject.decodableValueForKey(WireKey.data.rawValue)
411+
serialTimestamp = try wireObject.optionalAblyProtocolDateValueForKey(WireKey.serialTimestamp.rawValue)
402412
}
403413

404414
internal var toWireObject: [String: WireValue] {
@@ -412,6 +422,9 @@ extension WireObjectsMapEntry: WireObjectCodable {
412422
if let timeserial {
413423
result[WireKey.timeserial.rawValue] = .string(timeserial)
414424
}
425+
if let serialTimestamp {
426+
result[WireKey.serialTimestamp.rawValue] = .number(NSNumber(value: serialTimestamp.timeIntervalSince1970 * 1000))
427+
}
415428

416429
return result
417430
}

0 commit comments

Comments
 (0)