public override bool Serialize(ref PacketOutStream Data, bool Force)
        {
            if (!Force && (val == null || val.ToString() == "0"))
                return false;

            Data.WriteEncoded7Bit((long)(Convert.ChangeType(val,typeof(long))));
            return true;
        }
        public static bool WritePacket(ref PacketOutStream Stream,ISerializablePacket Packet, bool WithSize = true , bool WithTerminator = true, bool WithOpcode = true)
        {
            if (Packet == null)
                return false;

            lock (Packet)
            {
                Packet.ConvertToField();

                PacketOutStream Data = new PacketOutStream();

                if (WithOpcode)
                    Data.WriteEncoded7Bit(Packet.Opcode);

                foreach (ISerializableField Field in Packet.GetFields().Values)
                    WriteField(ref Data, Field);

                if (WithTerminator && Packet.Opcode != (int)Opcodes.ProtocolHandshakeCompression)
                    WriteField(ref Data, null, 0, (int)EPacketFieldType.Terminator);

                if (WithSize)
                    Stream.WriteEncoded7Bit(Data.Length);

                Stream.Write(Data.ToArray());

                Packet.Fields.Clear();
            }

            return true;
        }
        public static bool WriteField(ref PacketOutStream Stream, ISerializableField Field, int FieldIndex, int FieldType)
        {
            if (FieldType == (int)EPacketFieldType.Invalid)
                return false;

            PacketOutStream NewStream = new PacketOutStream();

            long FieldResult;
            PacketOutStream.Encode2Parameters(out FieldResult, FieldType, FieldIndex);
            NewStream.WriteEncoded7Bit(FieldResult);

            if(Field == null || Field.Serialize(ref NewStream,false))
                Stream.Write(NewStream.ToArray());

            return true;
        }
Exemple #4
0
        public void SendTCPWithSize(byte[] ToSend)
        {
            PacketOutStream St = new PacketOutStream();
            St.WriteEncoded7Bit(ToSend.Length);
            St.Write(ToSend);

            SendTCP(St.ToArray());
        }
