override fun extensionCreated()

in src/rider/main/kotlin/com/jetbrains/rider/plugins/unreal/UnrealHost.kt [64:123]


        override fun extensionCreated(lifetime: Lifetime, session: ClientProjectSession, model: RdRiderModel) {
            model.allowSetForegroundWindow.set { _, id ->
                if (SystemInfo.isWindows) {
                    return@set if (!user32!!.AllowSetForegroundWindow(id)) {
                        val lastError = kernel32!!.GetLastError()
                        RdTask.faulted(LastErrorException(lastError))
                    } else {
                        RdTask.fromResult(true)
                    }
                }
                RdTask.fromResult(true)
            }

            val project = session.project
            model.isUnrealEngineSolution.change.advise(lifetime) { isUnrealEngineSolution ->
                val host = project.service<UnrealHost>()
                host.isUnrealEngineSolution = isUnrealEngineSolution
            }
            model.isPreBuiltEngine.change.advise(lifetime) { isPreBuiltEngine ->
                val host = project.service<UnrealHost>()
                host.isPreBuiltEngine = isPreBuiltEngine
            }

            model.isConnectedToUnrealEditor.change.advise(lifetime) { connected ->
                if (!connected) {
                    project.service<UnrealHost>().playStateModel.set(PlayState.Idle)
                }
                forceTriggerUIUpdate()
            }

            model.riderLinkInstallPanelInit.advise(lifetime) {
                val riderLinkInstallContext =
                    RiderLinkInstallService.getInstance(project).getOrCreateRiderLinkInstallContext()
                riderLinkInstallContext.clear()
                riderLinkInstallContext.showToolWindowIfHidden()
            }

            model.riderLinkInstallMessage.advise(lifetime) { message ->
                RiderLinkInstallService.getInstance(project).getOrCreateRiderLinkInstallContext().writeMessage(message)
            }

//  Update state of Unreal actions on toolbar
            model.playStateFromEditor.adviseNotNull(lifetime) { newState ->
                project.service<UnrealHost>().playStateModel.set(newState)
            }

            model.playModeFromEditor.adviseNotNull(lifetime) { mode ->
                project.service<UnrealHost>().playMode = mode
                forceTriggerUIUpdate()
            }

            model.isGameControlModuleInitialized.adviseNotNull(lifetime) {
                forceTriggerUIUpdate()
            }

            model.isConnectedToUnrealEditor.whenTrue(lifetime) {
                val toolWindowsFactory = UnrealToolWindowFactory.getInstance(project)
                toolWindowsFactory.showTabForNewSession()
            }
        }