Exemplo n.º 1
0
 public void BeginListen()
 {
     if (!this.Connected)
     {
         this.beginListenCalled = 0;
         throw new InvalidOperationException("The protocol is not connected.");
     }
     if (Interlocked.Exchange(ref this.beginListenCalled, 1) == 0)
     {
         this.listener.BeginGetContext(a =>
         {
             try
             {
                 HttpListenerContext context = this.listener.EndGetContext(a);
                 this.beginListenCalled      = 0;
                 Request request             = new Request(context);
                 if (request.RequestMessage() == "[CONNECT]")
                 {
                     request.Respond("[CONNECTED]");
                 }
                 else
                 {
                     lock (this.listeners)
                     {
                         foreach (var listener in this.listeners)
                         {
                             listener.OnReceivedRequest(request);
                         }
                     }
                 }
                 if (this.Connected)
                 {
                     BeginListen();
                 }
             }
             catch (ObjectDisposedException)
             {
             }
         }, null);
     }
 }