Example #1
0
        protected override bool OnKeyPressEvent(EventKey evnt)
        {
            KeyboardCode code;

            switch (evnt.Key)
            {
            case Gdk.Key.Up: code = KeyboardCode.ArrowUp; break;

            case Gdk.Key.Down: code = KeyboardCode.ArrowDown; break;

            case Gdk.Key.Left: code = KeyboardCode.ArrowLeft; break;

            case Gdk.Key.Right: code = KeyboardCode.ArrowRight; break;

            case Gdk.Key.BackSpace: code = KeyboardCode.Backspace; break;

            default:
                if (evnt.KeyValue >= 32 && evnt.KeyValue < 127)
                {
                    code = KeyboardCode.NormalChar;
                }
                else
                {
                    code = KeyboardCode.Unknown;
                }
                break;
            }
            IKeyEvent keyEvent = new GtkKeyEvent(this, evnt.KeyValue, code);

            CanvasModel.HandleKeyPressEvent(keyEvent);
            base.OnKeyPressEvent(evnt);
            return(true);
        }
Example #2
0
 public CanvasView(Graphics graphics, CanvasModel canvas, Color backColor, TextBox debugOutput)
 {
     _graphics    = graphics;
     _canvas      = canvas;
     _backColor   = backColor;
     _debugOutput = debugOutput;
 }
Example #3
0
        public static CanvasModel GetCanvasModel(string input)
        {
            CanvasModel model = null;

            string[] values = input.Split(' ');
            uint     width = 0, height = 0;

            if (values.Length != 3 || values[0].ToUpper() != "C")
            {
                throw new ArgumentOutOfRangeException("Canvas dimensions are not valid!");
            }

            if (uint.TryParse(values[1], out width) && width > 0 && uint.TryParse(values[2], out height) && height > 0)
            {
                model        = new CanvasModel();
                model.Width  = width;
                model.Height = height;
            }
            else
            {
                throw new ArgumentOutOfRangeException("Canvas dimensions must be positive integers!");
            }

            return(model);
        }
Example #4
0
        /// <summary>
        /// Method to open a scribble file
        /// </summary>
        private void Open()
        {
            // create a instance of file dialog box to specify the file
            Microsoft.Win32.OpenFileDialog openFileDialog = new Microsoft.Win32.OpenFileDialog();
            openFileDialog.Filter = CanvasConstants.FileType;

            // call showDialog to display the file dialog
            if (openFileDialog.ShowDialog() == true)
            {
                // Call service method to deserialize the file contents into Model
                DataService.CanvasService canvasService = new DataService.CanvasService();
                CanvasModel canvasModel = canvasService.Read(openFileDialog.FileName);

                for (int i = 0; i < canvasModel.Points.Length; i++)
                {
                    if (canvasModel.Points[i] != null)
                    {
                        // Call the extension method to convet the points array to storke
                        var strokes = canvasModel.Points[i].GenerateStroke((DrawingMode)canvasModel.Modes[i]);

                        // add the stroke to the collection
                        this.Strokes.Add(strokes);
                    }
                }
            }
        }
Example #5
0
        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            runButton.IsEnabled = false;
            chart.ClearChart();
            try
            {
                if (!Validation.GetHasError(gridOptions) &&
                    gridOptions.Children.Cast <Control>().All(x => !Validation.GetHasError(x)))
                {
                    var result = await Task.Run(() => _emulatorService.Run(optionsModel.Options));

                    canvasModel.Lines = CanvasModel.GetLines(result);
                }
                else
                {
                    throw new Exception("ошибка в опциях");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, ex.Message, ex.GetType().Name, MessageBoxButton.OK, MessageBoxImage.Error);
            }

            runButton.IsEnabled = true;
        }
Example #6
0
        private void GraphGUI_Load(object sender, EventArgs e)
        {
            var canvas = new CanvasModel(10);

            _canvasController = new CanvasController(canvas);
            _canvasView       = new CanvasView(drawPanel.CreateGraphics(), canvas, drawPanel.BackColor, debugOutput);
            _canvasView.Render();
        }
 public DetailsDialog(CCanvas activeCanvas, CanvasModel cm)
 {
     InitializeComponent();
     this.DataContext = activeCanvas;
     _activeCanvas    = activeCanvas;
     _allTags         = cm.allTags;
     _currentTags     = _activeCanvas.tags.ToList();
 }
