public VNetPacketMemSteam SerializeSinaglePackage(UpdateLatestPacakge msg) { VNetPacketMemSteam stream = VNetPacketMemSteam.Allocate(); stream.Stream.Seek(0, SeekOrigin.Begin); var binaryWriter = MyBinaryWriter.Allocate(stream.Stream); long bodyLength; var old = MessagePool.GetPackageBySeq(msg.Head.LastAckUserCmdSeq); int count = 0; if (old != null) { msg.Head.Serialize(binaryWriter); bodyLength = SerializeComponents(binaryWriter, old.UpdateComponents, msg.UpdateComponents, out count); } else { msg.Head.LastAckUserCmdSeq = -1; msg.Head.Serialize(binaryWriter); bodyLength = SerializeComponents(binaryWriter, _emptyUpdateComponents, msg.UpdateComponents, out count); } AssertUtility.Assert(bodyLength < 65535); msg.Head.ReWriteComponentCountAndBodyLength(binaryWriter, (short)bodyLength, (byte)count); binaryWriter.ReleaseReference(); return(stream); }
public void Dispose() { Logger.Info("AbstractNetowrkChannel.Dispose"); try { ProcessSerializeQueue(); ProcessDeserializeQueue(); //_serializer 有可能是公共的,这里不调Dispose // if (_serializer != null) // { // _serializer.Dispose(); // } _receiveMemoryStream.ReleaseReference(); _receiveMemoryStream = null; if (_serializer != null) { _serializer.Dispose(); } } catch (Exception e) { Logger.ErrorFormat("{0}", e); } }
public bool ReadFrom(BinaryFileReader filerReader, IMessageTypeInfo messageTypeInfo) { try { var readerReader = filerReader.Reader; Stage = readerReader.ReadInt32(); ProcessSeq = readerReader.ReadInt32(); ChannelId = readerReader.ReadInt32(); MessageType = readerReader.ReadInt32(); int Lenght = readerReader.ReadInt32(); //_logger.InfoFormat("ReadFrom:{0}, {1} ,{2}",this, Lenght,filerReader.Offset); VNetPacketMemSteam memoryStream = VNetPacketMemSteam.Allocate(); try { var b = readerReader.ReadBytes(Lenght); memoryStream.Stream.Write(b, 0, b.Length); memoryStream.Stream.Seek(0, SeekOrigin.Begin); var serializeInfo = messageTypeInfo.GetSerializeInfo(MessageType); if (serializeInfo != null) { try { MessageBody = serializeInfo.Deserialize(memoryStream.Stream); return(true); } catch (Exception e) { _logger.ErrorFormat("{0} {1}", memoryStream.Stream.Position, e); } } } finally { memoryStream.ReleaseReference(); } } catch (Exception e) { _logger.ErrorFormat("{0}", e); } return(false); }