コード例 #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
ファイル: ArrayRef.cs プロジェクト: Dramacydal/M2Lib
        public override void Write(MyBinaryWriter stream)
        {
            stream.Write(Elements.Count);
            stream.Write(stream.DataStartOffset);

            if (Elements.Count > 0)
            {
                var currOffs = stream.BaseStream.Position;
                stream.Seek(stream.DataStartOffset, SeekOrigin.Begin);

                if (typeof(T).IsSubclassOf(typeof(Element)))
                {
                    var elementSize = (Elements[0] as Element).GetSize();
                    stream.DataStartOffset += elementSize * Elements.Count;
                }
                else
                {
                    stream.DataStartOffset += Marshal.SizeOf(typeof(T)) * Elements.Count;
                }

                foreach (var element in Elements)
                {
                    stream.Write <T>(element);
                }

                stream.Seek((int)currOffs, SeekOrigin.Begin);
            }
        }
コード例 #3
0
        public MemoryStream SerializeSinaglePackage(UpdateLatestPacakge msg)
        {
            MemoryStream stream = ObjectAllocatorHolder <MemoryStream> .Allocate();

            stream.Seek(0, SeekOrigin.Begin);
            var  binaryWriter = MyBinaryWriter.Allocate(stream);
            long bodyLength;
            var  old = MessagePool.GetPackageBySeq(msg.Head.BaseUserCmdSeq);

            if (old != null)
            {
                msg.Head.Serialize(binaryWriter);
                bodyLength = SerializeComponents(binaryWriter, old.UpdateComponents, msg.UpdateComponents);
            }
            else
            {
                msg.Head.BaseUserCmdSeq = -1;
                msg.Head.Serialize(binaryWriter);
                bodyLength = SerializeComponents(binaryWriter, _emptyUpdateComponents, msg.UpdateComponents);
            }

            AssertUtility.Assert(bodyLength < 65535);
            msg.Head.ReWriteBodyLength(binaryWriter, (short)bodyLength);
            binaryWriter.ReleaseReference();
            return(stream);
        }
コード例 #4
0
        /// <summary>
        /// 判断与比较值不相同的情况下,将当前值写入Wirter
        /// </summary>
        /// <param name="comparedInfo"></param>
        /// <param name="writer"></param>
        public void Write(WeaponBagContainer comparedInfo, MyBinaryWriter writer)
        {
            writer.Write(HeldSlotPointer);
            writer.Write(LastSlotPointer);
            BitArrayWrapper bitArray = BitArrayWrapper.Allocate(GameGlobalConst.WeaponSlotMaxLength, false);

            //  return new BitArray(5, true);
            if (comparedInfo == null)
            {
                bitArray.SetAll(true);
            }
            else
            {
                for (int i = 0; i < GameGlobalConst.WeaponSlotMaxLength; i++)
                {
                    bitArray[i] = slotWeapons[i] != comparedInfo.slotWeapons[i];
                }
            }

            writer.Write(bitArray);
            for (int i = 0; i < GameGlobalConst.WeaponSlotMaxLength; i++)
            {
                if (bitArray[i])
                {
                    writer.Write(slotWeapons[i].WeaponKey.EntityId);
                    writer.Write(slotWeapons[i].WeaponKey.EntityType);
                }
            }


            bitArray.ReleaseReference();
        }
コード例 #5
0
ファイル: Program.cs プロジェクト: Dramacydal/M2Lib
 public override void Write(MyBinaryWriter stream)
 {
     //stream.DataStartOffset += 16;
     stream.Write(C);
     stream.Write(D);
     E.Write(stream);
 }
コード例 #6
0
        public void WriteBody(MyBinaryWriter writer)
        {
            FieldSerializeUtil.Serialize(Target, writer);
            FieldSerializeUtil.Serialize(Offset, writer);

            FieldSerializeUtil.Serialize(HitPoint, writer);
        }
コード例 #7
0
ファイル: UpdateLatestHead.cs プロジェクト: yangfan111/common
 public void ReWriteBodyLength(MyBinaryWriter stream, short bodyLenght)
 {
     BodyLength = bodyLenght;
     stream.Seek(-bodyLenght - 2, SeekOrigin.Current);
     stream.Write(bodyLenght);
     stream.Seek(bodyLenght, SeekOrigin.Current);
 }
