Ejemplo n.º 1
0
 private void OnTextFrameReceived(byte[] buf, WsHeader header)
 {
     if (header.PayloadLength <= 125)
     {
         if (header.Mask)
         {
             var    decodedValues = new List <byte>();
             byte[] maskKey       = new[] { buf[2], buf[3], buf[4], buf[5] }; // TODO: span slice でもっと見やすく
             for (int i = 6; i < buf.Length; i++)
             {
                 byte e = buf[i];
                 byte m = maskKey[(i - 6) % 4];
                 decodedValues.Add((byte)(e ^ m));
             }
             Console.WriteLine($"decoded (hex): {string.Join(" ", decodedValues.Select(x => x.ToString("X2")))}");
             Console.WriteLine($"decoded (str): {Encoding.UTF8.GetString(decodedValues.ToArray())}");
         }
     }
     else if (header.PayloadLength == 126)
     {
         // TODO:
     }
     else if (header.PayloadLength == 127)
     {
         // TODO:
     }
 }
Ejemplo n.º 2
0
        private void OnDataFrameReceived(byte[] buf)
        {
            Console.WriteLine("--------------------------------------------------");
            Console.WriteLine(string.Join(" ", buf.Select(x => x.ToString("X2"))));

            var header = WsHeader.Parse(buf);

            Console.WriteLine(header);

            switch (header.OpCode)
            {
            case OpCode.Text:
                OnTextFrameReceived(buf, header);
                break;

            case OpCode.Close:
                OnCloseReceived();
                break;
            }
        }
Ejemplo n.º 3
0
        private async Task ProcessSendQueue()
        {
            if (_sendQueue.Count == 0)
            {
                return;
            }

            if (!_sendQueue.TryDequeue(out string str))
            {
                return;
            }

            var bytes  = new List <byte>();
            var data   = Encoding.UTF8.GetBytes(str); // TODO: ヘッダを正しく組み立ててないみたいで、127バイト以上は動作していない。直す。
            var header = WsHeader.Create(true, OpCode.Text, data.Length);

            bytes.AddRange(header.ToBinary());
            bytes.AddRange(data);
            var arr = bytes.ToArray();
            await _stream.WriteAsync(arr, 0, arr.Length).ConfigureAwait(false);
        }