Example #8
0
        /// <summary>
        /// Method to write the serialized data in the given location
        /// </summary>
        /// <param name="fileName">file Name</param>
        /// <param name="canvasModel">canvas model</param>
        public void Write(string fileName, CanvasModel canvasModel)
        {
            FileStream    fs         = new FileStream(fileName, FileMode.Create);
            XmlSerializer serializer = new XmlSerializer(canvasModel.GetType());
            StreamWriter  writer     = new StreamWriter(fs);

            serializer.Serialize(writer, canvasModel);
            fs.Close();
        }
Example #9
0
        private void DispatchPointerEvent(PointerEventType type, double ex,
                                          double ey, ModifierType mods)
        {
            GtkPointerEvent outEvent = pointerEvent;

            if (outEvent.Update(type, ex, ey, mods))
            {
                CanvasModel.HandlePointerEvent(outEvent);
            }
        }
Example #10
0
        /// <summary>
        /// Method to read and deserialize the data
        /// </summary>
        /// <param name="fileName">file name</param>
        /// <returns>canvas model</returns>
        public CanvasModel Read(string fileName)
        {
            FileStream    fs          = new FileStream(fileName, FileMode.Open);
            XmlSerializer serializer  = new XmlSerializer(typeof(CanvasModel));
            StreamReader  reader      = new StreamReader(fs);
            CanvasModel   canvasModel = (CanvasModel)serializer.Deserialize(reader);

            fs.Close();

            return(canvasModel);
        }
Example #11
0
 public CalicoViewModel(CanvasModel cm, WorkspaceModel wm)
 {
     _canvasModel      = cm;
     _workspaceModel   = wm;
     navPanelWidth     = 175;
     detailPanelHeight = 150;
     allCanvasesView   = CollectionViewSource.GetDefaultView(allCanvases);
     selectedTags      = new List <string>();
     selectedUsers     = new List <string>();
     searchTerm        = "";
     navItemHeight     = 50;
 }
Example #12
0
        protected override bool OnExposeEvent(EventExpose args)
        {
            base.OnExposeEvent(args);
            Context context = CairoHelper.Create(args.Window);

            IPaintbrush pb = new GtkPaintbrush(this, context);

            CanvasModel.Paint(pb);
            (context.Target as IDisposable).Dispose();
            (context as IDisposable).Dispose();
            return(true);
        }
 private void ChartControl_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
 {
     if (Model != null)
     {
         Model.PropertyChanged -= SetLines;
     }
     Model = e.NewValue as CanvasModel;
     if (Model != null)
     {
         Model.PropertyChanged += SetLines;
     }
 }
 public WorkspaceViewModel(CanvasModel cm, WorkspaceModel wm) : base(cm, wm)
 {
     _canvasModel      = cm; //protected field in base class
     _workspaceModel   = wm; //protected field in base class
     activeWS          = allWorkspaces[0];
     navPanelWidth     = 175;
     detailPanelHeight = 150;
     allCanvasesView   = CollectionViewSource.GetDefaultView(allCanvases);
     selectedTags      = new List <string>();
     selectedUsers     = new List <string>();
     searchTerm        = "";
     navItemHeight     = 50;
 }
Example #15
0
        public static GraphDto ToGraphDto(CanvasModel canvas)
        {
            var graphDto = new GraphDto()
            {
                Nodes = new List <NodeDto>(canvas.Nodes.ConvertAll(ToNodeDto)),
                Edges = new List <EdgeDto>(canvas.Edges.ConvertAll(ToEdgeDto))
            };

            foreach (var terminal in canvas.Terminals)
            {
                graphDto.Nodes.Find(node => node.Id == terminal.Id).IsTerminal = true;
            }

            return(graphDto);
        }