コード例 #8
0
        public void WriteBody(MyBinaryWriter writer)
        {
            FieldSerializeUtil.Serialize(Offset, writer);

            FieldSerializeUtil.Serialize(HitPoint, writer);
            FieldSerializeUtil.Serialize((byte)EnvironmentType, writer);
        }
コード例 #9
0
 public override void Write(MyBinaryWriter stream)
 {
     for (var i = 0; i < Values.Length; ++i)
     {
         stream.Write <T>(Values[i]);
     }
 }
コード例 #10
0
ファイル: Attachment.cs プロジェクト: Dramacydal/M2Lib
 public override void Write(MyBinaryWriter stream)
 {
     stream.Write(Id);
     stream.Write(Bone);
     stream.Write(Position);
     AnimateAttached.Write(stream);
 }
コード例 #11
0
 public override void Write(MyBinaryWriter stream)
 {
     stream.Write(Id);
     stream.Write(Data);
     stream.Write(Bone);
     stream.Write(Position);
     Enabled.Write(stream);
 }
コード例 #12
0
 public void Write(MyBinaryWriter writer)
 {
     for (int i = 0; i < GlobalConst.WeaponSlotMaxLength; i++)
     {
         writer.Write(slotWeapons[i].WeaponKey.EntityId);
         writer.Write(slotWeapons[i].WeaponKey.EntityType);
     }
 }
コード例 #13
0
ファイル: FireEvent.cs プロジェクト: yangfan111/CsharpCode
 public void WriteBody(MyBinaryWriter writer)
 {
     FieldSerializeUtil.Serialize(owner, writer);
     FieldSerializeUtil.Serialize((byte)fireEffectType, writer);
     FieldSerializeUtil.Serialize(pitch, writer);
     FieldSerializeUtil.Serialize(yaw, writer);
     FieldSerializeUtil.Serialize(weaponId, writer);
 }
コード例 #14
0
ファイル: AudioEvent.cs プロジェクト: yangfan111/CsharpCode
        public virtual void WriteBody(MyBinaryWriter writer)
        {
//            FieldSerializeUtil.Serialize((byte) footstepState, writer);
//            FieldSerializeUtil.Serialize((byte) footMatType, writer);
            // FieldSerializeUtil.Serialize((byte) subType, writer);
            FieldSerializeUtil.Serialize(relatedPos, writer);
            FieldSerializeUtil.Serialize(relatedRocation, writer);
        }
コード例 #15
0
        public void Write(FixedVector3 data, MyBinaryWriter writer)
        {
            var v = data.WorldVector3();

            writer.Write(v.x);
            writer.Write(v.y);
            writer.Write(v.z);
        }
コード例 #16
0
        public static void Write <T>(T cur, T last, MyBinaryWriter writer) where T :  IPatchClass <T>, new()
        {
            var serializer = _patchSerializers[cur.GetName()];

            if (serializer is IPatchSerializer <T> )
            {
                (serializer as IPatchSerializer <T>).Write(cur, last, writer);
            }
        }
コード例 #17
0
 public void Serialize(MyBinaryWriter writer, INetworkObjectSerializerManager serializerManager)
 {
     writer.Write(BaseSnapshotSeq);
     writer.Write(_entityPatchList.Count);
     foreach (var item in _entityPatchList)
     {
         item.Serialize(writer, serializerManager);
     }
 }
コード例 #18
0
ファイル: SnapshotHeader.cs プロジェクト: yangfan111/common
 public void Serialize(MyBinaryWriter writer)
 {
     writer.Write(VehicleSimulationTime);
     writer.Write(ServerTime);
     writer.Write(SnapshotSeq);
     writer.Write(LastUserCmdSeq);
     writer.Write(Self.EntityId);
     writer.Write(Self.EntityType);
 }
コード例 #19
0
 public void Write(MyBinaryWriter writer)
 {
     writer.Write(Commands.Count);
     for (int i = 0; i < Commands.Count; ++i)
     {
         writer.Write(Commands[i].Key);
         writer.Write(Commands[i].Value);
     }
 }
コード例 #20
0
ファイル: UpdateLatestHead.cs プロジェクト: yangfan111/common
        public void Serialize(MyBinaryWriter stream)
        {
            stream.Write(BaseUserCmdSeq);
            stream.Write(UserCmdSeq);
            stream.Write(LastSnapshotId);

            stream.Write(ComponentCount);
            stream.Write((short)0);
        }
