Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
edf7a551
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
edf7a551
编写于
2月 09, 2020
作者:
B
Benjamin Pasero
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
clarify ipc messages
上级
3543a22f
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
20 addition
and
15 deletion
+20
-15
src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts
.../code/electron-browser/sharedProcess/sharedProcessMain.ts
+10
-9
src/vs/code/electron-main/sharedProcess.ts
src/vs/code/electron-main/sharedProcess.ts
+10
-6
未找到文件。
src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts
浏览文件 @
edf7a551
...
...
@@ -103,7 +103,7 @@ async function main(server: Server, initData: ISharedProcessInitData, configurat
const
onExit
=
()
=>
disposables
.
dispose
();
process
.
once
(
'
exit
'
,
onExit
);
ipcRenderer
.
once
(
'
handshake:mainprocess-goodbye
'
,
onExit
);
ipcRenderer
.
once
(
'
electron-main->shared-process: exit
'
,
onExit
);
disposables
.
add
(
server
);
...
...
@@ -280,18 +280,19 @@ function setupIPC(hook: string): Promise<Server> {
async
function
handshake
(
configuration
:
ISharedProcessConfiguration
):
Promise
<
void
>
{
// shared process -> main: give me payload for IPC connection
// main -> shared process: payload for IPC connection
// receive payload from electron-main to start things
const
data
=
await
new
Promise
<
ISharedProcessInitData
>
(
c
=>
{
ipcRenderer
.
once
(
'
handshake:main-payload
'
,
(
_
:
any
,
r
:
ISharedProcessInitData
)
=>
c
(
r
));
ipcRenderer
.
send
(
'
handshake:sharedprocess-hello
'
);
ipcRenderer
.
once
(
'
electron-main->shared-process: payload
'
,
(
_
:
any
,
r
:
ISharedProcessInitData
)
=>
c
(
r
));
// tell electron-main we are ready to receive payload
ipcRenderer
.
send
(
'
shared-process->electron-main: ready-for-payload
'
);
});
//
shared process => main: IPC connection established
//
await IPC connection and signal this back to electron-main
const
server
=
await
setupIPC
(
data
.
sharedIPCHandle
);
ipcRenderer
.
send
(
'
handshake:sharedprocess-
ipc-ready
'
);
ipcRenderer
.
send
(
'
shared-process->electron-main:
ipc-ready
'
);
//
shared process => main: initialization done
//
await initialization and signal this back to electron-main
await
main
(
server
,
data
,
configuration
);
ipcRenderer
.
send
(
'
handshake:sharedprocess-init-ready
'
);
ipcRenderer
.
send
(
'
shared-process->electron-main: init-done
'
);
}
src/vs/code/electron-main/sharedProcess.ts
浏览文件 @
edf7a551
...
...
@@ -31,7 +31,8 @@ export class SharedProcess implements ISharedProcess {
@
ILogService
private
readonly
logService
:
ILogService
,
@
IThemeMainService
private
readonly
themeMainService
:
IThemeMainService
)
{
this
.
_whenReady
=
new
Promise
<
void
>
(
c
=>
ipcMain
.
once
(
'
handshake:sharedprocess-init-ready
'
,
()
=>
c
(
undefined
)));
// overall ready promise when shared process signals initialization is done
this
.
_whenReady
=
new
Promise
<
void
>
(
c
=>
ipcMain
.
once
(
'
shared-process->electron-main: init-done
'
,
()
=>
c
(
undefined
)));
}
@
memoize
...
...
@@ -102,16 +103,19 @@ export class SharedProcess implements ISharedProcess {
});
return
new
Promise
<
void
>
(
c
=>
{
const
onHello
=
Event
.
once
(
Event
.
fromNodeEventEmitter
(
ipcMain
,
'
handshake:sharedprocess-hello
'
,
({
sender
}:
{
sender
:
WebContents
})
=>
sender
));
disposables
.
add
(
onHello
(
sender
=>
{
sender
.
send
(
'
handshake:main-
payload
'
,
{
// send payload once shared process is ready to receive it
disposables
.
add
(
Event
.
once
(
Event
.
fromNodeEventEmitter
(
ipcMain
,
'
shared-process->electron-main: ready-for-payload
'
,
({
sender
}:
{
sender
:
WebContents
})
=>
sender
))
(
sender
=>
{
sender
.
send
(
'
electron-main->shared-process:
payload
'
,
{
sharedIPCHandle
:
this
.
environmentService
.
sharedIPCHandle
,
args
:
this
.
environmentService
.
args
,
logLevel
:
this
.
logService
.
getLevel
()
});
disposables
.
add
(
toDisposable
(()
=>
sender
.
send
(
'
handshake:mainprocess-goodbye
'
)));
ipcMain
.
once
(
'
handshake:sharedprocess-ipc-ready
'
,
()
=>
c
(
undefined
));
// signal exit to shared process when we get disposed
disposables
.
add
(
toDisposable
(()
=>
sender
.
send
(
'
electron-main->shared-process: exit
'
)));
// complete IPC-ready promise when shared process signals this to us
ipcMain
.
once
(
'
shared-process->electron-main: ipc-ready
'
,
()
=>
c
(
undefined
));
}));
});
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录