Example #16
0
        private void Init()
        {
            _emulatorService        = new EmulatorService(new StatisticsService(), new LuckCalculationService());
            chart.DataContext       = canvasModel = new();
            gridOptions.DataContext = optionsModel = new()
            {
                Repeat                 = 10,
                GuarantFiveWin         = 90,
                ChanceFiveWinPercente  = 0.6M,
                GuarantFourWin         = 10,
                ChanceFourWinPercente  = 5.1M,
                UserOptionsAttemptsMax = 100,
                UserOptionsAttemptsMin = 50,
                UserOptionsCount       = 18000,
                UserOptionsPresetMax   = 89,
                UserOptionsPresetMin   = 0,
                StopAfterGuarantUserOptionsAttemptsMax = 100,
                StopAfterGuarantUserOptionsAttemptsMin = 50,
                StopAfterGuarantUserOptionsCount       = 20000,
                StopAfterGuarantUserOptionsPresetMax   = 89,
                StopAfterGuarantUserOptionsPresetMin   = 0,
                StopAfterGuarantWithLargePresetUserOptionsAttemptsMax = 100,
                StopAfterGuarantWithLargePresetUserOptionsAttemptsMin = 50,
                StopAfterGuarantWithLargePresetUserOptionsCount       = 20000,
                StopAfterGuarantWithLargePresetUserOptionsPresetMax   = 70,
                StopAfterGuarantWithLargePresetUserOptionsPresetMin   = 50,
                StopAfterGuarantWithoutLimitUserOptionsCount          = 2000,
                StopAfterGuarantWithoutLimitUserOptionsPresetMax      = 89,
                StopAfterGuarantWithoutLimitUserOptionsPresetMin      = 0,
                StopBeforeGuarantUserOptionsAttemptsMax  = 100,
                StopBeforeGuarantUserOptionsAttemptsMin  = 50,
                StopBeforeGuarantUserOptionsCount        = 20000,
                StopBeforeGuarantUserOptionsPresetMax    = 70,
                StopBeforeGuarantUserOptionsPresetMin    = 0,
                StopBeforeGuarantUserOptionsStopIndexMax = 70,
                StopBeforeGuarantUserOptionsStopIndexMin = 50,
                ExpectationFourWinUserOptionsAttemptsMax = 100,
                ExpectationFourWinUserOptionsAttemptsMin = 50,
                ExpectationFourWinUserOptionsCount       = 20000,
                ExpectationFourWinUserOptionsPresetMax   = 89,
                ExpectationFourWinUserOptionsPresetMin   = 0,
                ExpectationFourWinUserOptionsCountMax    = 10,
                ExpectationFourWinUserOptionsCountMin    = 3
            };

            Button_Click(null, null);
        }
Example #17
0
        public static CanvasModel GetObjectByPage(IContent node)
        {
            try
            {
                string json = node.GetValue <string>("canvas");

                var model = new CanvasModel();

                if (!string.IsNullOrEmpty(json))
                {
                    model = JsonConvert.DeserializeObject <CanvasModel>(json);
                }

                return(model);
            }
            catch (Exception ex)
            {
                Log.Error("Canvas error on GetObjectByPage in Repository.", ex);
                return(null);
            }
        }
Example #18
0
        public static CanvasModel GetObjectByNode(IPublishedContent node)
        {
            try
            {
                var model = new CanvasModel();

                if (node.HasProperty("canvas") && node.HasValue("canvas"))
                {
                    string json = node.GetPropertyValue <string>("canvas");

                    model = JsonConvert.DeserializeObject <CanvasModel>(json);
                }

                return(model);
            }
            catch (Exception ex)
            {
                Log.Error("Canvas error on GetObjectByNode in Repository.", ex);
                return(null);
            }
        }
