Skip to content

Commit b56f9ba

Browse files
authored
fix(event-dispatcher): add support for multiple clients (#402)
Fix event-dispatcher to support multiple clients (sdkKeys). - full thread-safety for additional concurrency requirements - no resource conflicts for multiple sdkKeys support
1 parent 372b278 commit b56f9ba

15 files changed

+395
-210
lines changed

OptimizelySwiftSDK.xcodeproj/project.pbxproj

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,19 @@
543543
6E593FB625BB9C5500EC72BC /* OptimizelyClientTests_Decide.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E593FB425BB9C5500EC72BC /* OptimizelyClientTests_Decide.swift */; };
544544
6E5AB69323F6130D007A82B1 /* OptimizelyClientTests_Init_Sync.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E5AB69123F6130C007A82B1 /* OptimizelyClientTests_Init_Sync.swift */; };
545545
6E5AB69423F6130D007A82B1 /* OptimizelyClientTests_Init_Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E5AB69223F6130D007A82B1 /* OptimizelyClientTests_Init_Async.swift */; };
546+
6E5D120D2638DCE1000ABFC3 /* EventDispatcherTests_MultiClients.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E5D120C2638DCE1000ABFC3 /* EventDispatcherTests_MultiClients.swift */; };
547+
6E5D121F2638DDF4000ABFC3 /* MockEventDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E5D121E2638DDF4000ABFC3 /* MockEventDispatcher.swift */; };
548+
6E5D12202638DDF4000ABFC3 /* MockEventDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E5D121E2638DDF4000ABFC3 /* MockEventDispatcher.swift */; };
549+
6E5D12212638DDF4000ABFC3 /* MockEventDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E5D121E2638DDF4000ABFC3 /* MockEventDispatcher.swift */; };
550+
6E5D12222638DDF4000ABFC3 /* MockEventDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E5D121E2638DDF4000ABFC3 /* MockEventDispatcher.swift */; };
551+
6E5D12232638DDF4000ABFC3 /* MockEventDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E5D121E2638DDF4000ABFC3 /* MockEventDispatcher.swift */; };
552+
6E5D12242638DDF4000ABFC3 /* MockEventDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E5D121E2638DDF4000ABFC3 /* MockEventDispatcher.swift */; };
553+
6E5D12252638DDF4000ABFC3 /* MockEventDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E5D121E2638DDF4000ABFC3 /* MockEventDispatcher.swift */; };
554+
6E5D12262638DDF4000ABFC3 /* MockEventDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E5D121E2638DDF4000ABFC3 /* MockEventDispatcher.swift */; };
555+
6E5D12272638DDF4000ABFC3 /* MockEventDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E5D121E2638DDF4000ABFC3 /* MockEventDispatcher.swift */; };
556+
6E5D12282638DDF4000ABFC3 /* MockEventDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E5D121E2638DDF4000ABFC3 /* MockEventDispatcher.swift */; };
557+
6E5D12292638DDF4000ABFC3 /* MockEventDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E5D121E2638DDF4000ABFC3 /* MockEventDispatcher.swift */; };
558+
6E5D122A2638DDF4000ABFC3 /* MockEventDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E5D121E2638DDF4000ABFC3 /* MockEventDispatcher.swift */; };
546559
6E614DD621E3F38A005982A1 /* Optimizely.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6E614DCD21E3F389005982A1 /* Optimizely.framework */; };
547560
6E623F02253F9045000617D0 /* DecisionInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E623F01253F9045000617D0 /* DecisionInfo.swift */; };
548561
6E623F03253F9045000617D0 /* DecisionInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E623F01253F9045000617D0 /* DecisionInfo.swift */; };
@@ -1828,6 +1841,8 @@
18281841
6E593FB425BB9C5500EC72BC /* OptimizelyClientTests_Decide.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OptimizelyClientTests_Decide.swift; sourceTree = "<group>"; };
18291842
6E5AB69123F6130C007A82B1 /* OptimizelyClientTests_Init_Sync.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OptimizelyClientTests_Init_Sync.swift; sourceTree = "<group>"; };
18301843
6E5AB69223F6130D007A82B1 /* OptimizelyClientTests_Init_Async.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OptimizelyClientTests_Init_Async.swift; sourceTree = "<group>"; };
1844+
6E5D120C2638DCE1000ABFC3 /* EventDispatcherTests_MultiClients.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventDispatcherTests_MultiClients.swift; sourceTree = "<group>"; };
1845+
6E5D121E2638DDF4000ABFC3 /* MockEventDispatcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockEventDispatcher.swift; sourceTree = "<group>"; };
18311846
6E614DCD21E3F389005982A1 /* Optimizely.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Optimizely.framework; sourceTree = BUILT_PRODUCTS_DIR; };
18321847
6E614DD521E3F38A005982A1 /* OptimizelyTests-tvOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "OptimizelyTests-tvOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
18331848
6E623F01253F9045000617D0 /* DecisionInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DecisionInfo.swift; sourceTree = "<group>"; };
@@ -2214,6 +2229,7 @@
22142229
6EA641F2262F4E6900E29532 /* DatafileHandlerTests_MultiClients.swift */,
22152230
6E424D7526324DBD0081004A /* AtomicArrayTests.swift */,
22162231
6E2D5DAD26338CA00002077F /* AtomicDictionaryTests.swift */,
2232+
6E5D120C2638DCE1000ABFC3 /* EventDispatcherTests_MultiClients.swift */,
22172233
);
22182234
path = "OptimizelyTests-MultiClients";
22192235
sourceTree = "<group>";
@@ -2566,6 +2582,7 @@
25662582
6E7519B822C5211100B2B157 /* OTUtils.swift */,
25672583
6E8A3D472637408500DAEA13 /* MockDatafileHandler.swift */,
25682584
6E7519B722C5211100B2B157 /* MockUrlSession.swift */,
2585+
6E5D121E2638DDF4000ABFC3 /* MockEventDispatcher.swift */,
25692586
);
25702587
path = TestUtils;
25712588
sourceTree = "<group>";
@@ -3615,6 +3632,7 @@
36153632
C78CAF5C2445AD8D009FE876 /* OptimizelyJSON.swift in Sources */,
36163633
6E14CDA52423F9C300010234 /* MurmurHash3.swift in Sources */,
36173634
6E86CEA824FDC847005DAFED /* OptimizelyUserContext+ObjC.swift in Sources */,
3635+
6E5D12222638DDF4000ABFC3 /* MockEventDispatcher.swift in Sources */,
36183636
6E14CD912423F9A700010234 /* TrafficAllocation.swift in Sources */,
36193637
6E14CD6F2423F93E00010234 /* OptimizelyError.swift in Sources */,
36203638
6EC6DD3624ABF6990017D296 /* OptimizelyClient+Decide.swift in Sources */,
@@ -3668,6 +3686,7 @@
36683686
6E424D2E26324BBA0081004A /* MockUrlSession.swift in Sources */,
36693687
6E424CF326324B620081004A /* OPTDatafileHandler.swift in Sources */,
36703688
6E424CF426324B620081004A /* DecisionInfo.swift in Sources */,
3689+
6E5D120D2638DCE1000ABFC3 /* EventDispatcherTests_MultiClients.swift in Sources */,
36713690
6E424CF526324B620081004A /* DefaultBucketer.swift in Sources */,
36723691
6E424D5426324C4D0081004A /* OptimizelyUserContext.swift in Sources */,
36733692
6E424CF626324B620081004A /* DefaultNotificationCenter.swift in Sources */,
@@ -3734,6 +3753,7 @@
37343753
6E424CBE26324B1D0081004A /* AtomicProperty.swift in Sources */,
37353754
6E424CBF26324B1D0081004A /* AtomicArray.swift in Sources */,
37363755
6E424CC026324B1D0081004A /* AtomicDictionary.swift in Sources */,
3756+
6E5D12212638DDF4000ABFC3 /* MockEventDispatcher.swift in Sources */,
37373757
6E424CC126324B1D0081004A /* Utils.swift in Sources */,
37383758
6E424CC226324B1D0081004A /* SDKVersion.swift in Sources */,
37393759
6E424C88263249B80081004A /* DatafileHandlerTests_MultiClients.swift in Sources */,
@@ -3865,6 +3885,7 @@
38653885
C78CAF612445AD8D009FE876 /* OptimizelyJSON.swift in Sources */,
38663886
6E7516D222C520D400B2B157 /* OPTLogger.swift in Sources */,
38673887
6E86CEAC24FDC849005DAFED /* OptimizelyUserContext+ObjC.swift in Sources */,
3888+
6E5D12272638DDF4000ABFC3 /* MockEventDispatcher.swift in Sources */,
38683889
6E75186022C520D400B2B157 /* FeatureVariable.swift in Sources */,
38693890
6E7517E822C520D400B2B157 /* DefaultDecisionService.swift in Sources */,
38703891
6EC6DD3B24ABF6990017D296 /* OptimizelyClient+Decide.swift in Sources */,
@@ -3959,6 +3980,7 @@
39593980
6E75183822C520D400B2B157 /* EventForDispatch.swift in Sources */,
39603981
6E75175222C520D400B2B157 /* LogMessage.swift in Sources */,
39613982
6E9B11DB22C548A200C22D81 /* OptimizelyClientTests_Variables.swift in Sources */,
3983+
6E5D12232638DDF4000ABFC3 /* MockEventDispatcher.swift in Sources */,
39623984
6ECB60C6234D329500016D41 /* OptimizelyClientTests_OptimizelyConfig.swift in Sources */,
39633985
6EA2CC282345618E001E7531 /* OptimizelyConfig.swift in Sources */,
39643986
6E75189822C520D400B2B157 /* Experiment.swift in Sources */,
@@ -4072,6 +4094,7 @@
40724094
6E424C06263228FD0081004A /* AtomicDictionary.swift in Sources */,
40734095
6E75174922C520D400B2B157 /* HandlerRegistryService.swift in Sources */,
40744096
6E7516F522C520D400B2B157 /* OptimizelyError.swift in Sources */,
4097+
6E5D12262638DDF4000ABFC3 /* MockEventDispatcher.swift in Sources */,
40754098
6E75188322C520D400B2B157 /* TrafficAllocation.swift in Sources */,
40764099
6E86CEAB24FDC849005DAFED /* OptimizelyUserContext+ObjC.swift in Sources */,
40774100
6E7517CF22C520D400B2B157 /* DefaultBucketer.swift in Sources */,
@@ -4117,6 +4140,7 @@
41174140
6E75170F22C520D400B2B157 /* OptimizelyClient.swift in Sources */,
41184141
6EC6DD4C24ABF89B0017D296 /* OptimizelyUserContext.swift in Sources */,
41194142
6E7517E922C520D400B2B157 /* DefaultDecisionService.swift in Sources */,
4143+
6E5D12282638DDF4000ABFC3 /* MockEventDispatcher.swift in Sources */,
41204144
6E9B116A22C5487100C22D81 /* BucketTests_Base.swift in Sources */,
41214145
6E9B115F22C5487100C22D81 /* MurmurTests.swift in Sources */,
41224146
6E9B116022C5487100C22D81 /* DecisionServiceTests_Experiments.swift in Sources */,
@@ -4254,6 +4278,7 @@
42544278
6E7516E022C520D400B2B157 /* OPTUserProfileService.swift in Sources */,
42554279
6E34A6212319EBB800BAE302 /* Notifications.swift in Sources */,
42564280
6E9B119D22C5488300C22D81 /* UserAttributeTests.swift in Sources */,
4281+
6E5D12292638DDF4000ABFC3 /* MockEventDispatcher.swift in Sources */,
42574282
6E75183E22C520D400B2B157 /* EventForDispatch.swift in Sources */,
42584283
6E9B11A022C5488300C22D81 /* ExperimentTests.swift in Sources */,
42594284
6E7516EC22C520D400B2B157 /* OPTEventDispatcher.swift in Sources */,
@@ -4338,6 +4363,7 @@
43384363
6E75178122C520D400B2B157 /* ArrayEventForDispatch+Extension.swift in Sources */,
43394364
6EC6DD4524ABF89B0017D296 /* OptimizelyUserContext.swift in Sources */,
43404365
6E7517CB22C520D400B2B157 /* DefaultBucketer.swift in Sources */,
4366+
6E5D12202638DDF4000ABFC3 /* MockEventDispatcher.swift in Sources */,
43414367
6E9B115022C5486E00C22D81 /* BucketTests_Base.swift in Sources */,
43424368
6E9B114522C5486E00C22D81 /* MurmurTests.swift in Sources */,
43434369
6E9B114622C5486E00C22D81 /* DecisionServiceTests_Experiments.swift in Sources */,
@@ -4475,6 +4501,7 @@
44754501
6E7516DB22C520D400B2B157 /* OPTUserProfileService.swift in Sources */,
44764502
6E34A61C2319EBB800BAE302 /* Notifications.swift in Sources */,
44774503
6E9B118722C5488100C22D81 /* UserAttributeTests.swift in Sources */,
4504+
6E5D12242638DDF4000ABFC3 /* MockEventDispatcher.swift in Sources */,
44784505
6E75183922C520D400B2B157 /* EventForDispatch.swift in Sources */,
44794506
6E9B118A22C5488100C22D81 /* ExperimentTests.swift in Sources */,
44804507
6E7516E722C520D400B2B157 /* OPTEventDispatcher.swift in Sources */,
@@ -4556,6 +4583,7 @@
45564583
6E424C05263228FD0081004A /* AtomicDictionary.swift in Sources */,
45574584
6EC6DD4924ABF89B0017D296 /* OptimizelyUserContext.swift in Sources */,
45584585
6E75188222C520D400B2B157 /* TrafficAllocation.swift in Sources */,
4586+
6E5D12252638DDF4000ABFC3 /* MockEventDispatcher.swift in Sources */,
45594587
6ECB60D0234D5D9C00016D41 /* OptimizelyConfig+ObjC.swift in Sources */,
45604588
6E9B11E322C548AF00C22D81 /* ThrowableConditionListTest.swift in Sources */,
45614589
6E75176022C520D400B2B157 /* AtomicProperty.swift in Sources */,
@@ -4641,6 +4669,7 @@
46414669
6E424C0A263228FD0081004A /* AtomicDictionary.swift in Sources */,
46424670
6EC6DD4E24ABF89B0017D296 /* OptimizelyUserContext.swift in Sources */,
46434671
6E75188722C520D400B2B157 /* TrafficAllocation.swift in Sources */,
4672+
6E5D122A2638DDF4000ABFC3 /* MockEventDispatcher.swift in Sources */,
46444673
6ECB60D5234D5D9C00016D41 /* OptimizelyConfig+ObjC.swift in Sources */,
46454674
6E9B11E522C548B100C22D81 /* ThrowableConditionListTest.swift in Sources */,
46464675
6E75176522C520D400B2B157 /* AtomicProperty.swift in Sources */,
@@ -4827,6 +4856,7 @@
48274856
C78CAF5A2445AD8D009FE876 /* OptimizelyJSON.swift in Sources */,
48284857
6E75194A22C520D500B2B157 /* OPTDatafileHandler.swift in Sources */,
48294858
6E86CEA724FDC846005DAFED /* OptimizelyUserContext+ObjC.swift in Sources */,
4859+
6E5D121F2638DDF4000ABFC3 /* MockEventDispatcher.swift in Sources */,
48304860
6E7516CC22C520D400B2B157 /* OPTLogger.swift in Sources */,
48314861
6E75185A22C520D400B2B157 /* FeatureVariable.swift in Sources */,
48324862
6EC6DD3424ABF6990017D296 /* OptimizelyClient+Decide.swift in Sources */,

0 commit comments

Comments
 (0)