static IEnumerator<Int32> Server(AsyncEnumerator ae, ServerState server) { var sleeper = new CountdownTimer(); var settings = server.settings; var ipe = new IPEndPoint(IPAddress.Parse(settings.addressforward), settings.portforward); var serverSock = new TcpListener(IPAddress.Parse(settings.addresslisten), settings.portlisten); serverSock.Start(20); Console.WriteLine("Server started"); Console.WriteLine("Listening on {0}:{1}", settings.addresslisten, settings.portlisten); Console.WriteLine("Forwarding to {0}:{1}", settings.addressforward, settings.portforward); while (true) { serverSock.BeginAcceptTcpClient(ae.End(), null); yield return 1; TcpClient local = null; try { local = serverSock.EndAcceptTcpClient(ae.DequeueAsyncResult()); local.NoDelay = true; local.LingerState.Enabled = false; } catch (SocketException) { Console.WriteLine("A client failed to connect"); } if(local != null) { // handle client var localAe = new AsyncEnumerator(); localAe.BeginExecute(ServerConnectRemote(localAe, server, ipe, local), localAe.EndExecute, localAe); } } }
private void scareCrow_Changed(object sender, FileSystemEventArgs e) { string fileName = e.Name.ToLower(); using (fileLoadResourceLock.WaitToWrite()) { if (pendingFileReloads.Contains(fileName) || !ContainsFile(fileName)) return; pendingFileReloads.Add(fileName); } CountdownTimer timer = new CountdownTimer(); timer.BeginCountdown(CHANGE_FILE_DELAY, DelayedProcessFileChanged, fileName); }
private void scareCrow_Changed(object sender, FileSystemEventArgs e) { string fileName = e.Name.ToLower(); using (DirectoryWatcher.fileLoadResourceLock.WaitToWrite()) { if (this.pendingFileReloads.Contains(fileName) || !this.ContainsFile(fileName)) { return; } this.pendingFileReloads.Add(fileName); } CountdownTimer timer = new CountdownTimer(); timer.BeginCountdown(5000, new System.AsyncCallback(this.DelayedProcessFileChanged), fileName); }