Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
2b6b07f8
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,发现更多精彩内容 >>
提交
2b6b07f8
编写于
2月 11, 2016
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Send/Receive bulk messages to extension host process
上级
c0df4038
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
89 addition
and
58 deletion
+89
-58
src/vs/platform/plugins/common/ipcRemoteCom.ts
src/vs/platform/plugins/common/ipcRemoteCom.ts
+87
-56
src/vs/workbench/services/thread/electron-browser/threadService.ts
...rkbench/services/thread/electron-browser/threadService.ts
+2
-2
未找到文件。
src/vs/platform/plugins/common/ipcRemoteCom.ts
浏览文件 @
2b6b07f8
...
...
@@ -54,86 +54,117 @@ function createRPC(serializeAndSend: (obj: any) => void): IRPCFunc {
}
export
interface
IPluginsIPC
extends
remote
.
IRemoteCom
{
handle
(
msg
:
string
):
void
;
handle
(
msg
:
string
[]
):
void
;
}
export
function
create
(
send
:
(
obj
:
string
)
=>
void
):
IPluginsIPC
{
export
function
create
(
send
:
(
obj
:
string
[]
)
=>
void
):
IPluginsIPC
{
let
rpc
=
createRPC
(
marshallAndSend
);
let
bigHandler
:
remote
.
IManyHandler
=
null
;
let
invokedHandlers
:
{
[
req
:
string
]:
winjs
.
TPromise
<
any
>
;
}
=
Object
.
create
(
null
);
let
messagesToSend
:
string
[]
=
[];
let
r
:
IPluginsIPC
=
{
callOnRemote
:
rpc
,
registerBigHandler
:
(
_bigHandler
:
remote
.
IManyHandler
):
void
=>
{
bigHandler
=
_bigHandler
;
},
handle
:
(
rawmsg
)
=>
{
let
msg
=
marshalling
.
parse
(
rawmsg
);
let
messagesToReceive
:
string
[]
=
[];
let
receiveOneMessage
=
()
=>
{
let
rawmsg
=
messagesToReceive
.
shift
();
if
(
msg
.
seq
)
{
if
(
!
pendingRPCReplies
.
hasOwnProperty
(
msg
.
seq
))
{
console
.
warn
(
'
Got reply to unknown seq
'
);
return
;
}
let
reply
=
pendingRPCReplies
[
msg
.
seq
];
delete
pendingRPCReplies
[
msg
.
seq
];
if
(
msg
.
err
)
{
let
err
=
msg
.
err
;
if
(
msg
.
err
.
$isError
)
{
err
=
new
Error
();
err
.
name
=
msg
.
err
.
name
;
err
.
message
=
msg
.
err
.
message
;
err
.
stack
=
msg
.
err
.
stack
;
}
reply
.
e
(
err
);
return
;
}
if
(
messagesToReceive
.
length
>
0
)
{
process
.
nextTick
(
receiveOneMessage
);
}
reply
.
c
(
msg
.
res
);
return
;
}
let
msg
=
marshalling
.
parse
(
rawmsg
);
if
(
msg
.
cancel
)
{
if
(
invokedHandlers
[
msg
.
cancel
])
{
invokedHandlers
[
msg
.
cancel
].
cancel
();
}
if
(
msg
.
seq
)
{
if
(
!
pendingRPCReplies
.
hasOwnProperty
(
msg
.
seq
))
{
console
.
warn
(
'
Got reply to unknown seq
'
);
return
;
}
let
reply
=
pendingRPCReplies
[
msg
.
seq
];
delete
pendingRPCReplies
[
msg
.
seq
];
if
(
msg
.
err
)
{
console
.
error
(
msg
.
err
);
let
err
=
msg
.
err
;
if
(
msg
.
err
.
$isError
)
{
err
=
new
Error
();
err
.
name
=
msg
.
err
.
name
;
err
.
message
=
msg
.
err
.
message
;
err
.
stack
=
msg
.
err
.
stack
;
}
reply
.
e
(
err
);
return
;
}
let
rpcId
=
msg
.
rpcId
;
reply
.
c
(
msg
.
res
);
return
;
}
if
(
!
bigHandler
)
{
throw
new
Error
(
'
got message before big handler attached!
'
);
if
(
msg
.
cancel
)
{
if
(
invokedHandlers
[
msg
.
cancel
])
{
invokedHandlers
[
msg
.
cancel
].
cancel
();
}
return
;
}
if
(
msg
.
err
)
{
console
.
error
(
msg
.
err
);
return
;
}
let
rpcId
=
msg
.
rpcId
;
if
(
!
bigHandler
)
{
throw
new
Error
(
'
got message before big handler attached!
'
);
}
let
req
=
msg
.
req
;
invokedHandlers
[
req
]
=
invokeHandler
(
rpcId
,
msg
.
method
,
msg
.
args
);
invokedHandlers
[
req
].
then
((
r
)
=>
{
delete
invokedHandlers
[
req
];
marshallAndSend
({
seq
:
req
,
res
:
r
});
},
(
err
)
=>
{
delete
invokedHandlers
[
req
];
marshallAndSend
({
seq
:
req
,
err
:
errors
.
transformErrorForSerialization
(
err
)
});
let
req
=
msg
.
req
;
invokedHandlers
[
req
]
=
invokeHandler
(
rpcId
,
msg
.
method
,
msg
.
args
);
invokedHandlers
[
req
].
then
((
r
)
=>
{
delete
invokedHandlers
[
req
];
marshallAndSend
({
seq
:
req
,
res
:
r
});
},
(
err
)
=>
{
delete
invokedHandlers
[
req
];
marshallAndSend
({
seq
:
req
,
err
:
errors
.
transformErrorForSerialization
(
err
)
});
});
};
let
r
:
IPluginsIPC
=
{
callOnRemote
:
rpc
,
registerBigHandler
:
(
_bigHandler
:
remote
.
IManyHandler
):
void
=>
{
bigHandler
=
_bigHandler
;
},
handle
:
(
rawmsg
)
=>
{
// console.log('RECEIVED ' + rawmsg.length + ' MESSAGES.');
if
(
messagesToReceive
.
length
===
0
)
{
process
.
nextTick
(
receiveOneMessage
);
}
messagesToReceive
=
messagesToReceive
.
concat
(
rawmsg
);
}
};
function
sendAccumulated
():
void
{
let
tmp
=
messagesToSend
;
messagesToSend
=
[];
// console.log('SENDING ' + tmp.length + ' MESSAGES.');
send
(
tmp
);
}
function
marshallAndSend
(
msg
:
any
):
void
{
send
(
marshalling
.
stringify
(
msg
));
let
value
=
marshalling
.
stringify
(
msg
);
if
(
messagesToSend
.
length
===
0
)
{
process
.
nextTick
(
sendAccumulated
);
}
messagesToSend
.
push
(
value
);
}
function
invokeHandler
(
rpcId
:
string
,
method
:
string
,
args
:
any
[]):
winjs
.
TPromise
<
any
>
{
...
...
src/vs/workbench/services/thread/electron-browser/threadService.ts
浏览文件 @
2b6b07f8
...
...
@@ -53,7 +53,7 @@ export class MainThreadService extends CommonMainThreadService {
// Message: Window --> Plugin Host
this
.
remoteCom
=
pluginsIPC
.
create
((
msg
)
=>
{
if
(
logCommunication
)
{
console
.
log
(
'
%c[Window
\
u2192 Plugin]%c[len:
'
+
strings
.
pad
(
msg
.
length
,
5
,
'
'
)
+
'
]
'
,
'
color: darkgreen
'
,
'
color: grey
'
,
JSON
.
parse
(
msg
)
);
console
.
log
(
'
%c[Window
\
u2192 Plugin]%c[len:
'
+
strings
.
pad
(
msg
.
length
,
5
,
'
'
)
+
'
]
'
,
'
color: darkgreen
'
,
'
color: grey
'
,
msg
);
}
this
.
pluginHostProcessManager
.
postMessage
(
msg
);
...
...
@@ -62,7 +62,7 @@ export class MainThreadService extends CommonMainThreadService {
// Message: Plugin Host --> Window
this
.
pluginHostProcessManager
.
startPluginHostProcess
((
msg
)
=>
{
if
(
logCommunication
)
{
console
.
log
(
'
%c[Plugin
\
u2192 Window]%c[len:
'
+
strings
.
pad
(
msg
.
length
,
5
,
'
'
)
+
'
]
'
,
'
color: darkgreen
'
,
'
color: grey
'
,
JSON
.
parse
(
msg
)
);
console
.
log
(
'
%c[Plugin
\
u2192 Window]%c[len:
'
+
strings
.
pad
(
msg
.
length
,
5
,
'
'
)
+
'
]
'
,
'
color: darkgreen
'
,
'
color: grey
'
,
msg
);
}
this
.
remoteCom
.
handle
(
msg
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录