static void Watcher() { while (true) { DateTime now = DateTime.Now; for (int i = 0; i < serverThreads; i++) { threadWorker tw = threads[i]; lock (tw.Lock) { if (tw.TreatingRequest && (tw.StartedTreating - now).TotalSeconds > 5) { Console.WriteLine("Restarting thread " + i); tw.Thread.Abort(); tw.Thread.Start(); } } } if (PixelChanged) { lock (bitmap) { bitmap = canvas.GetBitmap(); } PixelChanged = false; } Thread.Sleep(100); } }
static void Main(string[] args) { #region Argument parsing try { for (int i = 0; i < args.Length; i++) { switch (args[i]) { case "-s": case "--save-path": i++; savePath = args[i]; break; case "-i": case "--save-interval": i++; saveInterval = double.Parse(args[i]); if (saveInterval < 10000) { Console.WriteLine("Save interval is too short, please enter a value greater than 10000 ms."); throw new Exception(); } break; case "-u": case "--listening-url": i++; listeningUrl = args[i]; break; case "-t": case "--interval": i++; timeLimit = double.Parse(args[i]); break; case "-c": case "--thread-count": i++; serverThreads = int.Parse(args[i]); if (serverThreads < 1) { throw new Exception(); } break; default: throw new Exception(); } } } catch (Exception) { Console.WriteLine("Datboi -- usage:"); Console.WriteLine("-s\t--save-path\tSpecify the path to be used to save the canvas."); Console.WriteLine("\tDefault: \"save_canvas.txt\""); Console.WriteLine("-i\t--save-interval\tSpecify interval between each save of the canvas (ms)."); Console.WriteLine("\tDefault: 300000"); Console.WriteLine("-u\t--listening-url\tSpecify the url to listen to."); Console.WriteLine("\tDefault: \"http://127.0.0.1:6699/\""); Console.WriteLine("-t\t--interval\tSpecify the minimum time between each pixel that an ip can set (ms)."); Console.WriteLine("\tDefault: 1000"); Console.WriteLine("-c\t--thread-count\tSpecify the number of threads for the server to use."); Console.WriteLine("\tDefault: 8"); return; } #endregion Console.WriteLine("Starting up..."); #region Cache files cachedAssets = new Dictionary <string, byte[]>(10); foreach (string filePath in Directory.EnumerateFiles(".")) { string file = Path.GetFileName(filePath); if (staticAssets.IsMatch(file)) { cachedAssets.Add(file, File.ReadAllBytes(file)); } } #endregion canvas = new Canvas(savePath); bitmap = canvas.GetBitmap(); HttpListener serv = new HttpListener(); WebSocketServer ws = new WebSocketServer(IPAddress.Any, 6660); ws.AddWebSocketService <Behavior>("/set"); ws.Start(); try { serv.Prefixes.Add(listeningUrl); } catch (Exception) { Console.WriteLine("Invalid listening url."); return; } #if !__MonoCS__ // Reasonable timeouts serv.TimeoutManager.EntityBody = new TimeSpan(0, 0, 0, 0, 500); serv.TimeoutManager.DrainEntityBody = new TimeSpan(0, 0, 1); serv.TimeoutManager.IdleConnection = new TimeSpan(0, 0, 1); serv.TimeoutManager.MinSendBytesPerSecond = 2000; serv.TimeoutManager.HeaderWait = new TimeSpan(0, 0, 1); serv.TimeoutManager.RequestQueue = new TimeSpan(0, 0, 5); #endif threads = new threadWorker[serverThreads]; for (int i = 0; i < serverThreads; i++) { threads[i] = new threadWorker(); threads[i].Lock = new object(); threads[i].ID = i; threads[i].Thread = new Thread(new ThreadStart(threads[i].Worker)); threads[i].Thread.Start(); } Thread watcher = new Thread(new ThreadStart(Watcher)); watcher.Start(); serv.Start(); Stopwatch watch = new Stopwatch(); System.Timers.Timer saveTimer = new System.Timers.Timer(saveInterval); saveTimer.Elapsed += SaveTimerElapsed; Console.WriteLine("Shit waddup."); saveTimer.Start(); while (true) { HttpListenerContext context = serv.GetContext(); lock (contextQueue) { contextQueue.Enqueue(context); } } }
private void RefreshView(List<FileInfo> list) { ToggleListLoadIcon(true); doMeToo = LoadItemsToListView; while (workerList.IsBusy) { System.Threading.Thread.Yield(); Application.DoEvents(); } workerList.RunWorkerAsync(list); }
private void openToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "Sail Files (.sail)|*.sail|Sail Files (.cof)|*.cof|All Files (*.*)|*.*"; ofd.Multiselect = false; if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { ToggleListLoadIcon(true); doMeToo = LoadItemsToListView; while (workerList.IsBusy) { System.Threading.Thread.Yield(); Application.DoEvents(); } List<string> files = Directory.GetFiles(Path.GetDirectoryName(ofd.FileName)).ToList(); List<FileInfo> fullfiles = new List<FileInfo>(files.Count); files.ForEach((file) => { fullfiles.Add(new FileInfo(file)); }); workerList.RunWorkerAsync(fullfiles); } }
private void MRUClicked(object sender, EventArgs e) { ToggleListLoadIcon(true); doMeToo = LoadItemsToListView; while (workerList.IsBusy) { System.Threading.Thread.Yield(); Application.DoEvents(); } List<string> files = Directory.GetFiles(Path.GetDirectoryName(sender.ToString())).ToList(); List<FileInfo> fullfiles = new List<FileInfo>(files.Count); files.ForEach((file) => { fullfiles.Add(new FileInfo(file)); }); workerList.RunWorkerAsync(fullfiles); }
private void Form1_Load(object sender, EventArgs e) { ToggleTreeLoadIcon(true); while (workerTree.IsBusy) { System.Threading.Thread.Yield(); Application.DoEvents(); } string path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); path = string.Format("{0}\\tree.nss", path); doWorkOnMe = LoadTree; workerTree.RunWorkerAsync(path); if (!PathSetter.AllFilesFound) MessageBox.Show("Error With Executable Paths. Fix Those Before Continuing..", ":(", MessageBoxButtons.OK, MessageBoxIcon.Error); }
void directoryWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if ((bool)e.Result) { if (SailFileDirectory != null) { Status = "Updating Files..."; ToggleListLoadIcon(true); doMeToo = LoadItemsToListView; while (workerList.IsBusy) { System.Threading.Thread.Yield(); Application.DoEvents(); } List<string> files = Directory.GetFiles(SailFileDirectory).ToList(); List<FileInfo> fullfiles = new List<FileInfo>(files.Count); files.ForEach((file) => { fullfiles.Add(new FileInfo(file)); }); workerList.RunWorkerAsync(fullfiles); } } }
private void addW4lDirectoryToolStripMenuItem_Click(object sender, EventArgs e) { FolderBrowserDialog fbd = new FolderBrowserDialog(); if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { treeChanged = true; ToggleTreeLoadIcon(true); while (workerTree.IsBusy) { System.Threading.Thread.Yield(); Application.DoEvents(); } doWorkOnMe = AddToTree; workerTree.RunWorkerAsync(fbd.SelectedPath); } }