コード例 #21
0
 public void ReWriteComponentCountAndBodyLength(MyBinaryWriter stream, short bodyLenght, byte count)
 {
     SerializeCount = count;
     BodyLength     = bodyLenght;
     stream.Seek(-bodyLenght - 3, SeekOrigin.Current);
     stream.Write(count);
     stream.Write(bodyLenght);
     stream.Seek(bodyLenght, SeekOrigin.Current);
 }
コード例 #22
0
        public void WriteBody(MyBinaryWriter writer)
        {
            FieldSerializeUtil.Serialize(Offset, writer);

            FieldSerializeUtil.Serialize(HitPoint, writer);
            FieldSerializeUtil.Serialize((byte)EnvironmentType, writer);
            FieldSerializeUtil.Serialize(HitAudioId, writer);
            FieldSerializeUtil.Serialize(needEffectEntity?(byte)1:(byte)0, writer);
            FieldSerializeUtil.Serialize(ChunkId, writer);
        }
コード例 #23
0
        public void Write(WeaponBagContainer comparedInfo, MyBinaryWriter writer)
        {
            writer.Write(HeldSlotPointer);
            writer.Write(LastSlotPointer);

            for (int i = 0; i < GlobalConst.WeaponSlotMaxLength; i++)
            {
                writer.Write(slotWeapons[i].WeaponKey.EntityId);
                writer.Write(slotWeapons[i].WeaponKey.EntityType);
            }
        }
コード例 #24
0
 public override void Serialize(MyBinaryWriter writer, INetworkObjectSerializerManager serializerManager)
 {
     writer.Write((byte)EntityReplicateOperationType.Mod);
     writer.Write(Key.EntityId);
     writer.Write(Key.EntityType);
     writer.Write((short)ComponentPatchList.Count);
     for (int i = 0; i < ComponentPatchList.Count; i++)
     {
         ComponentPatchList[i].Serialize(writer, serializerManager);
     }
 }
コード例 #25
0
        public int Serialize(Stream outStream, object message)
        {
            var msg          = message as UpdateLatestPacakge;
            var binaryWriter = MyBinaryWriter.Allocate(outStream);

            binaryWriter.Write(_version);
            if (MessagePool.GetPackageBySeq(msg.Head.LastUserCmdSeq) != null)
            {
                _logger.ErrorFormat("repetition  msg.Head.UserCmdSeq{0}", msg.Head.LastUserCmdSeq);
                binaryWriter.Write((byte)0);
                return(binaryWriter.WriterLenght);
            }

            MessagePool.AddMessage(msg);
            MessagePool.ClearOldMessage(msg.Head.LastAckUserCmdSeq);
            if (_sendHistoryStreams.Count > _sendCount)
            {
                RemoveHistoryFirst();
            }

            for (int i = 0; i < _sendCount; i++)
            {
                if (_sendHistorySeqs.Count > 0 && msg.Head.LastAckUserCmdSeq > 0 &&
                    _sendHistorySeqs.First() <= msg.Head.LastAckUserCmdSeq)
                {
                    RemoveHistoryFirst();
                }
                else
                {
                    break;
                }
            }

            var stream = SerializeSinaglePackage(msg);

            _sendHistoryStreams.AddLast(stream);
            _sendHistorySeqs.AddLast(msg.Head.LastUserCmdSeq);


            binaryWriter.Write((byte)_sendHistoryStreams.Count);

            foreach (var sendHistroyStream in _sendHistoryStreams)
            {
                binaryWriter.Write(sendHistroyStream.Stream.GetBuffer(),
                                   (int)(sendHistroyStream.Stream.Position - sendHistroyStream.Length), (int)sendHistroyStream.Length);
            }

            _logger.DebugFormat("send package{0}", binaryWriter.Position);

            var ret = binaryWriter.WriterLenght;

            binaryWriter.ReleaseReference();
            return(ret);
        }
コード例 #26
0
ファイル: PlayerEvents.cs プロジェクト: yangfan111/common
        public void Write(MyBinaryWriter writer)
        {
            AssertUtility.Assert((int)EEventType.End < 255);

            writer.Write((byte)_events.Count);
            foreach (var v in _events.Values)
            {
                writer.Write((byte)v.EventType);
                v.WriteBody(writer);
            }
        }
コード例 #27
0
        public override void Serialize(MyBinaryWriter writer, INetworkObjectSerializerManager serializerManager)
        {
            writer.Write((byte)ComponentReplicateOperationType.Add);
            var componentId = Component.GetComponentId();

            writer.Write((short)componentId);

            var componentSerializer = serializerManager.GetSerializer(componentId);

            componentSerializer.SerializeAll(Component as INetworkObject, DoCompress, writer);
        }