Exemple #5
0
        public override bool Serialize(ref PacketOutStream Data,bool Force)
        {
            Log.Debug("WriteList", "Serialize : " + val);

            if (val == null)
                return false;

            if (val is List<ISerializablePacket>)
            {
                List<ISerializablePacket> Packets = val as List<ISerializablePacket>;

                /*if (Packets.Count <= 0)
                    return false;*/

                long ListData;
                PacketOutStream.Encode2Parameters(out ListData, (int)EPacketFieldType.Packet, Packets.Count);
                Data.WriteEncoded7Bit(ListData);

                foreach (ISerializablePacket Packet in Packets)
                    PacketProcessor.WritePacket(ref Data, Packet, false, true, true);
            }
            else if (val is ISerializablePacket[])
            {
                ISerializablePacket[] Packets = val as ISerializablePacket[];

                long ListData;
                PacketOutStream.Encode2Parameters(out ListData, (int)EPacketFieldType.Packet, Packets.Length);
                Data.WriteEncoded7Bit(ListData);

                foreach (ISerializablePacket Packet in Packets)
                    PacketProcessor.WritePacket(ref Data, Packet, false, true, true);
            }
            else if (val is List<ulong>)
            {
                List<ulong> Values = val as List<ulong>;

                long ListData;
                PacketOutStream.Encode2Parameters(out ListData, (int)EPacketFieldType.Unsigned7BitEncoded, Values.Count);
                Data.WriteEncoded7Bit(ListData);

                for (int i = 0; i < Values.Count; ++i)
                    PacketProcessor.WriteField(ref Data, EPacketFieldType.Unsigned7BitEncoded, (ulong)Values[i], true);
            }
            else if (val is List<long>)
            {
                List<long> Values = val as List<long>;

                long ListData;
                PacketOutStream.Encode2Parameters(out ListData, (int)EPacketFieldType.Unsigned7BitEncoded, Values.Count);
                Data.WriteEncoded7Bit(ListData);

                for (int i = 0; i < Values.Count; ++i)
                    PacketProcessor.WriteField(ref Data, EPacketFieldType.Unsigned7BitEncoded, (long)Values[i],true);
            }
            else if (val is List<uint>)
            {
                List<uint> Values = val as List<uint>;

                /*if (Values.Count <= 0)
                    return false;*/

                long ListData;
                PacketOutStream.Encode2Parameters(out ListData, (int)EPacketFieldType.Raw4Bytes, Values.Count);
                Data.WriteEncoded7Bit(ListData);

                for (int i = 0; i < Values.Count; ++i)
                    PacketProcessor.WriteField(ref Data, EPacketFieldType.Raw4Bytes, (uint)Values[i], true);
            }
            else if (val is List<float>)
            {
                List<float> Values = val as List<float>;

                /*if (Values.Count <= 0)
                    return false;*/

                long ListData;
                PacketOutStream.Encode2Parameters(out ListData, (int)EPacketFieldType.Raw4Bytes, Values.Count);
                Data.WriteEncoded7Bit(ListData);

                for (int i = 0; i < Values.Count; ++i)
                    PacketProcessor.WriteField(ref Data, EPacketFieldType.Raw4Bytes, Values[i], true);
            }
            else if (val is List<string>)
            {
                List<string> Strs = val as List<string>;

                /*if (Strs.Count <= 0)
                    return false;*/

                long ListData;
                PacketOutStream.Encode2Parameters(out ListData, (int)EPacketFieldType.ByteArray, Strs.Count);
                Data.WriteEncoded7Bit(ListData);

                for (int i = 0; i < Strs.Count; ++i)
                    PacketProcessor.WriteField(ref Data, EPacketFieldType.ByteArray, (string)Strs[i], true);

                return true;
            }
            else if (val is List<ISerializableField>)
            {
                List<ISerializableField> Strs = val as List<ISerializableField>;

                if (Strs.Count <= 0)
                    return false;

                ISerializableField Field = Strs[0];

                long ListData;
                PacketOutStream.Encode2Parameters(out ListData, (int)Field.PacketType, Strs.Count);
                Data.WriteEncoded7Bit(ListData);

                for (int i = 0; i < Strs.Count; ++i)
                    PacketProcessor.WriteField(ref Data, Strs[i].PacketType, Strs[i].val, true);

                return true;
            }
            else
                return false;

            return true;
        }
Exemple #6
0
        public override bool Serialize(ref PacketOutStream Data, bool Force)
        {
            if (val == null)
                return false;

            if (val is Dictionary<long, ISerializablePacket>)
            {
                Dictionary<long, ISerializablePacket> Dic = val as Dictionary<long, ISerializablePacket>;
                int KeyType = (int)EPacketFieldType.Unsigned7BitEncoded;
                int ValueType = (int)EPacketFieldType.Packet;
                int Count = Dic.Count;

                if (Count <= 0)
                    return false;

                long DicData;
                PacketOutStream.Encode3Parameters(out DicData, KeyType, ValueType, Count);
                Data.WriteEncoded7Bit(DicData);

                foreach (KeyValuePair<long, ISerializablePacket> KP in Dic)
                {
                    PacketProcessor.WriteField(ref Data, (EPacketFieldType)KeyType, KP.Key,true);
                    PacketProcessor.WriteField(ref Data, (EPacketFieldType)ValueType, KP.Value,true);
                }

                return true;
            }

            return false;
        }
Exemple #7
0
        public override bool Serialize(ref PacketOutStream Data,bool Force)
        {
            if (!Force && (val == null || val.ToString() == "0"))
                return false;

            byte[] Result = new byte[0];

            if (val is string)
            {
                Result = UTF8Encoding.UTF8.GetBytes((val as string));
            }
            else if (val is byte[])
            {
                Result = (val as byte[]);
            }

            if (Result == null || Result.Length <= 0)
                return false;

            Data.WriteEncoded7Bit(Result.Length);
            Data.Write(Result);

            return true;
        }