@@ -46,6 +46,7 @@ internal final class InternalDefaultLiveMap: Sendable {
4646
4747 private let logger : AblyPlugin . Logger
4848 private let userCallbackQueue : DispatchQueue
49+ private let clock : SimpleClock
4950
5051 // MARK: - Initialization
5152
@@ -55,13 +56,15 @@ internal final class InternalDefaultLiveMap: Sendable {
5556 testsOnly_semantics semantics: WireEnum < ObjectsMapSemantics > ? = nil ,
5657 logger: AblyPlugin . Logger ,
5758 userCallbackQueue: DispatchQueue ,
59+ clock: SimpleClock ,
5860 ) {
5961 self . init (
6062 data: data,
6163 objectID: objectID,
6264 semantics: semantics,
6365 logger: logger,
6466 userCallbackQueue: userCallbackQueue,
67+ clock: clock,
6568 )
6669 }
6770
@@ -71,10 +74,12 @@ internal final class InternalDefaultLiveMap: Sendable {
7174 semantics: WireEnum < ObjectsMapSemantics > ? ,
7275 logger: AblyPlugin . Logger ,
7376 userCallbackQueue: DispatchQueue ,
77+ clock: SimpleClock ,
7478 ) {
7579 mutableState = . init( liveObject: . init( objectID: objectID) , data: data, semantics: semantics)
7680 self . logger = logger
7781 self . userCallbackQueue = userCallbackQueue
82+ self . clock = clock
7883 }
7984
8085 /// Creates a "zero-value LiveMap", per RTLM4.
@@ -87,13 +92,15 @@ internal final class InternalDefaultLiveMap: Sendable {
8792 semantics: WireEnum < ObjectsMapSemantics > ? = nil ,
8893 logger: AblyPlugin . Logger ,
8994 userCallbackQueue: DispatchQueue ,
95+ clock: SimpleClock ,
9096 ) -> Self {
9197 . init(
9298 data: [ : ] ,
9399 objectID: objectID,
94100 semantics: semantics,
95101 logger: logger,
96102 userCallbackQueue: userCallbackQueue,
103+ clock: clock,
97104 )
98105 }
99106
@@ -244,6 +251,7 @@ internal final class InternalDefaultLiveMap: Sendable {
244251 using: state,
245252 objectsPool: & objectsPool,
246253 logger: logger,
254+ clock: clock,
247255 userCallbackQueue: userCallbackQueue,
248256 )
249257 }
@@ -257,6 +265,7 @@ internal final class InternalDefaultLiveMap: Sendable {
257265 objectsPool: & objectsPool,
258266 logger: logger,
259267 userCallbackQueue: userCallbackQueue,
268+ clock: clock,
260269 )
261270 }
262271 }
@@ -269,6 +278,7 @@ internal final class InternalDefaultLiveMap: Sendable {
269278 objectsPool: & objectsPool,
270279 logger: logger,
271280 userCallbackQueue: userCallbackQueue,
281+ clock: clock,
272282 )
273283 }
274284 }
@@ -288,6 +298,7 @@ internal final class InternalDefaultLiveMap: Sendable {
288298 objectsPool: & objectsPool,
289299 logger: logger,
290300 userCallbackQueue: userCallbackQueue,
301+ clock: clock,
291302 )
292303 }
293304 }
@@ -309,6 +320,7 @@ internal final class InternalDefaultLiveMap: Sendable {
309320 objectsPool: & objectsPool,
310321 logger: logger,
311322 userCallbackQueue: userCallbackQueue,
323+ clock: clock,
312324 )
313325 }
314326 }
@@ -352,6 +364,7 @@ internal final class InternalDefaultLiveMap: Sendable {
352364 using state: ObjectState ,
353365 objectsPool: inout ObjectsPool ,
354366 logger: AblyPlugin . Logger ,
367+ clock: SimpleClock ,
355368 userCallbackQueue: DispatchQueue ,
356369 ) -> LiveObjectUpdate < DefaultLiveMapUpdate > {
357370 // RTLM6a: Replace the private siteTimeserials with the value from ObjectState.siteTimeserials
@@ -370,6 +383,7 @@ internal final class InternalDefaultLiveMap: Sendable {
370383 objectsPool: & objectsPool,
371384 logger: logger,
372385 userCallbackQueue: userCallbackQueue,
386+ clock: clock,
373387 )
374388 } else {
375389 // TODO: I assume this is what to do, clarify in https://github.com/ably/specification/pull/346/files#r2201363446
@@ -383,6 +397,7 @@ internal final class InternalDefaultLiveMap: Sendable {
383397 objectsPool: inout ObjectsPool ,
384398 logger: AblyPlugin . Logger ,
385399 userCallbackQueue: DispatchQueue ,
400+ clock: SimpleClock ,
386401 ) -> LiveObjectUpdate < DefaultLiveMapUpdate > {
387402 // RTLM17a: For each key–ObjectsMapEntry pair in ObjectOperation.map.entries
388403 let perKeyUpdates : [ LiveObjectUpdate < DefaultLiveMapUpdate > ] = if let entries = operation. map? . entries {
@@ -404,6 +419,7 @@ internal final class InternalDefaultLiveMap: Sendable {
404419 objectsPool: & objectsPool,
405420 logger: logger,
406421 userCallbackQueue: userCallbackQueue,
422+ clock: clock,
407423 )
408424 }
409425 }
@@ -439,6 +455,7 @@ internal final class InternalDefaultLiveMap: Sendable {
439455 objectsPool: inout ObjectsPool ,
440456 logger: Logger ,
441457 userCallbackQueue: DispatchQueue ,
458+ clock: SimpleClock ,
442459 ) {
443460 guard let applicableOperation = liveObject. canApplyOperation ( objectMessageSerial: objectMessageSerial, objectMessageSiteCode: objectMessageSiteCode, logger: logger) else {
444461 // RTLM15b
@@ -457,6 +474,7 @@ internal final class InternalDefaultLiveMap: Sendable {
457474 objectsPool: & objectsPool,
458475 logger: logger,
459476 userCallbackQueue: userCallbackQueue,
477+ clock: clock,
460478 )
461479 // RTLM15d1a
462480 liveObject. emit ( update, on: userCallbackQueue)
@@ -478,6 +496,7 @@ internal final class InternalDefaultLiveMap: Sendable {
478496 objectsPool: & objectsPool,
479497 logger: logger,
480498 userCallbackQueue: userCallbackQueue,
499+ clock: clock,
481500 )
482501 // RTLM15d2a
483502 liveObject. emit ( update, on: userCallbackQueue)
@@ -507,6 +526,7 @@ internal final class InternalDefaultLiveMap: Sendable {
507526 objectsPool: inout ObjectsPool ,
508527 logger: AblyPlugin . Logger ,
509528 userCallbackQueue: DispatchQueue ,
529+ clock: SimpleClock ,
510530 ) -> LiveObjectUpdate < DefaultLiveMapUpdate > {
511531 // RTLM7a: If an entry exists in the private data for the specified key
512532 if let existingEntry = data [ key] {
@@ -533,7 +553,7 @@ internal final class InternalDefaultLiveMap: Sendable {
533553 // RTLM7c: If the operation has a non-empty ObjectData.objectId attribute
534554 if let objectId = operationData. objectId, !objectId. isEmpty {
535555 // RTLM7c1: Create a zero-value LiveObject in the internal ObjectsPool per RTO6
536- _ = objectsPool. createZeroValueObject ( forObjectID: objectId, logger: logger, userCallbackQueue: userCallbackQueue)
556+ _ = objectsPool. createZeroValueObject ( forObjectID: objectId, logger: logger, userCallbackQueue: userCallbackQueue, clock : clock )
537557 }
538558
539559 // RTLM7f
@@ -615,6 +635,7 @@ internal final class InternalDefaultLiveMap: Sendable {
615635 objectsPool: inout ObjectsPool ,
616636 logger: AblyPlugin . Logger ,
617637 userCallbackQueue: DispatchQueue ,
638+ clock: SimpleClock ,
618639 ) -> LiveObjectUpdate < DefaultLiveMapUpdate > {
619640 if liveObject. createOperationIsMerged {
620641 // RTLM16b
@@ -630,6 +651,7 @@ internal final class InternalDefaultLiveMap: Sendable {
630651 objectsPool: & objectsPool,
631652 logger: logger,
632653 userCallbackQueue: userCallbackQueue,
654+ clock: clock,
633655 )
634656 }
635657
0 commit comments