Example #1
0
        public void Start()
        {
            Consoler.WriteLine("Client #{0} connected!", ConsoleColor.White, uid);

            HandShake();

            wsl = new WSListener(client.GetStream());
            wsl.SinglePacketReceived     += wsl_SinglePacketReceived;
            wsl.FragmentReceived         += wsl_FragmentReceived;
            wsl.FragmentedPacketReceived += wsl_FragmentedPacketReceived;
            wsl.Start();
        }
Example #2
0
        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();
        }
Example #3
0
        private void HandShake()
        {
            string request = readHandshakeRequest();

            // Выводим в консоль полученные заголовки
            Consoler.WriteLine("HandShake Received:", ConsoleColor.Red);
            Consoler.WriteLine(request, ConsoleColor.DarkRed);

            bool   requestStatus = validateRequest(request);
            string response      = "";

            if (requestStatus)
            {
                // Вычисляем секретный код для WebSocket'a
                string sec_key = computeSecretKey(request);

                // Формируем заголовки для "рукопожатия"
                response += string.Concat(httpVersion != "" ? httpVersion : "HTTP/1.1", " ", 101, " ", "Switching protocols", "\n");
                response += "Connection: Upgrade\n";
                response += "Upgrade: websocket\n";
                response += string.Concat("Sec-Websocket-Accept: ", sec_key, "\n");
                response += "\n";
            }
            else
            {
                Consoler.WriteLine("Полученный от клиента запрос не валиден! Будет отправлен: '400 Bad request' ответ", ConsoleColor.Magenta);
                response += string.Concat(httpVersion != "" ? httpVersion : "HTTP/1.1", " ", 400, " ", "Bad request", "\n");
                response += "Connection: Upgrade\n";
                response += "Upgrade: websocket\n";
                response += "\n";
            }

            // Переводим строку в массив байт и посылаем его
            byte[] responseBuf = Encoding.ASCII.GetBytes(response);
            client.GetStream().Write(responseBuf, 0, responseBuf.Length);

            // Выводим в консоль отправленные заголовки
            Consoler.WriteLine("HandShake Sent:", ConsoleColor.Green);
            Consoler.WriteLine(response, ConsoleColor.DarkGreen);
        }