예제 #1
0
 private void ListenAsyncCallback(IAsyncResult result)
 {
     if (!_running)
     {
         // TODO: Log that request was denied because server was shutdown
         Console.WriteLine("Cannot handle comet request.  Server is already shutdown.");
         return;
     }
     Console.WriteLine("Got comet request!");
     TcpClient context = _listener.EndAcceptTcpClient(result);
     Console.WriteLine("Handling request");
     CometRequestHandler requestHandler = new CometRequestHandler(this, context);
     requestHandler.HandleRequest();
 }
예제 #2
0
 public CometClient(CometRequestHandler requestHandler)
 {
     _requestHandler = requestHandler;
     _queue = System.Collections.Queue.Synchronized(new Queue());
     _queueNotEmpty = new EventWaitHandle(false, EventResetMode.ManualReset);
 }
예제 #3
0
 internal CometClient AcceptClient(CometRequestHandler requestHandler)
 {
     Console.WriteLine("AcceptClient");
     CometClient cometClient;
     lock (_lock)
     {
         Console.WriteLine("Got lock");
         if (_clients.ContainsKey(requestHandler.CometId))
         {
             Console.WriteLine("Client already exists");
             throw new Exception("Client already exists!");
         }
         else
         {
             /*
              if (!_requestPaths.Contains(requestHandler.Path))
              {
              Console.WriteLine("Invalid request path: \"{0}\"", requestHandler.Path);
              throw new Exception("Invalid request path");
              }
              */
             cometClient = new CometClient(requestHandler);
             _clients.Add(requestHandler.CometId, cometClient);
             Console.WriteLine("Client created!");
         }
     }
     List<CometClient> clients;
     lock (_lock)
     {
         Console.WriteLine("Adding client to path index");
         if (!_pathIndex.TryGetValue(requestHandler.Path, out clients))
         {
             clients = new List<CometClient>();
             _pathIndex.Add(requestHandler.Path, clients);
         }
         clients.Add(cometClient);
         if (requestHandler.User != null)
         {
             Console.WriteLine("Adding client to username index: {0}", requestHandler.User.Identity.Name);
             if (!_usernameIndex.TryGetValue(requestHandler.User.Identity.Name, out clients))
             {
                 clients = new List<CometClient>();
                 _usernameIndex.Add(requestHandler.User.Identity.Name, clients);
             }
             clients.Add(cometClient);
         }
     }
     //requestHandler.WriteConnectionEstablished();
     //Console.WriteLine("Connection established for comet id: {0}", cometClient.CometId);
     return cometClient;
 }