private static string dump(WsFrame frame) { var len = frame.Length; var count = (long)(len / 4); var rem = (int)(len % 4); int countDigit; string countFmt; if (count < 10000) { countDigit = 4; countFmt = "{0,4}"; } else if (count < 0x010000) { countDigit = 4; countFmt = "{0,4:X}"; } else if (count < 0x0100000000) { countDigit = 8; countFmt = "{0,8:X}"; } else { countDigit = 16; countFmt = "{0,16:X}"; } var spFmt = String.Format("{{0,{0}}}", countDigit); var headerFmt = String.Format( @"{0} 01234567 89ABCDEF 01234567 89ABCDEF {0}+--------+--------+--------+--------+\n", spFmt); var footerFmt = String.Format("{0}+--------+--------+--------+--------+", spFmt); var buffer = new StringBuilder(64); Func <Action <string, string, string, string> > linePrinter = () => { long lineCount = 0; var lineFmt = String.Format("{0}|{{1,8}} {{2,8}} {{3,8}} {{4,8}}|\n", countFmt); return((arg1, arg2, arg3, arg4) => buffer.AppendFormat(lineFmt, ++lineCount, arg1, arg2, arg3, arg4)); }; var printLine = linePrinter(); buffer.AppendFormat(headerFmt, String.Empty); var frameAsBytes = frame.ToByteArray(); int i, j; for (i = 0; i <= count; i++) { j = i * 4; if (i < count) { printLine( Convert.ToString(frameAsBytes [j], 2).PadLeft(8, '0'), Convert.ToString(frameAsBytes [j + 1], 2).PadLeft(8, '0'), Convert.ToString(frameAsBytes [j + 2], 2).PadLeft(8, '0'), Convert.ToString(frameAsBytes [j + 3], 2).PadLeft(8, '0')); } else if (rem > 0) { printLine( Convert.ToString(frameAsBytes [j], 2).PadLeft(8, '0'), rem >= 2 ? Convert.ToString(frameAsBytes [j + 1], 2).PadLeft(8, '0') : String.Empty, rem == 3 ? Convert.ToString(frameAsBytes [j + 2], 2).PadLeft(8, '0') : String.Empty, String.Empty); } } buffer.AppendFormat(footerFmt, String.Empty); return(buffer.ToString()); }
public bool WriteFrame(WsFrame frame) { return(Write(frame.ToByteArray())); }