Example #19
0
        public static bool SaveJson(CanvasModel model, int pageId)
        {
            try
            {
                var node = cs.GetById(pageId);

                var newJson = JsonConvert.SerializeObject(model, Formatting.None);

                node.SetValue("canvas", newJson.ToString());

                var currentUser = Authorize.GetCurrentUser();

                cs.Save(node, currentUser.Id);

                return(true);
            }
            catch (Exception ex)
            {
                Log.Error("Canvas error on SaveJson in Repository.", ex);

                return(false);
            }
        }
        public void Create()
        {
            if (_canvasHeight < 0 || _canvasWidth < 0)
            {
                MessageBox.Show("The canvas size must be positive.");
                return;
            }
            if (String.IsNullOrWhiteSpace(_canvasName))
            {
                MessageBox.Show("The name is not valid");
                return;
            }
            CanvasCreationMessage ccm    = new CanvasCreationMessage();
            CanvasModel           canvas = new CanvasModel();

            canvas.Height    = _canvasHeight;
            canvas.Width     = _canvasWidth;
            canvas.Name      = _canvasName;
            ccm.Canvas       = canvas;
            ccm.IsDoneAdding = true;
            _eventAggregator.PublishOnCurrentThread(ccm);

            TryClose();
        }
Example #21
0
        /// <summary>
        /// Method to save the canvas strokes
        /// </summary>
        private void Save()
        {
            CanvasModel canvasModel = new CanvasModel();

            // Call the extension method to convert the strokes in to point array
            canvasModel.Points = this.Strokes.GeneratePointArray();

            // Call the extension method to get the drawing modes of strokes
            canvasModel.Modes = this.Strokes.GetDrawingModes();

            // create a instance of file dialog box to specify the file name and location for save
            Microsoft.Win32.SaveFileDialog saveFileDialog = new Microsoft.Win32.SaveFileDialog();

            // Set the filter that determines the file type
            saveFileDialog.Filter = CanvasConstants.FileType;

            if (saveFileDialog.ShowDialog() == true)
            {
                DataService.CanvasService canvasService = new DataService.CanvasService();

                // call the service method to serialize and save the the contents
                canvasService.Write(saveFileDialog.FileName, canvasModel);
            }
        }
Example #22
0
        public JsonResult AddControl(string areaAlias, string controlType, int pageId)
        {
            var controlId = Guid.NewGuid();

            string columns = "6:medium:;6:medium:";

            var model = Repository.GetObjectById(pageId);

            if (model != null && !string.IsNullOrEmpty(controlType) && !string.IsNullOrEmpty(areaAlias))
            {
                // Find Area In Grid/Section or Root

                foreach (var area in model.Areas)
                {
                    FindArea(area, areaAlias);
                }

                if (AreaResult != null)
                {
                    var control = new CanvasControl
                    {
                        ControlID = controlId,
                        Type      = controlType
                    };

                    // If control is grid then create area inside it

                    if (controlType == "Grid")
                    {
                        control.Columns = columns;

                        int p = 0;
                        foreach (var column in columns.Split(';').Where(x => !string.IsNullOrEmpty(x)))
                        {
                            string col = column.Split(':')[0];

                            var area = new CanvasArea {
                                Alias = "grid-" + col + "-" + controlId.ToString() + "-" + p
                            };


                            control.Areas.Add(area);

                            p++;
                        }
                    }

                    // If control is section then create area inside it

                    if (controlType == "Section")
                    {
                        var area = new CanvasArea {
                            Alias = "section-" + controlId.ToString()
                        };

                        control.Areas.Add(area);
                    }

                    AreaResult.Controls.Add(control);
                }

                // Convert model back to json for saving

                Repository.SaveJson(model, pageId);
            }
            else
            {
                // If no area is found, create it

                var m = new CanvasModel();

                var area = new CanvasArea {
                    Alias = areaAlias
                };

                var control = new CanvasControl
                {
                    ControlID = controlId,
                    Type      = controlType
                };

                area.Controls.Add(control);

                m.Areas.Add(area);

                Repository.SaveJson(m, pageId);
            }

            return(Json(new { success = true, controlType = controlType, controlId = controlId.ToString(), pageId = pageId }));
        }
