Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
guo450212436
et
提交
cad891d5
E
et
项目概览
guo450212436
/
et
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
et
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
cad891d5
编写于
3月 12, 2018
作者:
T
tanghai
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
整理代码
上级
7a7d58b6
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
56 addition
and
81 deletion
+56
-81
Server/Hotfix/Module/Actor/EntityActorHandler.cs
Server/Hotfix/Module/Actor/EntityActorHandler.cs
+9
-6
Server/Hotfix/Module/Message/OuterMessageDispatcher.cs
Server/Hotfix/Module/Message/OuterMessageDispatcher.cs
+33
-39
Server/Model/Module/Actor/ActorMessageDispatherComponent.cs
Server/Model/Module/Actor/ActorMessageDispatherComponent.cs
+1
-1
Server/Model/Module/Actor/ActorProxy.cs
Server/Model/Module/Actor/ActorProxy.cs
+11
-24
Server/Model/Module/Actor/ActorTask.cs
Server/Model/Module/Actor/ActorTask.cs
+1
-1
Unity/Assets/Scripts/Module/Message/MessageDispatherComponent.cs
...ssets/Scripts/Module/Message/MessageDispatherComponent.cs
+0
-1
Unity/Assets/Scripts/Module/Message/Session.cs
Unity/Assets/Scripts/Module/Message/Session.cs
+1
-1
Unity/Hotfix/Module/Message/SessionWrap.cs
Unity/Hotfix/Module/Message/SessionWrap.cs
+0
-8
未找到文件。
Server/Hotfix/Module/Actor/EntityActorHandler.cs
浏览文件 @
cad891d5
...
...
@@ -12,6 +12,8 @@ namespace ETHotfix
public
async
Task
Handle
(
Session
session
,
Entity
entity
,
ActorRequest
actorRequest
)
{
ActorResponse
actorResponse
=
new
ActorResponse
();
actorResponse
.
RpcId
=
actorRequest
.
RpcId
;
try
{
OpcodeTypeComponent
opcodeTypeComponent
=
session
.
Network
.
Entity
.
GetComponent
<
OpcodeTypeComponent
>();
...
...
@@ -21,8 +23,7 @@ namespace ETHotfix
// 发送给客户端
Session
clientSession
=
entity
as
Session
;
clientSession
.
Send
(
actorResponse
.
Flag
,
message
);
actorResponse
.
RpcId
=
actorRequest
.
RpcId
;
session
.
Reply
(
actorResponse
);
await
Task
.
CompletedTask
;
}
...
...
@@ -30,7 +31,6 @@ namespace ETHotfix
{
actorResponse
.
Error
=
ErrorCode
.
ERR_SessionActorError
;
actorResponse
.
Message
=
$"session actor error
{
e
}
"
;
actorResponse
.
RpcId
=
actorRequest
.
RpcId
;
session
.
Reply
(
actorResponse
);
throw
;
}
...
...
@@ -44,6 +44,7 @@ namespace ETHotfix
OpcodeTypeComponent
opcodeTypeComponent
=
session
.
Network
.
Entity
.
GetComponent
<
OpcodeTypeComponent
>();
Type
type
=
opcodeTypeComponent
.
GetType
(
actorRequest
.
Op
);
IMessage
message
=
(
IMessage
)
session
.
Network
.
MessagePacker
.
DeserializeFrom
(
type
,
actorRequest
.
AMessage
);
await
Game
.
Scene
.
GetComponent
<
ActorMessageDispatherComponent
>().
Handle
(
session
,
entity
,
actorRequest
,
message
);
}
}
...
...
@@ -63,9 +64,11 @@ namespace ETHotfix
{
Game
.
Scene
.
GetComponent
<
ServerFrameComponent
>().
Add
(
aFrameMessage
);
ActorResponse
actorResponse
=
new
ActorResponse
();
actorResponse
.
RpcId
=
actorRequest
.
RpcId
;
session
.
Reply
(
actorResponse
);
ActorResponse
actorResponse
=
new
ActorResponse
{
RpcId
=
actorRequest
.
RpcId
};
session
.
Reply
(
actorResponse
);
return
;
}
await
Game
.
Scene
.
GetComponent
<
ActorMessageDispatherComponent
>().
Handle
(
session
,
entity
,
actorRequest
,
message
);
...
...
Server/Hotfix/Module/Message/OuterMessageDispatcher.cs
浏览文件 @
cad891d5
...
...
@@ -8,43 +8,42 @@ namespace ETHotfix
public
async
void
Dispatch
(
Session
session
,
Packet
packet
)
{
ushort
opcode
=
packet
.
Opcode
();
Type
messageType
=
Game
.
Scene
.
GetComponent
<
OpcodeTypeComponent
>().
GetType
(
opcode
);
Type
messageType
=
session
.
Network
.
Entity
.
GetComponent
<
OpcodeTypeComponent
>().
GetType
(
opcode
);
object
message
=
session
.
Network
.
MessagePacker
.
DeserializeFrom
(
messageType
,
packet
.
Bytes
,
Packet
.
Index
,
packet
.
Length
-
Packet
.
Index
);
// 如果是帧指令消息,构造成OneFrameMessage发给对应的unit
if
(
message
is
IFrameMessage
)
switch
(
message
)
{
long
unitId
=
session
.
GetComponent
<
SessionPlayerComponent
>().
Player
.
UnitId
;
ActorProxy
actorProxy
=
Game
.
Scene
.
GetComponent
<
ActorProxyComponent
>().
Get
(
unitId
);
// 这里设置了帧消息的id,防止客户端伪造
IFrameMessage
iFrameMessage
=
(
IFrameMessage
)
message
;
iFrameMessage
.
Id
=
unitId
;
OneFrameMessage
oneFrameMessage
=
new
OneFrameMessage
();
oneFrameMessage
.
Op
=
opcode
;
oneFrameMessage
.
AMessage
=
session
.
Network
.
MessagePacker
.
SerializeToByteArray
(
iFrameMessage
);
actorProxy
.
Send
(
oneFrameMessage
);
return
;
}
// gate session收到actor消息直接转发给actor自己去处理
if
(
message
is
IActorMessage
)
{
long
unitId
=
session
.
GetComponent
<
SessionPlayerComponent
>().
Player
.
UnitId
;
ActorProxy
actorProxy
=
Game
.
Scene
.
GetComponent
<
ActorProxyComponent
>().
Get
(
unitId
)
;
actorProxy
.
Send
((
IMessage
)
message
);
return
;
}
// gate session收到actor rpc消息,先向actor 发送rpc请求,再将请求结果返回客户端
if
(
message
is
IActorRequest
aActorRequest
)
{
long
unitId
=
session
.
GetComponent
<
SessionPlayerComponent
>().
Player
.
UnitId
;
ActorProxy
actorProxy
=
Game
.
Scene
.
GetComponent
<
ActorProxyComponent
>().
Get
(
unitId
);
IResponse
response
=
await
actorProxy
.
Call
(
aActorRequest
);
session
.
Reply
(
response
)
;
return
;
case
IFrameMessage
iFrameMessage
:
// 如果是帧消息,构造成OneFrameMessage发给对应的unit
{
long
unitId
=
session
.
GetComponent
<
SessionPlayerComponent
>().
Player
.
UnitId
;
ActorProxy
actorProxy
=
Game
.
Scene
.
GetComponent
<
ActorProxyComponent
>().
Get
(
unitId
);
// 这里设置了帧消息的id,防止客户端伪造
iFrameMessage
.
Id
=
unitId
;
OneFrameMessage
oneFrameMessage
=
new
OneFrameMessage
{
Op
=
opcode
,
AMessage
=
session
.
Network
.
MessagePacker
.
SerializeToByteArray
(
iFrameMessage
)
};
actorProxy
.
Send
(
oneFrameMessage
);
return
;
}
case
IActorMessage
_
:
// gate session收到actor消息直接转发给actor自己去处理
{
long
unitId
=
session
.
GetComponent
<
SessionPlayerComponent
>().
Player
.
UnitId
;
ActorProxy
actorProxy
=
Game
.
Scene
.
GetComponent
<
ActorProxyComponent
>().
Get
(
unitId
);
actorProxy
.
Send
((
IMessage
)
message
)
;
return
;
}
case
IActorRequest
aActorRequest
:
// gate session收到actor rpc消息,先向actor 发送rpc请求,再将请求结果返回客户端
{
long
unitId
=
session
.
GetComponent
<
SessionPlayerComponent
>().
Player
.
UnitId
;
ActorProxy
actorProxy
=
Game
.
Scene
.
GetComponent
<
ActorProxyComponent
>().
Get
(
unitId
)
;
IResponse
response
=
await
actorProxy
.
Call
(
aActorRequest
);
session
.
Reply
(
response
);
return
;
}
}
if
(
message
!=
null
)
...
...
@@ -55,10 +54,5 @@ namespace ETHotfix
throw
new
Exception
(
$"message type error:
{
message
.
GetType
().
FullName
}
"
);
}
public
void
Dispatch
(
Session
session
,
ushort
opcode
,
object
message
)
{
throw
new
NotImplementedException
();
}
}
}
Server/Model/Module/Actor/ActorMessageDispatherComponent.cs
浏览文件 @
cad891d5
...
...
@@ -75,7 +75,7 @@ namespace ETModel
return
actorHandler
;
}
public
async
Task
Handle
(
Session
session
,
Entity
entity
,
ActorRequest
actorRequest
,
object
message
)
public
async
Task
Handle
(
Session
session
,
Entity
entity
,
ActorRequest
actorRequest
,
IMessage
message
)
{
if
(!
this
.
handlers
.
TryGetValue
(
message
.
GetType
(),
out
IMActorHandler
handler
))
{
...
...
Server/Model/Module/Actor/ActorProxy.cs
浏览文件 @
cad891d5
...
...
@@ -208,39 +208,26 @@ namespace ETModel
public
void
Send
(
IMessage
message
)
{
ActorTask
task
=
new
ActorTask
();
task
.
message
=
message
;
task
.
proxy
=
this
;
ActorTask
task
=
new
ActorTask
{
message
=
message
,
proxy
=
this
};
this
.
Add
(
task
);
}
public
Task
<
IResponse
>
Call
(
IRequest
request
)
{
ActorTask
task
=
new
ActorTask
();
task
.
message
=
request
;
task
.
proxy
=
this
;
task
.
Tcs
=
new
TaskCompletionSource
<
IResponse
>();
ActorTask
task
=
new
ActorTask
{
message
=
request
,
proxy
=
this
,
Tcs
=
new
TaskCompletionSource
<
IResponse
>()
};
this
.
Add
(
task
);
return
task
.
Tcs
.
Task
;
}
public
async
Task
<
IResponse
>
RealCall
(
ActorRequest
request
,
CancellationToken
cancellationToken
)
{
try
{
//Log.Debug($"realcall {MongoHelper.ToJson(request)} {this.Address}");
request
.
Id
=
this
.
Id
;
Session
session
=
Game
.
Scene
.
GetComponent
<
NetInnerComponent
>().
Get
(
this
.
Address
);
IResponse
response
=
await
session
.
Call
(
request
,
cancellationToken
);
return
response
;
}
catch
(
RpcException
e
)
{
Log
.
Error
(
$"
{
this
.
Address
}
{
e
}
"
);
throw
;
}
}
public
string
DebugQueue
(
Queue
<
ActorTask
>
tasks
)
{
string
s
=
""
;
...
...
Server/Model/Module/Actor/ActorTask.cs
浏览文件 @
cad891d5
...
...
@@ -7,7 +7,7 @@ namespace ETModel
{
public
ActorProxy
proxy
;
public
object
message
;
public
IMessage
message
;
public
TaskCompletionSource
<
IResponse
>
Tcs
;
...
...
Unity/Assets/Scripts/Module/Message/MessageDispatherComponent.cs
浏览文件 @
cad891d5
...
...
@@ -28,7 +28,6 @@ namespace ETModel
{
private
readonly
Dictionary
<
ushort
,
List
<
IMHandler
>>
handlers
=
new
Dictionary
<
ushort
,
List
<
IMHandler
>>();
public
void
Awake
()
{
this
.
Load
();
...
...
Unity/Assets/Scripts/Module/Message/Session.cs
浏览文件 @
cad891d5
...
...
@@ -240,7 +240,7 @@ namespace ETModel
this
.
Send
(
0x01
,
message
);
}
public
void
Send
(
byte
flag
,
object
message
)
public
void
Send
(
byte
flag
,
IMessage
message
)
{
OpcodeTypeComponent
opcodeTypeComponent
=
this
.
Network
.
Entity
.
GetComponent
<
OpcodeTypeComponent
>();
ushort
opcode
=
opcodeTypeComponent
.
GetOpcode
(
message
.
GetType
());
...
...
Unity/Hotfix/Module/Message/SessionWrap.cs
浏览文件 @
cad891d5
...
...
@@ -78,10 +78,6 @@ namespace ETHotfix
{
try
{
if
(
response
.
RpcId
!=
rpcId
)
{
return
;
}
if
(
response
.
Error
>
ErrorCode
.
ERR_Exception
)
{
throw
new
RpcException
(
response
.
Error
,
response
.
Message
);
...
...
@@ -110,10 +106,6 @@ namespace ETHotfix
{
try
{
if
(
response
.
RpcId
!=
rpcId
)
{
return
;
}
if
(
response
.
Error
>
ErrorCode
.
ERR_Exception
)
{
throw
new
RpcException
(
response
.
Error
,
response
.
Message
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录