예제 #1
0
        public override string ToString()
        {
            int dataLen;

            byte[] dataStuff = ByteStuffing.Stuff(_data);

            if (_data == null)
            {
                dataLen = 0;
            }
            else
            {
                dataLen = dataStuff.Length;
            }

            byte[] result = new byte[3 + dataLen];

            int i = 0;

            result[i++] = SequenceNumber;
            result[i++] = Acknowledgment;
            result[i++] = _controlSum;

            if (dataStuff != null)
            {
                foreach (var item in dataStuff)
                {
                    result[i++] = item;
                }
            }

            return(Encoding.UTF8.GetString(result));
        }
예제 #2
0
        public static Segment Parse(string stringSegment)
        {
            byte[] bytesSegment = Encoding.UTF8.GetBytes(stringSegment ?? throw new ArgumentNullException());

            int i = 0;

            byte sequenceNumber = bytesSegment[i++];
            byte acknowledgment = bytesSegment[i++];
            byte controlSum     = bytesSegment[i++];

            List <byte> list = new List <byte>();

            for (int k = i; k < bytesSegment.Length; k++)
            {
                list.Add(bytesSegment[k]);
            }

            byte[] data;

            if (list.Any())
            {
                data = ByteStuffing.ToOriginalForm(list.ToArray());
            }
            else
            {
                data = null;
            }

            Segment requiredSegment = new Segment(State.Received, data, sequenceNumber, acknowledgment, controlSum);

            return(requiredSegment);
        }