コード例 #28
0
 public void WriteBody(MyBinaryWriter writer)
 {
     FieldSerializeUtil.Serialize((byte)bodyPart, writer);
     // FieldSerializeUtil.Serialize(bulletBaseText, writer);
     //
     FieldSerializeUtil.Serialize(statisticStr, writer);
     FieldSerializeUtil.Serialize(cmdSeq, writer);
     FieldSerializeUtil.Serialize(serverTime, writer);
     FieldSerializeUtil.Serialize(totalDamage, writer);
     FieldSerializeUtil.Serialize(shootKey, writer);
     FieldSerializeUtil.Serialize(shootTarget, writer);
 }
コード例 #29
0
 public void Write(MyBinaryWriter writer)
 {
     writer.Write(Commands.Count);
     for (int i = 0; i < Commands.Count; ++i)
     {
         writer.Write(Commands[i].Key);
         writer.Write(Commands[i].Value.EventParam);
         writer.Write(Commands[i].Value.IntParameter);
         writer.Write(Commands[i].Value.FloatParameter);
         writer.Write(Commands[i].Value.StringParameter);
     }
 }
コード例 #30
0
 public void Write(MyBinaryWriter writer, Action <MyBinaryWriter, T> write)
 {
     writer.Write7BitEncodedInt(Width);
     writer.Write7BitEncodedInt(Height);
     for (int x = 0; x < Width; x++)
     {
         for (int y = 0; y < Height; y++)
         {
             write(writer, m_Array[x, y]);
         }
     }
 }
コード例 #31
0
		void ResetWriteBuffer ()
		{
			this.buffer = new MemoryStream ();
			writer = new MyBinaryWriter (buffer);
		}
コード例 #32
0
		// XmlWriterSettings support

		#endregion

		#region Constructors

		public XmlBinaryDictionaryWriter (Stream stream,
			IXmlDictionary dictionary,
			XmlBinaryWriterSession session, bool ownsStream)
		{
			if (dictionary == null)
				dictionary = new XmlDictionary ();
			if (session == null)
				session = new XmlBinaryWriterSession ();

			original = new MyBinaryWriter (stream);
			this.writer = original;
			buffer_writer = new MyBinaryWriter (buffer);
			this.dict_ext = dictionary;
			this.session = session;
			owns_stream = ownsStream;

			AddNamespace ("xml", "http://www.w3.org/XML/1998/namespace");
			AddNamespace ("xml", "http://www.w3.org/2000/xmlns/");
			ns_index = 2;
		}
コード例 #33
0
	public void Write7BitEncodedIntTest ()
	{
		MemoryStream stream = new MemoryStream ();
		var writer = new MyBinaryWriter (stream);
		writer.WriteLeb128 (5);

		Assert.AreEqual (new byte[] { 5 }, stream.ToArray (), "#1");

		stream = new MemoryStream ();
		writer = new MyBinaryWriter (stream);
		writer.WriteLeb128 (int.MaxValue);

		Assert.AreEqual (new byte[] { 255, 255, 255, 255, 7 }, stream.ToArray (), "#2");

		stream = new MemoryStream ();
		writer = new MyBinaryWriter (stream);
		writer.WriteLeb128 (128);

		Assert.AreEqual (new byte[] { 128, 1 }, stream.ToArray (), "#3");

		stream = new MemoryStream ();
		writer = new MyBinaryWriter (stream);
		writer.WriteLeb128 (-1025);

		Assert.AreEqual (new byte[] { 255, 247, 255, 255, 15 }, stream.ToArray (), "#4");

		stream = new MemoryStream ();
		writer = new MyBinaryWriter (stream);
		writer.WriteLeb128 (int.MinValue);

		Assert.AreEqual (new byte[] { 128, 128, 128, 128, 8 }, stream.ToArray (), "#5");

		stream = new MemoryStream ();
		writer = new MyBinaryWriter (stream);
		writer.WriteLeb128 (-1);

		Assert.AreEqual (new byte[] { 255, 255, 255, 255, 15 }, stream.ToArray (), "#6");

		stream = new MemoryStream ();
		writer = new MyBinaryWriter (stream);
		writer.WriteLeb128 (0);

		Assert.AreEqual (new byte[] { 0 }, stream.ToArray (), "#7");
	}