Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
674c9d6a
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,发现更多精彩内容 >>
提交
674c9d6a
编写于
9月 17, 2018
作者:
J
Joao Moreno
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ipc: fix electron ipc disconnect event
上级
cc0b4278
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
23 addition
and
7 deletion
+23
-7
src/vs/base/common/event.ts
src/vs/base/common/event.ts
+4
-0
src/vs/base/parts/ipc/electron-browser/ipc.electron-browser.ts
...s/base/parts/ipc/electron-browser/ipc.electron-browser.ts
+11
-2
src/vs/base/parts/ipc/electron-main/ipc.electron-main.ts
src/vs/base/parts/ipc/electron-main/ipc.electron-main.ts
+5
-5
src/vs/base/parts/ipc/node/ipc.electron.ts
src/vs/base/parts/ipc/node/ipc.electron.ts
+1
-0
src/vs/workbench/electron-browser/shell.ts
src/vs/workbench/electron-browser/shell.ts
+2
-0
未找到文件。
src/vs/base/common/event.ts
浏览文件 @
674c9d6a
...
...
@@ -443,6 +443,10 @@ export function filterEvent<T>(event: Event<T>, filter: (e: T) => boolean): Even
return
(
listener
,
thisArgs
=
null
,
disposables
?)
=>
event
(
e
=>
filter
(
e
)
&&
listener
.
call
(
thisArgs
,
e
),
null
,
disposables
);
}
export
function
signalEvent
<
T
>
(
event
:
Event
<
T
>
):
Event
<
void
>
{
return
event
as
Event
<
any
>
as
Event
<
void
>
;
}
class
ChainableEvent
<
T
>
implements
IChainableEvent
<
T
>
{
get
event
():
Event
<
T
>
{
return
this
.
_event
;
}
...
...
src/vs/base/parts/ipc/electron-browser/ipc.electron-browser.ts
浏览文件 @
674c9d6a
...
...
@@ -7,8 +7,11 @@ import { fromNodeEventEmitter } from 'vs/base/common/event';
import
{
IPCClient
}
from
'
vs/base/parts/ipc/node/ipc
'
;
import
{
Protocol
}
from
'
vs/base/parts/ipc/node/ipc.electron
'
;
import
{
ipcRenderer
}
from
'
electron
'
;
import
{
IDisposable
}
from
'
vs/base/common/lifecycle
'
;
export
class
Client
extends
IPCClient
{
export
class
Client
extends
IPCClient
implements
IDisposable
{
private
protocol
:
Protocol
;
private
static
createProtocol
():
Protocol
{
const
onMessage
=
fromNodeEventEmitter
<
string
>
(
ipcRenderer
,
'
ipc:message
'
,
(
_
,
message
:
string
)
=>
message
);
...
...
@@ -17,6 +20,12 @@ export class Client extends IPCClient {
}
constructor
(
id
:
string
)
{
super
(
Client
.
createProtocol
(),
id
);
const
protocol
=
Client
.
createProtocol
();
super
(
protocol
,
id
);
this
.
protocol
=
protocol
;
}
dispose
():
void
{
this
.
protocol
.
dispose
();
}
}
\ No newline at end of file
src/vs/base/parts/ipc/electron-main/ipc.electron-main.ts
浏览文件 @
674c9d6a
...
...
@@ -3,7 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import
{
Event
,
filterEvent
,
mapEvent
,
fromNodeEventEmitter
}
from
'
vs/base/common/event
'
;
import
{
Event
,
filterEvent
,
mapEvent
,
fromNodeEventEmitter
,
signalEvent
}
from
'
vs/base/common/event
'
;
import
{
IPCServer
,
ClientConnectionEvent
}
from
'
vs/base/parts/ipc/node/ipc
'
;
import
{
Protocol
}
from
'
vs/base/parts/ipc/node/ipc.electron
'
;
import
{
ipcMain
}
from
'
electron
'
;
...
...
@@ -17,8 +17,8 @@ interface IIPCEvent {
message
:
string
;
}
function
createScopedOnMessageEvent
(
senderId
:
number
):
Event
<
string
>
{
const
onMessage
=
fromNodeEventEmitter
<
IIPCEvent
>
(
ipcMain
,
'
ipc:message
'
,
(
event
,
message
:
string
)
=>
({
event
,
message
}));
function
createScopedOnMessageEvent
(
senderId
:
number
,
eventName
:
string
):
Event
<
string
>
{
const
onMessage
=
fromNodeEventEmitter
<
IIPCEvent
>
(
ipcMain
,
eventName
,
(
event
,
message
:
string
)
=>
({
event
,
message
}));
const
onMessageFromSender
=
filterEvent
(
onMessage
,
({
event
})
=>
event
.
sender
.
getId
()
===
senderId
);
return
mapEvent
(
onMessageFromSender
,
({
message
})
=>
message
);
}
...
...
@@ -29,9 +29,9 @@ export class Server extends IPCServer {
const
onHello
=
fromNodeEventEmitter
<
WebContents
>
(
ipcMain
,
'
ipc:hello
'
,
({
sender
})
=>
sender
);
return
mapEvent
(
onHello
,
webContents
=>
{
const
onMessage
=
createScopedOnMessageEvent
(
webContents
.
getId
());
const
onMessage
=
createScopedOnMessageEvent
(
webContents
.
getId
(),
'
ipc:message
'
);
const
onDidClientDisconnect
=
signalEvent
(
createScopedOnMessageEvent
(
webContents
.
getId
(),
'
ipc:disconnect
'
));
const
protocol
=
new
Protocol
(
webContents
,
onMessage
);
const
onDidClientDisconnect
=
fromNodeEventEmitter
<
void
>
(
webContents
,
'
destroyed
'
);
return
{
protocol
,
onDidClientDisconnect
};
});
...
...
src/vs/base/parts/ipc/node/ipc.electron.ts
浏览文件 @
674c9d6a
...
...
@@ -36,6 +36,7 @@ export class Protocol implements IMessagePassingProtocol {
}
dispose
():
void
{
this
.
sender
.
send
(
'
ipc:disconnect
'
,
null
);
this
.
listener
=
dispose
(
this
.
listener
);
}
}
\ No newline at end of file
src/vs/workbench/electron-browser/shell.ts
浏览文件 @
674c9d6a
...
...
@@ -523,6 +523,8 @@ export class WorkbenchShell extends Disposable {
if
(
this
.
workbench
)
{
this
.
workbench
.
dispose
(
reason
);
}
this
.
mainProcessClient
.
dispose
();
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录