Example #23
0
        public static CanvasView Get(string alias, bool isAuthenticated)
        {
            try
            {
                var View = new CanvasView();

                int pageId = UmbracoContext.Current.PageId.Value;

                if (isAuthenticated)
                {
                    var cs = ApplicationContext.Current.Services.ContentService;

                    var page = cs.GetById(pageId);

                    var model = Repository.GetObjectById(pageId);

                    // Find area recurcivly

                    if (model.Areas.All(x => x.Alias != alias))
                    {
                        // Did not find area

                        // Check if there is a root area, create it if not.

                        Log.Info("Canvas - Did not find area, try to create it: " + alias);

                        var area = new CanvasArea();

                        area.Alias = alias;

                        if (model.Areas.Any())
                        {
                            // Append new

                            model.Areas.Add(area);

                            Repository.SaveJson(model, pageId);

                            page = cs.GetById(pageId);
                        }
                        else
                        {
                            // Create new

                            var areaModel = new CanvasModel();

                            areaModel.Areas.Add(area);

                            Repository.SaveJson(areaModel, pageId);

                            page = cs.GetById(pageId);
                        }
                    }

                    View.page     = page;
                    View.viewName = "/Views/Canvas/Backend.cshtml";
                }
                else
                {
                    View.node     = UmbracoContext.Current.ContentCache.GetById(pageId);
                    View.viewName = "/Views/Canvas/FrontEnd.cshtml";
                }

                View.alias = alias;

                return(View);
            }
            catch (Exception ex)
            {
                Log.Error("Canvas error on Get in ViewHelper.", ex);
                return(null);
            }
        }
Example #24
0
        private async static Task Main(string[] args)
        {
            try
            {
                if (!ParseArguments(args))
                {
                    return;
                }

                logger = new Logger(options?.LogFilePath, finishCTS.Token)
                {
                    ShowDebugLogs = options?.ShowDebugLogs ?? false
                };

                if (checkUpdates || !options.DisableUpdates)
                {
                    if (UpdateChecker.IsStartingUpdate(logger, checkUpdates) || checkUpdates)
                    {
                        return;
                    }
                }

                logger.LogTechState("Loading data from file...");
                try
                {
                    LoadFile(options.FileName);
                }
                catch (Exception ex)
                {
                    logger.LogError($"Error during loading file: {ex.Message}");
                }
                logger.LogInfo($"File is loaded: {w}x{h}, {deltas.Count + 1} frames");

                logger.LogTechState("Downloading palette...");
                PixelPlanetHttpApi api = new PixelPlanetHttpApi
                {
                    ProxySettings = proxySettings
                };
                UserModel user = await api.GetMeAsync();

                logger.LogTechInfo("Palette retrieved");
                CanvasModel canvas = user.Canvases[canvasType];
                palette = new Palette(canvas.Colors);

                DirectoryInfo dir          = Directory.CreateDirectory($"seq_{startTime:MM.dd_HH-mm}");
                string        pathTemplate = Path.Combine(dir.FullName, "{0:MM.dd_HH-mm-ss}.png");
                try
                {
                    SaveLoadedData(pathTemplate);
                }
                catch (Exception ex)
                {
                    logger.LogError($"Error during saving results: {ex.Message}");
                }
            }
            catch (Exception ex)
            {
                logger?.LogError($"Unhandled app level exception: {ex.Message}");
                logger?.LogDebug(ex.ToString());
            }
            finally
            {
                if (logger != null)
                {
                    logger.LogInfo("Exiting...");
                    logger.LogInfo($"Logs were saved to {logger.LogFilePath}");
                }
                finishCTS.Cancel();
                if (logger != null)
                {
                    Thread.Sleep(500);
                }
                logger?.Dispose();
                finishCTS.Dispose();
                Console.ForegroundColor = ConsoleColor.White;
                Environment.Exit(0);
            }
        }
Example #25
0
 public EditorViewModel(CanvasModel cm, WorkspaceModel wm) : base(cm, wm)
 {
     _canvasModel    = cm;
     _workspaceModel = wm;
     _activeCanvas   = new CCanvas();
 }
