Example #1
0
 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);
     }
 }
Example #2
0
        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);
                }
            }
        }
Example #3
0
 private void RefreshView(List<FileInfo> list)
 {
     ToggleListLoadIcon(true);
     doMeToo = LoadItemsToListView;
     while (workerList.IsBusy) { System.Threading.Thread.Yield(); Application.DoEvents(); }
     workerList.RunWorkerAsync(list);
 }
Example #4
0
        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);

            }
        }
Example #5
0
 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);
 }
Example #6
0
        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);
        }
Example #7
0
 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);
         }
     }
 }
Example #8
0
        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);
            }
        }