Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
ec2a8e5b
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 搜索 >>
提交
ec2a8e5b
编写于
1月 15, 2021
作者:
B
Benjamin Pasero
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
shared process - rely on "close" event for disconnects
上级
9e1863ec
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
12 addition
and
17 deletion
+12
-17
src/vs/base/parts/ipc/common/ipc.mp.ts
src/vs/base/parts/ipc/common/ipc.mp.ts
+5
-16
src/vs/base/parts/ipc/electron-sandbox/ipc.mp.ts
src/vs/base/parts/ipc/electron-sandbox/ipc.mp.ts
+7
-1
未找到文件。
src/vs/base/parts/ipc/common/ipc.mp.ts
浏览文件 @
ec2a8e5b
...
...
@@ -17,13 +17,10 @@ import { VSBuffer } from 'vs/base/common/buffer';
export
interface
MessageEvent
{
/**
* For our use we only consider `Uint8Array` and `disconnect`
* a valid data transfer via message ports. Our protocol
* implementation is buffer based and we only need the explicit
* `disconnect` because message ports currently have no way of
* indicating when their connection is closed.
* For our use we only consider `Uint8Array` a valid data transfer
* via message ports because our protocol implementation is buffer based.
*/
data
:
Uint8Array
|
'
disconnect
'
;
data
:
Uint8Array
;
}
export
interface
MessagePort
{
...
...
@@ -31,7 +28,7 @@ export interface MessagePort {
addEventListener
(
type
:
'
message
'
,
listener
:
(
this
:
MessagePort
,
e
:
MessageEvent
)
=>
unknown
):
void
;
removeEventListener
(
type
:
'
message
'
,
listener
:
(
this
:
MessagePort
,
e
:
MessageEvent
)
=>
unknown
):
void
;
postMessage
(
message
:
Uint8Array
|
'
disconnect
'
):
void
;
postMessage
(
message
:
Uint8Array
):
void
;
start
():
void
;
close
():
void
;
...
...
@@ -44,19 +41,12 @@ export interface MessagePort {
*/
export
class
Protocol
implements
IMessagePassingProtocol
{
private
readonly
onRawData
=
Event
.
fromDOMEventEmitter
<
VSBuffer
|
'
disconnect
'
>
(
this
.
port
,
'
message
'
,
(
e
:
MessageEvent
)
=>
e
.
data
===
'
disconnect
'
?
e
.
data
:
VSBuffer
.
wrap
(
e
.
data
));
readonly
onMessage
=
Event
.
filter
(
this
.
onRawData
,
data
=>
data
!==
'
disconnect
'
)
as
Event
<
VSBuffer
>
;
readonly
onDisconnect
=
Event
.
signal
(
Event
.
filter
(
this
.
onRawData
,
data
=>
data
===
'
disconnect
'
));
readonly
onMessage
=
Event
.
fromDOMEventEmitter
<
VSBuffer
>
(
this
.
port
,
'
message
'
,
(
e
:
MessageEvent
)
=>
VSBuffer
.
wrap
(
e
.
data
));
constructor
(
private
port
:
MessagePort
)
{
// we must call start() to ensure messages are flowing
port
.
start
();
// when the other end disconnects, ensure that we close
// our end as well to stay in sync
Event
.
once
(
this
.
onDisconnect
)(()
=>
port
.
close
());
}
send
(
message
:
VSBuffer
):
void
{
...
...
@@ -64,7 +54,6 @@ export class Protocol implements IMessagePassingProtocol {
}
disconnect
():
void
{
this
.
port
.
postMessage
(
'
disconnect
'
);
this
.
port
.
close
();
}
}
...
...
src/vs/base/parts/ipc/electron-sandbox/ipc.mp.ts
浏览文件 @
ec2a8e5b
...
...
@@ -30,7 +30,13 @@ export class Server extends IPCServer {
const
{
port1
:
incomingPort
,
port2
:
outgoingPort
}
=
new
MessageChannel
();
const
protocol
=
new
MessagePortProtocol
(
incomingPort
);
const
result
:
ClientConnectionEvent
=
{
protocol
,
onDidClientDisconnect
:
protocol
.
onDisconnect
};
const
result
:
ClientConnectionEvent
=
{
protocol
,
// Not part of the standard spec, but in Electron we get a `close` event
// when the other side closes. We can use this to detect disconnects
// (https://github.com/electron/electron/blob/11-x-y/docs/api/message-port-main.md#event-close)
onDidClientDisconnect
:
Event
.
fromDOMEventEmitter
(
incomingPort
,
'
close
'
)
};
// Send one port back to the requestor
ipcRenderer
.
postMessage
(
'
vscode:createMessageChannelResult
'
,
nonce
,
[
outgoingPort
]);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录