@@ -41,6 +41,11 @@ internal class DefaultLiveObjects(private val channelName: String, internal val
4141 private val sequentialScope =
4242 CoroutineScope (Dispatchers .Default .limitedParallelism(1 ) + CoroutineName (channelName) + SupervisorJob ())
4343
44+ /* *
45+ * Coroutine scope for handling callbacks asynchronously.
46+ */
47+ private val callbackScope = CoroutineScope (Dispatchers .Default + CoroutineName (" LiveObjectsCallback-$channelName " ))
48+
4449 /* *
4550 * Event bus for handling incoming object messages sequentially.
4651 */
@@ -51,11 +56,20 @@ internal class DefaultLiveObjects(private val channelName: String, internal val
5156 incomingObjectsHandler = initializeHandlerForIncomingObjectMessages()
5257 }
5358
54- /* *
55- * @spec RTO1 - Returns the root LiveMap object with proper validation and sync waiting
56- */
59+ private suspend fun getRootAsync (): LiveMap {
60+ return withContext(sequentialScope.coroutineContext) {
61+ adapter.throwIfInvalidAccessApiConfiguration(channelName)
62+ // TODO - wait for state in synced state
63+ objectsPool.get(ROOT_OBJECT_ID ) as LiveMap
64+ }
65+ }
66+
5767 override fun getRoot (): LiveMap {
58- TODO (" Not yet implemented" )
68+ return runBlocking { getRootAsync() }
69+ }
70+
71+ override fun getRootAsync (callback : Callback <LiveMap >) {
72+ callbackScope.with (callback) { getRootAsync() }
5973 }
6074
6175 override fun createMap (liveMap : LiveMap ): LiveMap {
@@ -70,10 +84,6 @@ internal class DefaultLiveObjects(private val channelName: String, internal val
7084 TODO (" Not yet implemented" )
7185 }
7286
73- override fun getRootAsync (callback : Callback <LiveMap >) {
74- TODO (" Not yet implemented" )
75- }
76-
7787 override fun createMapAsync (liveMap : LiveMap , callback : Callback <LiveMap >) {
7888 TODO (" Not yet implemented" )
7989 }
0 commit comments