public Task HandleDb(HttpContext httpContext, ITransactor transactor)
        {
            string result   = null;
            int    wantedId = GetRandomWantedId();

            transactor.Transact(db =>
            {
                IWorld w = GetRandomWorld(db, wantedId);

                if (w != null)
                {
                    result = JsonConvert.SerializeObject(w, _jsonSerializerSettings);
                }
            });

            if (result == null)
            {
                result = "410 Gone\r\n";
                httpContext.Response.StatusCode  = StatusCodes.Status410Gone;
                httpContext.Response.ContentType = "text/plain";
            }
            else
            {
                httpContext.Response.StatusCode  = StatusCodes.Status200OK;
                httpContext.Response.ContentType = "application/json";
            }

            httpContext.Response.ContentLength = result.Length;
            return(httpContext.Response.WriteAsync(result));
        }
예제 #2
0
        public static void Populate(ITransactor transactor)
        {
            transactor.Transact(db =>
            {
                int found = 0;

                foreach (Fortune f in db.Sql <Fortune>("SELECT f FROM Starcounter.Techempower.Fortune f"))
                {
                    Debug.Assert(f.Id >= 1);
                    Debug.Assert(f.Id <= Count);
                    Debug.Assert(db.GetOid(f) != 0);

                    found++;
                }

                for (int id = found + 1; id <= Count; id++)
                {
                    Fortune f = db.Insert <Fortune>();
                    f.Id      = id;
                    f.Message = _initial[id - 1];

                    Debug.Assert(f.Id >= 1);
                    Debug.Assert(f.Id <= Count);
                    Debug.Assert(db.GetOid(f) != 0);
                }
            });
        }
예제 #3
0
        /// <inheritdoc/>
        public override void ProcessInteraction(DiagramInteractionEventArguments interaction)
        {
            var selectedNodes = interaction.Diagram.Nodes.Where(n => n.IsSelected).ToList();

            selectedNodes.ForEach(n => n.IsSelected = false);
            if (interaction.Key == Key.C)
            {
                _copiedNodes = selectedNodes.Select(s => s.Model.Copy()).OfType <NodeModel>().ToList();
            }
            else
            {
                if (_copiedNodes == null)
                {
                    return;
                }
                var firstCopiedNodeX       = _copiedNodes.FirstOrDefault()?.X ?? 0;
                var firstCopiedNodeY       = _copiedNodes.FirstOrDefault()?.Y ?? 0;
                var nodesToInsertToDiagram = new List <Node>();
                foreach (var copiedNode in _copiedNodes)
                {
                    var node = _nodeProvider.CreateNodeFromModel((NodeModel)copiedNode.Copy());
                    node.IsSelected = true;
                    var diagramMousePoint = interaction.Diagram.GetDiagramPointFromViewPoint(interaction.MousePosition);
                    node.X         -= firstCopiedNodeX - diagramMousePoint.X;
                    node.Y         -= firstCopiedNodeY - diagramMousePoint.Y;
                    node.IsSelected = true;
                    nodesToInsertToDiagram.Add(node);
                    interaction.Diagram.AddNode(node);
                }
                _transactor.Transact(new UndoCommand(new MapCommand(new UnwireAndDeleteNodeCommand(interaction.Diagram))), nodesToInsertToDiagram);
            }
        }
 /// <inheritdoc/>
 protected override void Execute(ITransactor transactor, object parameter)
 {
     foreach (var composedCommand in _composedCommands)
     {
         transactor.Transact(composedCommand, parameter);
     }
 }
예제 #5
0
        public static void Populate(ITransactor transactor)
        {
            Random rnd = new Random();

            transactor.Transact(db =>
            {
                int found = 0;

                foreach (World w in db.Sql <World>("SELECT w FROM Starcounter.Techempower.World w"))
                {
                    Debug.Assert(w.Id >= 1);
                    Debug.Assert(w.Id <= Count);
                    Debug.Assert(db.GetOid(w) != 0);

                    found++;
                }

                for (int id = found + 1; id <= Count; id++)
                {
                    var w          = db.Insert <World>();
                    w.Id           = id;
                    w.RandomNumber = rnd.Next(1, Count + 1);

                    Debug.Assert(w.Id >= 1);
                    Debug.Assert(w.Id <= Count);
                    Debug.Assert(db.GetOid(w) != 0);
                }
            });
        }
예제 #6
0
 /// <inheritdoc/>
 protected override void Execute(ITransactor transactor, object parameter)
 {
     foreach (var node in _nodes)
     {
         transactor.Transact(new MoveNodeCommand(_nodeToPositionMap[node]), node);
     }
 }
예제 #7
0
 /// <inheritdoc/>
 public override void ProcessInteraction(DiagramInteractionEventArguments interaction)
 {
     if (interaction.ViewModelUnderMouse is Wire wire)
     {
         var deleteWireCommand = new DeleteWireCommand(interaction.Diagram);
         _transactor.Transact(deleteWireCommand, wire.WireModel);
     }
 }
