Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
touzizhuo03
Dubbo
提交
fda67ee6
D
Dubbo
项目概览
touzizhuo03
/
Dubbo
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Dubbo
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
fda67ee6
编写于
7月 17, 2012
作者:
L
liangfei0201
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
https://github.com/AlibabaTech/dubbo
上级
b863a9bb
b45ca016
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
74 addition
and
66 deletion
+74
-66
dubbo-remoting/dubbo-remoting-api/src/main/java/com/alibaba/dubbo/remoting/exchange/codec/ExchangeCodec.java
.../alibaba/dubbo/remoting/exchange/codec/ExchangeCodec.java
+62
-62
dubbo-rpc/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboCodec.java
...java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboCodec.java
+12
-4
未找到文件。
dubbo-remoting/dubbo-remoting-api/src/main/java/com/alibaba/dubbo/remoting/exchange/codec/ExchangeCodec.java
浏览文件 @
fda67ee6
...
...
@@ -124,69 +124,8 @@ public class ExchangeCodec extends TelnetCodec {
if
(
readable
!=
tt
)
is
=
StreamUtils
.
limitedInputStream
(
is
,
len
);
return
decodeBody
(
channel
,
is
,
header
);
}
protected
Object
decodeBody
(
Channel
channel
,
InputStream
is
,
byte
[]
header
)
throws
IOException
{
try
{
byte
flag
=
header
[
2
],
proto
=
(
byte
)(
flag
&
SERIALIZATION_MASK
);
Serialization
s
=
CodecSupport
.
getSerialization
(
channel
.
getUrl
(),
proto
);
ObjectInput
in
=
s
.
deserialize
(
channel
.
getUrl
(),
is
);
// get request id.
long
id
=
Bytes
.
bytes2long
(
header
,
4
);
if
(
(
flag
&
FLAG_REQUEST
)
==
0
)
{
// decode response.
Response
res
=
new
Response
(
id
);
if
((
flag
&
FLAG_EVENT
)
!=
0
){
res
.
setEvent
(
Response
.
HEARTBEAT_EVENT
);
}
// get status.
byte
status
=
header
[
3
];
res
.
setStatus
(
status
);
if
(
status
==
Response
.
OK
)
{
try
{
Object
data
;
if
(
res
.
isHeartbeat
())
{
data
=
decodeHeartbeatData
(
channel
,
in
);
}
else
if
(
res
.
isEvent
())
{
data
=
decodeEventData
(
channel
,
in
);
}
else
{
data
=
decodeResponseData
(
channel
,
in
,
getRequestData
(
id
));
}
res
.
setResult
(
data
);
}
catch
(
Throwable
t
)
{
res
.
setStatus
(
Response
.
CLIENT_ERROR
);
res
.
setErrorMessage
(
StringUtils
.
toString
(
t
));
}
}
else
{
res
.
setErrorMessage
(
in
.
readUTF
());
}
return
res
;
}
else
{
// decode request.
Request
req
=
new
Request
(
id
);
req
.
setVersion
(
"2.0.0"
);
req
.
setTwoWay
(
(
flag
&
FLAG_TWOWAY
)
!=
0
);
if
((
flag
&
FLAG_EVENT
)
!=
0
){
req
.
setEvent
(
Request
.
HEARTBEAT_EVENT
);
}
try
{
Object
data
;
if
(
req
.
isHeartbeat
())
{
data
=
decodeHeartbeatData
(
channel
,
in
);
}
else
if
(
req
.
isEvent
())
{
data
=
decodeEventData
(
channel
,
in
);
}
else
{
data
=
decodeRequestData
(
channel
,
in
);
}
req
.
setData
(
data
);
}
catch
(
Throwable
t
)
{
// bad request
req
.
setBroken
(
true
);
req
.
setData
(
t
);
}
return
req
;
}
return
decodeBody
(
channel
,
is
,
header
);
}
finally
{
if
(
is
.
available
()
>
0
)
{
try
{
...
...
@@ -201,6 +140,67 @@ public class ExchangeCodec extends TelnetCodec {
}
}
protected
Object
decodeBody
(
Channel
channel
,
InputStream
is
,
byte
[]
header
)
throws
IOException
{
byte
flag
=
header
[
2
],
proto
=
(
byte
)
(
flag
&
SERIALIZATION_MASK
);
Serialization
s
=
CodecSupport
.
getSerialization
(
channel
.
getUrl
(),
proto
);
ObjectInput
in
=
s
.
deserialize
(
channel
.
getUrl
(),
is
);
// get request id.
long
id
=
Bytes
.
bytes2long
(
header
,
4
);
if
((
flag
&
FLAG_REQUEST
)
==
0
)
{
// decode response.
Response
res
=
new
Response
(
id
);
if
((
flag
&
FLAG_EVENT
)
!=
0
)
{
res
.
setEvent
(
Response
.
HEARTBEAT_EVENT
);
}
// get status.
byte
status
=
header
[
3
];
res
.
setStatus
(
status
);
if
(
status
==
Response
.
OK
)
{
try
{
Object
data
;
if
(
res
.
isHeartbeat
())
{
data
=
decodeHeartbeatData
(
channel
,
in
);
}
else
if
(
res
.
isEvent
())
{
data
=
decodeEventData
(
channel
,
in
);
}
else
{
data
=
decodeResponseData
(
channel
,
in
,
getRequestData
(
id
));
}
res
.
setResult
(
data
);
}
catch
(
Throwable
t
)
{
res
.
setStatus
(
Response
.
CLIENT_ERROR
);
res
.
setErrorMessage
(
StringUtils
.
toString
(
t
));
}
}
else
{
res
.
setErrorMessage
(
in
.
readUTF
());
}
return
res
;
}
else
{
// decode request.
Request
req
=
new
Request
(
id
);
req
.
setVersion
(
"2.0.0"
);
req
.
setTwoWay
((
flag
&
FLAG_TWOWAY
)
!=
0
);
if
((
flag
&
FLAG_EVENT
)
!=
0
)
{
req
.
setEvent
(
Request
.
HEARTBEAT_EVENT
);
}
try
{
Object
data
;
if
(
req
.
isHeartbeat
())
{
data
=
decodeHeartbeatData
(
channel
,
in
);
}
else
if
(
req
.
isEvent
())
{
data
=
decodeEventData
(
channel
,
in
);
}
else
{
data
=
decodeRequestData
(
channel
,
in
);
}
req
.
setData
(
data
);
}
catch
(
Throwable
t
)
{
// bad request
req
.
setBroken
(
true
);
req
.
setData
(
t
);
}
return
req
;
}
}
protected
Object
getRequestData
(
long
id
)
{
DefaultFuture
future
=
DefaultFuture
.
getFuture
(
id
);
if
(
future
==
null
)
...
...
dubbo-rpc/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboCodec.java
浏览文件 @
fda67ee6
...
...
@@ -88,12 +88,17 @@ public class DubboCodec extends ExchangeCodec implements Codec {
}
else
if
(
res
.
isEvent
())
{
data
=
decodeEventData
(
channel
,
deserialize
(
s
,
channel
.
getUrl
(),
is
));
}
else
{
DecodeableRpcResult
result
=
new
DecodeableRpcResult
(
channel
,
res
,
new
UnsafeByteArrayInputStream
(
readMessageData
(
is
)),
(
Invocation
)
getRequestData
(
id
),
proto
);
DecodeableRpcResult
result
;
if
(
channel
.
getUrl
().
getParameter
(
Constants
.
DECODE_IN_IO_THREAD_KEY
,
Constants
.
DEFAULT_DECODE_IN_IO_THREAD
))
{
result
=
new
DecodeableRpcResult
(
channel
,
res
,
is
,
(
Invocation
)
getRequestData
(
id
),
proto
);
result
.
decode
();
}
else
{
result
=
new
DecodeableRpcResult
(
channel
,
res
,
new
UnsafeByteArrayInputStream
(
readMessageData
(
is
)),
(
Invocation
)
getRequestData
(
id
),
proto
);
}
data
=
result
;
}
...
...
@@ -124,12 +129,15 @@ public class DubboCodec extends ExchangeCodec implements Codec {
}
else
if
(
req
.
isEvent
())
{
data
=
decodeEventData
(
channel
,
deserialize
(
s
,
channel
.
getUrl
(),
is
));
}
else
{
DecodeableRpcInvocation
inv
=
new
DecodeableRpcInvocation
(
channel
,
req
,
new
UnsafeByteArrayInputStream
(
readMessageData
(
is
)),
proto
);
DecodeableRpcInvocation
inv
;
if
(
channel
.
getUrl
().
getParameter
(
Constants
.
DECODE_IN_IO_THREAD_KEY
,
Constants
.
DEFAULT_DECODE_IN_IO_THREAD
))
{
inv
=
new
DecodeableRpcInvocation
(
channel
,
req
,
is
,
proto
);
inv
.
decode
();
}
else
{
inv
=
new
DecodeableRpcInvocation
(
channel
,
req
,
new
UnsafeByteArrayInputStream
(
readMessageData
(
is
)),
proto
);
}
data
=
inv
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录