nRF Connect: Launcher

Laucher启动的顺序如下:

Entry Point: src/launcher/index.js
    =>React.createElement(RootContainer, { store });
        =>RootContainer.js
            =>Root.jsx
                => <AppManagementContainer />
                    => AppManagementView.jsx <AppManagementView />
                        => AppItem.jsx <AppItem />
                => <SettingsContainer />
                => <AboutView />

1、src/main/index.js: electronApp.on('ready', () => {}}

2、src/main/windows.js: openOfficialAppWindow(appName, sourceName)

2.1 src/main/apps.js:getOfficialAppWindow

2.1.1 src/main/apps.js:getOfficialAppsFromSource

2.1.1.1 src/main/config.js:getAppsJsonPath(读取apps.json文件并解析)

apps.json内如如下:

2.2 src/main/windows.js: openAppWindow

3、src/main/windows.js:openLauncherWindow()

最终显示的界面如下 

4、启动Bluetooth Low Enery(点击Open)的流程

openAppSelected(app)

function mapDispatchToProps(dispatch) {
    return {
        onInstall: (name, source) =>
            dispatch(AppsActions.installOfficialApp(name, source)),
        onRemove: (name, source) =>
            dispatch(AppsActions.removeOfficialApp(name, source)),
        onReadMore: homepage => openUrl(homepage),
        // Launcher actions
        onAppSelected: app => dispatch(AppsActions.checkEngineAndLaunch(app)),
        onCreateShortcut: app =>
            dispatch(DesktopShortcutActions.createShortcut(app)),
        onShowReleaseNotes: appid => dispatch(ReleaseNotes.show(appid)),
        onUpgrade: (name, version, source) =>
            dispatch(AppsActions.upgradeOfficialApp(name, version, source)),
        setAppManagementShow: show =>
            dispatch(AppsActions.setAppManagementShow(show)),
        setAppManagementFilter: filter =>
            dispatch(AppsActions.setAppManagementFilter(filter)),
    };
}

 checkEngineAndLaunch(app) ==> launch(app)

//appsActions.js
export function launch(app) {
    // The apps in state are Immutable Maps which cannot be sent over IPC.
    // Converting to plain JS object before sending to the main process.
    const appObj = app.toJS();
    const sharedData =
        `App version: ${appObj.currentVersion};` +
        ` Engine version: ${appObj.engineVersion};`;
    sendAppUsageData(EventAction.LAUNCH_APP, sharedData, appObj.name);
    ipcRenderer.send('open-app', appObj);
}

通过ipcRender.send('open-app', appObj);发送命令给主进程,让主进程启动相应app

//src/main/index.js
ipcMain.on('open-app-launcher', () => {
    windows.openLauncherWindow();
});

ipcMain.on('open-app', (event, app) => {
    windows.openAppWindow(app);
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值