Example #26
0
        public void LoadState(out CanvasModel cm, out WorkspaceModel wm)
        {
            string dataPath = ".\\data";

            string path = dataPath + "\\canvasstate.xml";

            if (File.Exists(path))
            {
                XmlSerializer x = new XmlSerializer(typeof(CanvasModel));
                CanvasModel   tempModel;

                using (XmlReader xReader = XmlReader.Create(path))
                {
                    tempModel = (CanvasModel)x.Deserialize(xReader);
                }

                foreach (CCanvas c in tempModel.allCanvases)
                {
                    c.LoadFromFile(dataPath);
                }

                cm = tempModel;
            }
            else
            {
                cm = new CanvasModel();
            }

            path = dataPath + "\\workspacestate.xml";
            if (File.Exists(path))
            {
                XmlSerializer  x = new XmlSerializer(typeof(WorkspaceModel));
                WorkspaceModel tempModel;

                using (XmlReader xReader = XmlReader.Create(path))
                {
                    tempModel = (WorkspaceModel)x.Deserialize(xReader);
                }

                foreach (Workspace ws in tempModel.allWorkspaces)
                {
                    foreach (SketchThumbnail s in ws.Sketches)
                    {
                        CCanvas ancestor = cm[s.canvasID];
                        s.thumbnail = ancestor.getThumbnail();
                        s.canvas    = ancestor;
                    }
                }

                wm = tempModel;

                foreach (Workspace ws in _wsModel.allWorkspaces)
                {
                    ws.LoadNotesFromFile(dataPath);
                }
            }
            else
            {
                wm = new WorkspaceModel();
                wm.Initialize();
            }
        }
Example #27
0
 public CanvasController(CanvasModel canvas)
 {
     _canvas = canvas;
 }
