Ejemplo n.º 1
0
        private static string Dump(WebSocketFrame frame)
        {
            var len = frame.Length;
            var cnt = (long)(len / 4);
            var rem = (int)(len % 4);

            int    cntDigit;
            string cntFmt;

            if (cnt < 10000)
            {
                cntDigit = 4;
                cntFmt   = "{0,4}";
            }
            else if (cnt < 0x010000)
            {
                cntDigit = 4;
                cntFmt   = "{0,4:X}";
            }
            else if (cnt < 0x0100000000)
            {
                cntDigit = 8;
                cntFmt   = "{0,8:X}";
            }
            else
            {
                cntDigit = 16;
                cntFmt   = "{0,16:X}";
            }

            var spFormat = String.Format("{{0,{0}}}", cntDigit);

            var headerFormat = String.Format(
                @"
{0} 01234567 89ABCDEF 01234567 89ABCDEF
{0}+--------+--------+--------+--------+\n", spFormat);

            var lineFormat = String.Format(
                "{0}|{{1,8}} {{2,8}} {{3,8}} {{4,8}}|\n", cntFmt
                );

            var footerFmt = String.Format(
                "{0}+--------+--------+--------+--------+", spFormat
                );

            var buff = new StringBuilder(64);

            Action <string, string, string, string> linePrinter()
            {
                long lineCnt = 0;

                return((arg1, arg2, arg3, arg4) =>
                {
                    buff.AppendFormat(lineFormat, ++lineCnt, arg1, arg2, arg3, arg4);
                });
            }

            var printLine = linePrinter();
            var bytes     = frame.ToArray();

            buff.AppendFormat(headerFormat, String.Empty);

            for (long i = 0; i <= cnt; i++)
            {
                var j = i * 4;

                if (i < cnt)
                {
                    printLine(
                        Convert.ToString(bytes[j], 2).PadLeft(8, '0'),
                        Convert.ToString(bytes[j + 1], 2).PadLeft(8, '0'),
                        Convert.ToString(bytes[j + 2], 2).PadLeft(8, '0'),
                        Convert.ToString(bytes[j + 3], 2).PadLeft(8, '0')
                        );

                    continue;
                }

                if (rem > 0)
                {
                    printLine(
                        Convert.ToString(bytes[j], 2).PadLeft(8, '0'),
                        rem >= 2
                      ? Convert.ToString(bytes[j + 1], 2).PadLeft(8, '0')
                      : String.Empty,
                        rem == 3
                      ? Convert.ToString(bytes[j + 2], 2).PadLeft(8, '0')
                      : String.Empty,
                        String.Empty
                        );
                }
            }

            buff.AppendFormat(footerFmt, String.Empty);
            return(buff.ToString());
        }
Ejemplo n.º 2
0
        private static string dump(WebSocketFrame frame)
        {
            int    num2;
            string str1;
            ulong  length = frame.Length;
            long   num3   = (long)(length / (long)4);
            int    num4   = (int)(length % (long)4);

            if (num3 < (long)10000)
            {
                num2 = 4;
                str1 = "{0,4}";
            }
            else if (num3 < (long)65536)
            {
                num2 = 4;
                str1 = "{0,4:X}";
            }
            else if (num3 >= 4294967296L)
            {
                num2 = 16;
                str1 = "{0,16:X}";
            }
            else
            {
                num2 = 8;
                str1 = "{0,8:X}";
            }
            string        str2          = string.Format("{{0,{0}}}", num2);
            string        str3          = string.Format("\r\n{0} 01234567 89ABCDEF 01234567 89ABCDEF\r\n{0}+--------+--------+--------+--------+\\n", str2);
            string        str4          = string.Format("{0}|{{1,8}} {{2,8}} {{3,8}} {{4,8}}|\n", str1);
            string        str5          = string.Format("{0}+--------+--------+--------+--------+", str2);
            StringBuilder stringBuilder = new StringBuilder(64);
            Action <string, string, string, string> action = new Func <Action <string, string, string, string> >(() => {
                long num1 = (long)0;
                return((string arg1, string arg2, string arg3, string arg4) => {
                    StringBuilder cSu0024u003cu003e8_locals1 = stringBuilder;
                    string str = str4;
                    object[] objArray = new object[5];
                    long num = num1 + (long)1;
                    num1 = num;
                    objArray[0] = num;
                    objArray[1] = arg1;
                    objArray[2] = arg2;
                    objArray[3] = arg3;
                    objArray[4] = arg4;
                    cSu0024u003cu003e8_locals1.AppendFormat(str, objArray);
                });
            })();

            stringBuilder.AppendFormat(str3, string.Empty);
            byte[] array = frame.ToArray();
            for (long i = (long)0; i <= num3; i += (long)1)
            {
                long num5 = i * (long)4;
                if (i < num3)
                {
                    action(Convert.ToString(array[checked ((IntPtr)num5)], 2).PadLeft(8, '0'), Convert.ToString(array[checked ((IntPtr)(num5 + (long)1))], 2).PadLeft(8, '0'), Convert.ToString(array[checked ((IntPtr)(num5 + (long)2))], 2).PadLeft(8, '0'), Convert.ToString(array[checked ((IntPtr)(num5 + (long)3))], 2).PadLeft(8, '0'));
                }
                else if (num4 > 0)
                {
                    action(Convert.ToString(array[checked ((IntPtr)num5)], 2).PadLeft(8, '0'), (num4 >= 2 ? Convert.ToString(array[checked ((IntPtr)(num5 + (long)1))], 2).PadLeft(8, '0') : string.Empty), (num4 == 3 ? Convert.ToString(array[checked ((IntPtr)(num5 + (long)2))], 2).PadLeft(8, '0') : string.Empty), string.Empty);
                }
            }
            stringBuilder.AppendFormat(str5, string.Empty);
            return(stringBuilder.ToString());
        }