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(); }
public CometClient(CometRequestHandler requestHandler) { _requestHandler = requestHandler; _queue = System.Collections.Queue.Synchronized(new Queue()); _queueNotEmpty = new EventWaitHandle(false, EventResetMode.ManualReset); }
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; }