Example #28
0
        private static async Task Main(string[] args)
        {
            try
            {
                if (!ParseArguments(args))
                {
                    return;
                }

                logger = new Logger(options?.LogFilePath, finishCTS.Token)
                {
                    ShowDebugLogs = options?.ShowDebugLogs ?? false
                };
                logger.LogDebug("Command line: " + Environment.CommandLine);

                logger.LogTechState("Connecting to API...");
                PixelPlanetHttpApi api = new PixelPlanetHttpApi
                {
                    ProxySettings = proxySettings
                };

                user = await api.GetMeAsync();

                logger.LogTechInfo("Successfully connected");

                CanvasModel canvas = user.Canvases[options.Canvas];

                if (canvas.Is3D)
                {
                    throw new Exception("3D canvas is not supported");
                }

                LoggerExtensions.MaxCoordXYLength = 1 + (int)Math.Log10(canvas.Size / 2);

                PixelMap.MapSize = canvas.Size;

                try
                {
                    if (options.LeftX < -(canvas.Size / 2) || options.RightX >= canvas.Size / 2)
                    {
                        throw new Exception("X");
                    }

                    if (options.TopY < -(canvas.Size / 2) || options.BottomY >= canvas.Size / 2)
                    {
                        throw new Exception("Y");
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception($"Entire rectangle should be inside the map (failed by {ex.Message})");
                }

                colorNameResolver = new ColorNameResolver(options.Canvas);

                if (checkUpdates || !options.DisableUpdates)
                {
                    if (UpdateChecker.IsStartingUpdate(logger, checkUpdates) || checkUpdates)
                    {
                        return;
                    }
                }

                cache = new ChunkCache2D(options.LeftX, options.TopY, options.RightX, options.BottomY, logger, options.Canvas);
                bool initialMapSavingStarted = false;
                saveThread = new Thread(SaveChangesThreadBody);
                saveThread.Start();
                if (string.IsNullOrWhiteSpace(options.FileName))
                {
                    options.FileName = string.Format("pixels_({0};{1})-({2};{3})_{4:yyyy.MM.dd_HH-mm}.bin", options.LeftX, options.TopY, options.RightX, options.BottomY, DateTime.Now);
                }
                Directory.CreateDirectory(Path.GetDirectoryName(Path.GetFullPath(options.FileName)));
                do
                {
                    try
                    {
                        using (WebsocketWrapper wrapper = new WebsocketWrapper(logger, true, proxySettings, null, options.Canvas))
                        {
                            cache.Wrapper = wrapper;
                            if (!initialMapSavingStarted)
                            {
                                logger.LogDebug("Main(): initiating map saving");
                                initialMapSavingStarted = true;
                                lockingStreamTask       = Task.Run(SaveInitialMapState);
                            }
                            wrapper.OnMapChanged   += Wrapper_OnMapChanged;
                            stopListening           = wrapper.StopListening;
                            Console.CancelKeyPress += (o, e) =>
                            {
                                logger.LogDebug("Console.CancelKeyPress received");
                                e.Cancel = true;
                                wrapper.StopListening();
                            };
                            logger.LogInfo("Press Ctrl+C to stop");
                            wrapper.StartListening();
                            break;
                        }
                    }
                    catch (Exception ex)
                    {
                        logger.LogError($"Unhandled exception: {ex.Message}");
                        Thread.Sleep(1000);
                    }
                } while (true);
            }
            catch (Exception ex)
            {
                logger?.LogError($"Unhandled app level exception: {ex.Message}");
                logger?.LogDebug(ex.ToString());
            }
            finally
            {
                if (logger != null)
                {
                    logger.LogInfo("Exiting when everything is saved...");
                    logger.LogInfo($"Logs were saved to {logger.LogFilePath}");
                }
                finishCTS.Cancel();
                if (logger != null)
                {
                    Thread.Sleep(500);
                }
                finishCTS.Dispose();
                logger?.Dispose();
                Console.ForegroundColor = ConsoleColor.White;
                if (saveThread != null && !saveThread.Join(TimeSpan.FromMinutes(1)))
                {
                    Console.WriteLine("Save thread doesn't finish, aborting");
                    Environment.Exit(0);
                }
            }
        }
        public async Task Run()
        {
            if (options.Canvas == CanvasType.Moon)
            {
                throw new Exception("Moon canvas is not designed for bots");
            }

            if (options.SessionName != null)
            {
                logger.LogTechState("Loading session...");
                SessionManager sessionManager = new SessionManager(proxySettings);
                session = sessionManager.GetSession(options.SessionName);
                logger.LogTechInfo("Session loaded");
            }

            logger.LogTechState("Connecting to API...");
            PixelPlanetHttpApi api = new PixelPlanetHttpApi
            {
                ProxySettings = proxySettings,
                Session       = session
            };
            UserModel user = await api.GetMeAsync(finishToken);

            logger.LogTechInfo("Successfully connected");
            if (options.SessionName != null)
            {
                if (user.Name != null)
                {
                    logger.LogTechInfo($"Session is alive; user \"{user.Name}\"");
                }
                else
                {
                    throw new SessionExpiredException();
                }
            }

            canvas = user.Canvases[options.Canvas];

            LoggerExtensions.MaxCoordXYLength = 1 + (int)Math.Log10(canvas.Size / 2);
            ValidateCanvas();

            palette           = new Palette(canvas.Colors, canvas.Is3D);
            colorNameResolver = new ColorNameResolver(options.Canvas);

            await LoadImage();

            logger.LogTechState("Calculating pixel placing order...");
            CalculateOrder();
            logger.LogTechInfo("Pixel placing order is calculated");

            InitCache();

            mapUpdatedResetEvent = new ManualResetEvent(false);
            cache.OnMapUpdated  += (o, e) =>
            {
                logger.LogDebug("cache.OnMapUpdated event fired");
                mapUpdatedResetEvent.Set();
            };
            if (options.DefenseMode)
            {
                gotGriefed             = new AutoResetEvent(false);
                cache.OnMapUpdated    += (o, e) => gotGriefed.Set();
                waitingGriefLockObject = new object();
            }
            Thread statsThread = new Thread(StatsCollectionThreadBody);

            statsThread.Start();
            do
            {
                try
                {
                    using (WebsocketWrapper wrapper = new WebsocketWrapper(logger, false, proxySettings, session, options.Canvas))
                    {
                        wrapper.OnConnectionLost += (o, e) => mapUpdatedResetEvent.Reset();
                        cache.Wrapper             = wrapper;
                        cache.DownloadChunks();
                        wrapper.OnMapChanged += LogMapChanged;
                        ClearPlaced();
                        bool wasChanged;
                        do
                        {
                            repeatingFails = false;
                            wasChanged     = await PerformBuildingCycle(wrapper);

                            if (!wasChanged && options.DefenseMode)
                            {
                                logger.Log("Image is intact, waiting...", MessageGroup.Info);
                                lock (waitingGriefLockObject)
                                {
                                    logger.LogDebug("Run(): acquiring grief waiting lock");
                                    gotGriefed.Reset();
                                    gotGriefed.WaitOne();
                                }
                                logger.LogDebug("Run(): got griefed");
                                await Task.Delay(ThreadSafeRandom.Next(500, 3000), finishToken);
                            }
                        } while (options.DefenseMode || wasChanged);
                        logger.Log("Building is finished", MessageGroup.Info);
                    }
                    return;
                }
                catch (Exception ex)
                {
                    logger.LogError($"Unhandled exception: {ex.GetBaseException().Message}");
                    logger.LogDebug(ex.ToString());
                    int delay = repeatingFails ? 30 : 10;
                    repeatingFails = true;
                    logger.LogTechState($"Reconnecting in {delay} seconds...");
                    Thread.Sleep(TimeSpan.FromSeconds(delay));
                    continue;
                }
            } while (true);
        }
Example #30
0
        static void Main(string[] args)
        {
            CanvasAppCommands command     = CanvasAppCommands.OTHER;
            CanvasModel       canvasModel = null;
            BaseCanvas        baseCanvas  = null;
            string            input       = string.Empty;

            do
            {
                try
                {
                    Console.Write("Enter the command: ");
                    input = Console.ReadLine().Trim();
                    if (Helper.IsValidInput(input))
                    {
                        if (Helper.IsExitCommand(input))
                        {
                            break;
                        }

                        command = Helper.GetCommandName(input);
                        if (canvasModel == null)
                        {
                            canvasModel = ModelExtractor.GetCanvasModel(input);

                            baseCanvas = new BaseCanvas();
                            baseCanvas.crateCanvas(canvasModel.Width, canvasModel.Height);
                        }

                        if (canvasModel != null)
                        {
                            if (command == CanvasAppCommands.LINE)
                            {
                                LineModel lineModal = new LineModel();

                                lineModal = ModelExtractor.GetLineModal(input);
                                baseCanvas.addLine(lineModal.X1, lineModal.Y1, lineModal.X2, lineModal.Y2);
                            }

                            if (command == CanvasAppCommands.RECTANGLE)
                            {
                                RectangleModel rectangleModel = new RectangleModel();

                                rectangleModel = ModelExtractor.GetRectangleModel(input);
                                baseCanvas.addRectangle(rectangleModel.X1, rectangleModel.Y1, rectangleModel.X2, rectangleModel.Y2);
                            }

                            if (command == CanvasAppCommands.BUCKET_FILL)
                            {
                                BucketFillModel bucketFillModel = new BucketFillModel();

                                bucketFillModel = ModelExtractor.GetBucketFillModel(input);
                                baseCanvas.fill(bucketFillModel.X, bucketFillModel.Y, Convert.ToChar(bucketFillModel.Colour));
                            }


                            baseCanvas.draw();
                        }
                    }
                    else
                    {
                        Console.WriteLine("Invalid Command!!! Please try again...\n");
                    }
                }
                catch (InvalidCastException ex)
                {
                    Console.WriteLine("ERROR: " + ex.Message);
                }
                catch (ArgumentOutOfRangeException ex)
                {
                    Console.WriteLine("ERROR: " + ex.Message);
                }
                catch (ArgumentException ex)
                {
                    Console.WriteLine("ERROR: " + ex.Message);
                }
                catch (InvalidOperationException ex)
                {
                    Console.WriteLine("ERROR: " + ex.Message);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Unable to create Canvas!!!");
                    Console.WriteLine("Please try again C 10 4 ==>  C widht height \n");
                }

                input = string.Empty;
            } while (command != CanvasAppCommands.QUIT);
        }