예제 #8
0
 /// <inheritdoc/>
 protected override void Execute(ITransactor transactor, object parameter)
 {
     if (parameter is IEnumerable enumerable)
     {
         foreach (var item in enumerable)
         {
             transactor.Transact(_commandToMap, item);
         }
     }
 }
 /// <inheritdoc/>
 protected override void Execute(ITransactor transactor, object parameter)
 {
     foreach (var node in _nodes)
     {
         if (_nodeToSizeMap.ContainsKey(node))
         {
             transactor.Transact(new ResizeNodeCommand(_nodeToSizeMap[node]), node);
         }
     }
 }
 /// <inheritdoc/>
 protected override void Execute(ITransactor transactor, object parameter)
 {
     if (parameter is Node node)
     {
         foreach (var wire in node.Terminals.SelectMany(t => t.Model.ConnectedWires).ToArray())
         {
             transactor.Transact(_removeWireCommand, wire);
         }
     }
 }
예제 #11
0
        /// <inheritdoc/>
        public override void StopInteraction(DiagramInteractionEventArguments interaction)
        {
            if (!interaction.IsCtrlKeyPressed)
            {
                foreach (var node in _resizingNodes)
                {
                    node.X      = interaction.Diagram.SnapToGrid(node.X);
                    node.Y      = interaction.Diagram.SnapToGrid(node.Y);
                    node.Width  = interaction.Diagram.SnapToGrid(node.Width);
                    node.Height = interaction.Diagram.SnapToGrid(node.Height);
                }
            }

            interaction.Diagram.ShowSnapGrid = false;
            Mouse.SetCursor(Cursors.Arrow);
            var resizeCommand             = new ResizeNodesToCurrentSizeCommand(_resizingNodes);
            var positionAdjustmentCommand = new MoveNodesToCurrentPositionCommand(_resizingNodes);

            _transactor.Transact(resizeCommand, _undoResizeCommand);
            _transactor.Transact(positionAdjustmentCommand, _undoPositionAdjustmentCommand);
        }
예제 #12
0
        /// <inheritdoc/>
        public override void ProcessInteraction(DiagramInteractionEventArguments interaction)
        {
            var diagram       = interaction.Diagram;
            var selectedNodes = diagram.Nodes.Where(n => n.IsSelected).ToArray();
            var unwireAndRemoveAllNodesCommand = new MapCommand(new UnwireAndDeleteNodeCommand(diagram));

            _transactor.Transact(unwireAndRemoveAllNodesCommand, selectedNodes);

            if (!diagram.Nodes.Any())
            {
                diagram.ResetPanAndZoom();
            }
        }
예제 #13
0
        /// <inheritdoc/>
        public override void StopInteraction(DiagramInteractionEventArguments interaction)
        {
            if (interaction.Type == InteractionType.RightMouseDown)
            {
                var removeNodeCommand = new UnwireAndDeleteNodeCommand(interaction.Diagram);
                removeNodeCommand.Execute(InsertingNodeViewModel);
            }
            else
            {
                InsertingNodeViewModel.X = interaction.Diagram.SnapToGrid(InsertingNodeViewModel.X);
                InsertingNodeViewModel.Y = interaction.Diagram.SnapToGrid(InsertingNodeViewModel.Y);
            }

            _transactor.Transact(new UndoCommand(new UnwireAndDeleteNodeCommand(interaction.Diagram)), InsertingNodeViewModel);
            InsertingNodeViewModel           = null;
            interaction.Diagram.ShowSnapGrid = false;
        }
예제 #14
0
        /// <inheritdoc/>
        public override void StopInteraction(DiagramInteractionEventArguments interaction)
        {
            Mode            = RiftMode.None;
            _lastRiftDeltaX = 0;
            _lastRiftDeltaY = 0;
            if (_nodesBeingRifted == null)
            {
                return;
            }

            if (!interaction.IsCtrlKeyPressed)
            {
                foreach (var node in _nodesBeingRifted)
                {
                    node.X = interaction.Diagram.SnapToGrid(node.X);
                    node.Y = interaction.Diagram.SnapToGrid(node.Y);
                }
            }

            var doRiftCommand = new MoveNodesToCurrentPositionCommand(_nodesBeingRifted);

            _transactor.Transact(doRiftCommand, _undoRiftCommand, null);
            _nodesBeingRifted = null;
        }
예제 #15
0
 /// <summary>
 /// Executes a command without providing a parameter.
 /// </summary>
 /// <param name="transactor">The transactor to execute the command with.</param>
 /// <param name="command">The command to execute with a null parameter.</param>
 public static void Transact(this ITransactor transactor, IReversableCommand command)
 {
     transactor.Transact(command, parameter: null);
 }
예제 #16
0
        private static void WireTwoTerminalsOnDiagram(Diagram diagram, Terminal startTerminal, Terminal endTerminal, ITransactor transactor, bool animateWire)
        {
            var wireToTerminalCommand = new WireToTerminalCommand(diagram, startTerminal.Model, animateWire);

            transactor.Transact(wireToTerminalCommand, endTerminal.Model);
        }
예제 #17
0
        /// <summary>
        /// Execute a command with a custom undo command. Useful for complex undo scenarios.
        /// </summary>
        /// <param name="transactor">The transactor to execute the command with.</param>
        /// <param name="command">The command to execute.</param>
        /// <param name="undoCommand">The command that will undo the <paramref name="command"/>.</param>
        /// <param name="parameter">The parameter to pass into the command.</param>
        public static void Transact(this ITransactor transactor, IReversableCommand command, IReversableCommand undoCommand, object parameter)
        {
            var commandWithCustomUndo = new CustomUndoCommand(command, undoCommand);

            transactor.Transact(commandWithCustomUndo, parameter);
        }