コード例 #1
0
        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);
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
            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);
            }