void newClient_OnPacketReceived(object sender, WSPacketReceivedEventArgs e) { //TODO: Собрать данные из разных пакетов в одно сообщение if (e.Packets.LastPacket.Opcode == 1) { onMessageReceived(byteArrayToString(e.Packets.LastPacket.Data), e.UID); } else if (e.Packets.LastPacket.Opcode == 2) { onBinaryReceived(e.Packets.LastPacket.Data, e.UID); } else if (e.Packets.LastPacket.Opcode == 8) { onClientQuit(e.UID, ByteManager.Int16FromBytes(e.Packets.LastPacket.Data[0], e.Packets.LastPacket.Data[1])); } }
// Получаем заявленную в пакете длину из полученных RAW-данных в массиве msg private UInt64 getLength(byte[] msg, ref int cursor) { UInt64 res = ByteManager.constructByte(msg[1], 0, 6); cursor = 2; if (res == 126) { res = ByteManager.Int16FromBytes(msg[cursor++], msg[cursor++]); } else if (res == 127) { res = ByteManager.Int64FromBytes(msg, 2); cursor = 10; } return(res); }
private void ReceivingHandler(int uid, WSPacket packet, string header) { dataTotalLength += (uint)packet.Data.Length; traffic += (uint)packet.HeadersLength; ConsoleColor clr = Console.ForegroundColor; switch (uid) { case 0: clr = ConsoleColor.Cyan; break; case 1: clr = ConsoleColor.Yellow; break; case 2: clr = ConsoleColor.Blue; break; } Consoler.WriteLine(header, clr); switch (packet.Opcode) { case 1: Consoler.WriteLine(byteArrayToString(packet.Data)); break; case 2: Consoler.WriteLine("Получены бинарные данные!", ConsoleColor.Magenta); break; case 8: Consoler.WriteLine("Соединение закрыто удаленной стороной! Код причины: {0}", ConsoleColor.Magenta, ByteManager.Int16FromBytes(packet.Data[0], packet.Data[1])); Stop(); break; case 9: Consoler.WriteLine("Получен пакет 'PING'!", ConsoleColor.Magenta); break; case 10: Consoler.WriteLine("Получен пакет 'PONG'!", ConsoleColor.Magenta); break; } Consoler.WriteLine(); }