Пример #1
0
        public byte[] Build(Blowfish blowfish, uint source, uint target)
        {
            SubPacketAttribute attribute = (SubPacketAttribute)Attribute.GetCustomAttribute(GetType(), typeof(SubPacketAttribute));

            byte[] payload;
            using (var stream = new MemoryStream())
            {
                using (var writer = new BinaryWriter(stream))
                    Write(writer);

                payload = stream.ToArray();
            }

            if (attribute.ServerOpcode != SubPacketServerOpcode.None)
            {
                SubMessageHeader = new MessageHeader
                {
                    Unknown1  = 0x14,
                    Opcode    = (ushort)attribute.ServerOpcode,
                    Timestamp = (uint)DateTimeOffset.Now.ToUnixTimeSeconds()
                };

                payload = SubMessageHeader.Marshal().Concat(payload).ToArray();
            }

            blowfish?.Encipher(payload, 0, payload.Length);

            SubHeader = new Header
            {
                Size   = (ushort)(Header.Length + payload.Length),
                Type   = attribute.ServerOpcode != SubPacketServerOpcode.None ? SubPacketType.Message : attribute.Type,
                Source = source,
                Target = target
            };

            return(SubHeader.Marshal().Concat(payload).ToArray());
        }