コード例 #1
0
        public ICollection <byte[]> GetChunks(int chunkSize = 65535, bool includeZeroEnding = true)
        {
            if (chunkSize > 65535)
            {
                throw new ArgumentOutOfRangeException(nameof(chunkSize), chunkSize, "Chunk size too big!");
            }

            var fullMessage = new List <byte>();

            fullMessage.Add(GetStructSize());
            fullMessage.Add((byte)Signature);
            var packed = PackStream.Pack(Content);

            fullMessage.AddRange(packed);

            var header = GenerateChunkHeader(fullMessage.Count);

            for (int i = header.Length - 1; i >= 0; i--)
            {
                fullMessage.Insert(0, header[i]);
            }

            if (includeZeroEnding)
            {
                fullMessage.AddRange(ZeroEnding);
            }

            return(new List <byte[]> {
                fullMessage.ToArray()
            });
        }
コード例 #2
0
            public static byte[] Pack <T>(IEnumerable <T> content)
            {
                var output        = new List <byte>();
                var contentAsList = content.ToList();

                output.AddRange(GetMarker(contentAsList.Count));

                for (var i = 0; i < contentAsList.Count; i++)
                {
                    output.AddRange(PackStream.Pack(contentAsList[i]));
                }

                return(output.ToArray());
            }
コード例 #3
0
        public byte[] GetBytes()
        {
            var output = new List <byte>();

            output.AddRange(PackStream.Pack(Cypher));
            if (Parameters == null)
            {
                output.AddRange(new byte[] { 0xA0 });
            }
            else
            {
                throw new NotImplementedException();
            }

            return(output.ToArray());
        }
コード例 #4
0
            private static byte[] PackDictionary(IDictionary content)
            {
                var arguments = content.GetType().GenericTypeArguments;
                var keyType   = arguments[0];
                var valueType = arguments[1];

                var bytes = new List <byte>();

                bytes.AddRange(GetMarker(content.Count));

                foreach (var item in content.Keys)
                {
                    var keyBytes = PackStream.Pack(Convert.ChangeType(item, keyType));
                    bytes.AddRange(keyBytes);
                    bytes.AddRange(PackStream.Pack(Convert.ChangeType(content[item], valueType)));
                }

                return(bytes.ToArray());
            }
コード例 #5
0
 public byte[] GetBytes()
 {
     return(PackStream.Pack(Content));
 }