Exemple #1
0
        void parseSocket()
        {
            string socket_key = "", socket_ext = "", socket_ver = "";
            if (!_req.TryGetHeader("Sec-WebSocket-Key", out socket_key) ||
                !_req.TryGetHeader("Sec-WebSocket-Version", out socket_ver) ||
                !_req.TryGetHeader("Sec-WebSocket-Extensions", out socket_ext))
                return;

            string socket_protocol = "";
            if (!Request.TryGetHeader("Sec-WebSocket-Protocol", out socket_protocol)) socket_protocol = "";
            if (!string.IsNullOrEmpty(socket_protocol)) _sessionID = socket_protocol;

            StringBuilder send = new StringBuilder();
            send.AppendLine("HTTP/1.1 101 Switching Protocols");
            WriteHeader("Upgrade", "websocket");
            WriteHeader("Connection", "Upgrade");
            WriteHeader("Sec-WebSocket-Accept", Html5SocketMsg.ComputeWebSocketHandshakeSecurityHash09(socket_key));
            //WriteHeader("Sec-WebSocket-Protocol", "chat");
            is_write_headers = true;

            if (send_headers != null) send.Append(send_headers.ToString());
            send.AppendLine();

            Write(send.ToString());

            //WriteSocketMsg("Mensaje de Prueba 1");
            //WriteSocketMsg("Este es un mensaje de prueba 2");
            //WriteSocketMsg(LIB.Replicate("Este es un mensaje de prueba 2", 7));
            //WriteSocketMsg(LIB.Replicate("Este es un mensaje de prueba 2", 2200));
        }
Exemple #2
0
        }/*
          * void ProcessThread()
          * {
          * while (is_active)
          * {
          *     try
          *     {
          *         TcpClient s = listener.AcceptTcpClient();
          *         if (s != null)
          *         {
          *             Thread thread = new Thread(new ParameterizedThreadStart(Process));
          *             thread.Name = "HTTP_" + s.Client.RemoteEndPoint.ToString();
          *             thread.IsBackground = true;
          *             thread.Start(s);
          *         }
          *         Thread.Sleep(1);
          *     }
          *     catch { }
          * }
          * }*/

        void Process(object cl)
        {
            TcpClient client = (TcpClient)cl;

            if (!OnAccept(client))
            {
                client.Close();
                return;
            }
            HttpProcessor processor = new HttpProcessor(((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString(), client.GetStream(), this, false);

            if (processor.IsSocket)
            {
                Html5SocketMsg msg = null;
                try
                {
                    while ((msg = processor.ReadSocketMsg()) != null)
                    {
                        switch (msg.Type)
                        {
                        case ESocketDataType.ping: { processor.WriteSocketMsg(msg.Data, ESocketDataType.pong); break; }

                        case ESocketDataType.text:
                        case ESocketDataType.binary: { OnSocketMsg(processor, msg); break; }

                        case ESocketDataType.close: return;
                        }
                    }
                }
                catch (Exception ex)
                {
                    try { processor.WriteSocketMsg(ex.ToString(), ESocketDataType.close); }
                    catch { }
                }
                finally
                {
                    processor.Close();
                    processor.Dispose();
                }
            }
            else
            {
                while (processor.KeepAlive)
                {
                    processor = processor.ReProcess();
                    if (processor == null)
                    {
                        return;
                    }
                }
            }
            processor.Close();
            processor.Dispose();
        }
Exemple #3
0
 public Html5SocketMsg ReadSocketMsg() { return Html5SocketMsg.GetMsg(codec_post, stream); }
Exemple #4
0
 public void WriteSocketMsg(byte[] payload, ESocketDataType type)
 {
     byte[] dmp = Html5SocketMsg.hybi10Encode(payload, type);
     stream.Write(dmp, 0, dmp.Length);
 }
Exemple #5
0
 public virtual void OnSocketMsg(HttpProcessor p, Html5SocketMsg msg)
 {
 }