private void SendPackage(IWebSocketSession session, int opCode, byte[] data, int offset, int length) { byte[] fragment; if (length < 126) { fragment = new byte[2 + length]; fragment[1] = (byte)length; } else if (length < 65536) { fragment = new byte[4 + length]; fragment[1] = (byte)126; fragment[2] = (byte)(length / 256); fragment[3] = (byte)(length % 256); } else { fragment = new byte[10 + length]; fragment[1] = (byte)127; int left = length; int unit = 256; for (int i = 9; i > 1; i--) { fragment[i] = (byte)(left % unit); left = left / unit; if (left == 0) { break; } } } fragment[0] = (byte)(opCode | 0x80); if (length > 0) { Buffer.BlockCopy(data, offset, fragment, fragment.Length - length, length); session.EnqueueSend(new ArraySegment <byte>(fragment, 0, fragment.Length)); } else { session.EnqueueSend(new ArraySegment <byte>(fragment, 0, fragment.Length)); } }
private void SendPackage(IWebSocketSession session, int opCode, byte[] data, int offset, int length) { byte[] fragment; if (length < 126) { fragment = new byte[2 + length]; fragment[1] = (byte)length; } else if (length < 65536) { fragment = new byte[4 + length]; fragment[1] = (byte)126; fragment[2] = (byte)(length / 256); fragment[3] = (byte)(length % 256); } else { fragment = new byte[10 + length]; fragment[1] = (byte)127; int left = length; int unit = 256; for (int i = 9; i > 1; i--) { fragment[i] = (byte)(left % unit); left = left / unit; if (left == 0) break; } } fragment[0] = (byte)(opCode | 0x80); if (length > 0) { Buffer.BlockCopy(data, offset, fragment, fragment.Length - length, length); session.EnqueueSend(new ArraySegment<byte>(fragment, 0, fragment.Length)); } else { session.EnqueueSend(new ArraySegment<byte>(fragment, 0, fragment.Length)); } }