private async void RequestReceived(BattleSession session, BinaryRequestInfo requestInfo) { int offset = 0; var sizeHeader = sizeof(MessageType); var intSize = sizeof(int); while (offset < requestInfo.Body.Length) { BaseController controller = null; MessageType msgType = MessageType.None; byte[] body = null; try { var byteArrayHeader = requestInfo.Body.CloneRange(offset, sizeHeader); var byteArrayBodyLength = requestInfo.Body.CloneRange(offset + sizeHeader, intSize); var bodyLength = BitConverter.ToInt32(byteArrayBodyLength, 0); body = requestInfo.Body.CloneRange(offset + intSize + sizeHeader, bodyLength); offset += (sizeHeader + intSize + bodyLength); msgType = (MessageType)BitConverter.ToInt32(byteArrayHeader, 0); } catch (Exception) { var msg = $"{msgType.ToString()}_{ (requestInfo.Body?.Length ?? 0).ToString()}_{session.SocketSession.RemoteEndPoint.ToString()}"; Console.WriteLine(msg); return; } BaseProtocol proto = null; proto = ProtocolFactory.DeserializeProtocol(msgType, body); try { controller = ControllerFactory.CreateController(msgType); await controller.DoPipeline(session, proto); } catch (Exception ex) { Console.WriteLine(ex); return; } } }
private async void AsyncTcpSession_DataReceived(object sender, DataEventArgs e) { int offset = 0; var sizeHeader = sizeof(MessageType); var intSize = sizeof(int); while (offset < e.Length) { var byteArrayHeader = e.Data.CloneRange(offset, sizeHeader); var byteArrayBodyLength = e.Data.CloneRange(offset + sizeHeader, intSize); var bodyLength = BitConverter.ToInt32(byteArrayBodyLength, 0); var body = e.Data.CloneRange(offset + intSize + sizeHeader, bodyLength); offset += (sizeHeader + intSize + bodyLength); var msgType = (MessageType)BitConverter.ToInt32(byteArrayHeader, 0); var proto = ProtocolFactory.DeserializeProtocol(msgType, body); var controller = ControllerFactory.CreateController(msgType); await controller.DoPipeline(proto); } }