一 简述
Tcp消息的处理本身是与Tcp消息传输过程独立的,是消息的两个不同阶段,从前面的会话生命周期我们已经知道消息的传输主要有SocketSession实现,而真正处理则交由AppSession实现,SuperSocket的层次划分也是非常清晰明了。
SuperSocket消息处理主要流程:接收=》原始过滤=》协议解析=》命令路由并执行=》找不到命令则直接一分不动发给客户端
二 消息接收
1 开始接收
代码位置:AsyncSocketSession=》StartReceive
1 private voidStartReceive(SocketAsyncEventArgs e)2 {3 StartReceive(e, 0);4 }5
6 private void StartReceive(SocketAsyncEventArgs e, intoffsetDelta)7 {8 bool willRaiseEvent = false;9
10 try
11 {12 if (offsetDelta < 0 || offsetDelta >=Config.ReceiveBufferSize)13 throw new ArgumentException(string.Format("Illigal offsetDelta: {0}", offsetDelta), "offsetDelta");14
15 var predictOffset = SocketAsyncProxy.OrigOffset +offsetDelta;16
17 if (e.Offset !=predictOffset)18 {19 e.SetBuffer(predictOffset, Config.ReceiveBufferSize -offsetDelta);20 }21
22 if(IsInClosingOrClosed)23 return;24
25 OnReceiveStarted();26 willRaiseEvent =Client.ReceiveAsync(e);27 }28 catch(Exception exc)29 {30 LogError(exc);31
32 OnReceiveError(CloseReason.SocketError);33 return;34 }35
36 if (!willRa