Beispiel #1
0
        public static void ShowObject(Nodes.Node.ObjectPair obj)
        {
            BehaviorTreeList behaviorTreeList = BehaviorManager.Instance as BehaviorTreeList;
            if (behaviorTreeList == null)
                return;

            Nodes.Node node = null;
            Attachments.Attachment attach = null;
            if (obj.Obj is Nodes.Node)
            {
                node = (Nodes.Node)obj.Obj;
            }
            else if (obj.Obj is Attachments.Attachment)
            {
                attach = (Attachments.Attachment)obj.Obj;
                node = attach.Node;
            }

            if (node != null)
            {
                behaviorTreeList.ShowNode(node, obj.Root);
                if (BehaviorTreeViewDock.LastFocused != null)
                {
                    BehaviorTreeView behaviorTreeView = BehaviorTreeViewDock.LastFocused.BehaviorTreeView;
                    if (behaviorTreeView != null)
                    {
                        behaviorTreeView.SelectedNodePending = node;
                        behaviorTreeView.SelectedAttachmentPending = attach;

                        behaviorTreeView.Refresh();
                    }
                }
            }
        }
Beispiel #2
0
        public static string hitJoint(Nodes.Node n, Rectangle rect, int x, int y, bool inputsOnly) {
            //assume using a padded rect
            //missed the balls.
            if (x > rect.Left + ballSize && x < rect.Right - ballSize)
                return null;

            rect.Y += nodeTitleFont.Height;
            if (n.getExtra() != null) {
                rect.Y += nodeExtraFont.Height;
            }

            if (y < rect.Y)
                return null;

            Point pos;
            foreach (var kvp in n.getProperties()) {
                if ((kvp.Value.isInput && inputsOnly) || (kvp.Value.isOutput && !inputsOnly)) {
                    pos = getJointPos(n, kvp.Key, inputsOnly);
                    pos.X -= x; pos.Y -= y;

                    //intentionally dividing by 2 instead of 4 to expand the 'okay' selection radius.
                    if (pos.X * pos.X + pos.Y * pos.Y < ballSize * ballSize / 2) {
                        return kvp.Key;
                    }
                }
            }

            return null;
        }
Beispiel #3
0
        public Candidate(ServerIdentifier serverIdentifier, 
            IElectionTimer electionTimer,
            IObserver<RequestVoteMessage> requestVote,
            IObservable<RequestVoteResultMessage> voteReply, 
            IVotingSystem votingSystem,
            IElection election,
            ILogReplication logReplication,
            Nodes nodes,
            ILoggerFactory loggerFactory,            
            RaftOptions options)
        {
            isDispose = false;
            _electionTimer = electionTimer;
            _requestVote = requestVote;
            _voteReply = voteReply;
            _votingSystem = votingSystem;
            _serverIdentifier = serverIdentifier;        
            _election = election;
            _options = options;
            _logger = loggerFactory.CreateLogger(nameof(Candidate) + " " + serverIdentifier);
            _election.CurrentTerm++;
            _election.VotedFor = _serverIdentifier.Id;
            _logReplication = logReplication;
            _nodes = nodes;

            if (_options.UseLogging)
                _logger.LogInformation($"{nameof(ServerStateType.Candidate)}");

            RequestElection();
        }
Beispiel #4
0
        /// <summary>
        /// Creates a new file manager.
        /// </summary>
        /// <param name="filename">The filename we want to load from or save to.</param>
        /// <param name="node">The behaviour we want to save. For loading use null.</param>
        public FileManager(string filename, Nodes.BehaviorNode node)
        {
            Debug.Check( Path.IsPathRooted(filename) );

            _filename = filename;
            _behavior = node;
        }
Beispiel #5
0
 protected Attachment(Nodes.Node node, string label, string description)
 {
     _node = node;
     _label = label;
     _baselabel = label;
     _description = description;
 }
Beispiel #6
0
        public override void RenderChildren(IParrotWriter writer, Nodes.Statement statement, IRendererFactory rendererFactory, IDictionary<string, object> documentHost, object model, string defaultTag = null)
        {
            if (string.IsNullOrEmpty(defaultTag))
            {
                defaultTag = DefaultChildTag;
            }

            //get model from parameter
            //required - do not remove
            if (statement.Parameters != null && statement.Parameters.Count == 1)
            {
                var localModel = GetLocalModel(documentHost, statement, model);

                if (localModel is IEnumerable)
                {
                    //create locals object to handle local values to the method
                    Locals locals = new Locals(documentHost);

                    IList<object> items = ToList(model as IEnumerable);
                    for (int i = 0; i < items.Count; i++)
                    {
                        var localItem = items[i];
                        locals.Push(IteratorItem(i, items));

                        base.RenderChildren(writer, statement.Children, rendererFactory, documentHost, defaultTag, localItem);

                        locals.Pop();
                    }
                }
            }
            else
            {
                base.RenderChildren(writer, statement.Children, rendererFactory, documentHost, defaultTag, model);
            }
        }
Beispiel #7
0
        public void SetPar(ParInfo par, Nodes.Node rootNode, bool isNewPar)
        {
            Debug.Check(par != null && rootNode != null);

            _isNewPar = isNewPar;
            _initialized = false;

            this.Text = isNewPar ? Resources.NewPar : Resources.EditPar;

            _par = par;
            _parTemp = par.Clone();
            _rootNode = rootNode;

            setParTypes();

            if (par != null) {
                _isArray = Plugin.IsArrayType(par.Type);
                Type type = _isArray ? par.Type.GetGenericArguments()[0] : par.Type;

                nameTextBox.Text = par.Name;
                arrayCheckBox.Checked = _isArray;
                typeComboBox.Text = Plugin.GetMemberValueTypeName(type);
                descTextBox.Text = par.BasicDescription;

                setValue(type);
            }

            enableOkButton();

            _initialized = true;
        }
Beispiel #8
0
        private static Nodes.Assignment ArrayAssignment(Lexer.Lexem currLexem, Nodes.Node.Coords coords)
        {
            Nodes.Expression index = Expr();
            if (Lexer.LookAhead().LexType != Lexer.LexType.CloseSquadBracket)
                ErrorList.Add(new Error(ParserException.NeedCloseSquadBracket, Lexer.LookBack().EndCoords));
            else
                Lexer.NextLexem();

            if (Lexer.LookAhead().LexType == Lexer.LexType.EqualSign)
            {
                Lexer.NextLexem();
                Nodes.Expression value = Expr();
                /*if (Lexer.LookAhead().LexType != Lexer.LexType.Semicolon)
                    ErrorList.Add(new Error(ParserException.NeedSemicolon, Lexer.LookBack().EndCoords));
                else
                    Lexer.NextLexem();*/
                Nodes.Assignment result = new Nodes.Assignment(new Nodes.ElementOfArray(currLexem.VarName, index), value, coords);
                result.Head = result;
                result.Tail = result;
                return result;
            }
            else
            {
                while (Lexer.LookBack().LexType != Lexer.LexType.Variable)
                    Lexer.RollBack();
                Lexer.RollBack();
                return null;
            }
        }
Beispiel #9
0
        protected override Tags.Base ResolveSpecific(Nodes.Base node)
        {
            if (node is Nodes.Mapping)
                return new Tags.Mapping();
            if (node is Nodes.Sequence)
                return new Tags.Sequence();

            // overkill
            var scalarNode = (Nodes.Scalar)node;

            var value = scalarNode.Content;

            if (nullExpression.IsMatch(value))
                return new Tags.Null();

            if (boolExpression.IsMatch(value))
                return new Tags.Boolean();

            if (intExpression.IsMatch(value))
                return new Tags.Integer();

            if (floatExpression.IsMatch(value))
                return new Tags.FloatingPoint();

            return new Tags.String();
        }
Beispiel #10
0
 /// <summary>
 /// Creates an instance of <see cref="NodeUserControl"/> class.
 /// </summary>
 public NodeUserControl()
 {
     InitializeComponent();
     m_dataContext = new Nodes(16);
     m_dataContext.PropertyChanged += new PropertyChangedEventHandler(ViewModel_PropertyChanged);
     this.DataContext = m_dataContext;
 }
Beispiel #11
0
 private object ConstructDocument(Nodes.Base node)
 {
     var data = this.ConstructObject(node);
     this.constructedObjects.Clear();
     this.recursiveObjects.Clear();
     return data;
 }
Beispiel #12
0
        public void InspectObject(AgentType agentType, string agentFullname, Nodes.Node node)
        {
            _agentFullname = agentFullname;

            preLayout();

            deleteAllRowControls();

            if (agentType != null)
            {
                IList<PropertyDef> properties = agentType.GetProperties();
                foreach (PropertyDef p in properties)
                {
                    addRowControl(p, null);
                }
            }
            else if (node != null)
            {
                List<ParInfo> allPars = node.Pars;
                foreach (ParInfo par in allPars)
                {
                    addRowControl(null, par);
                }
            }

            postLayout();
        }
        public string type = ""; // type of undo operation (delete, create, edit, move, changeLineColor, changeLineWidth, changeNodeColor)

        #endregion Fields

        #region Constructors

        /*************************************************************************************************************************/
        // CONSTRUCTORS
        public UndoOperation(
            string type, 
            Nodes nodes = null, 
            Lines lines = null, 
            int group = 0, 
            Position position = null, 
            int layer = 0
        )
        {
            this.type = type;
            this.group = group;
            this.position.set(position);
            this.layer = layer;

            if (nodes != null)
            {
                foreach (Node node in nodes)
                {
                    this.nodes.Add(new Node(node));
                }
            }

            if (lines != null)
            {
                foreach (Line line in lines)
                {
                    this.lines.Add(new Line(line));
                }
            }
        }
Beispiel #14
0
 public Assignment(ElementOfArray array, Nodes.Expression expr, Node.Coords coords)
 {
     Var = null;
     Value = expr;
     Array = array;
     this.Coords = coords;
 }
Beispiel #15
0
 public Assignment(Variable var, Nodes.Expression expr, Node.Coords coords)
 {
     Var = var;
     Value = expr;
     Array = null;
     this.Coords = coords;
 }
Beispiel #16
0
        protected override Tags.Base ResolveSpecific(Nodes.Base node)
        {
            if (node is Nodes.Mapping)
                return new Tags.Mapping();
            if (node is Nodes.Sequence)
                return new Tags.Sequence();

            var scalarNode = (Nodes.Scalar)node;

            var value = scalarNode.Content;

            switch (value)
            {
                case "null":
                    return new Tags.Null();
                case "true":
                case "false":
                    return new Tags.Boolean();
            }

            if (intExpression.IsMatch(value))
                return new Tags.Integer();
            if (floatExpression.IsMatch(value))
                return new Tags.FloatingPoint();

            return null;
        }
Beispiel #17
0
 /// <summary>
 /// Creates a new exporter.
 /// </summary>
 /// <param name="node">The behaviour hich will be exported.</param>
 /// <param name="outputFolder">The folder we want to export the behaviour to.</param>
 /// <param name="filename">The relative filename we want to export to. You have to add your file extension.</param>
 public Exporter(Nodes.BehaviorNode node, string outputFolder, string filename, List<string> includedFilenames = null)
 {
     _node = node;
     _outputFolder = outputFolder;
     _filename = filename;
     _includedFilenames = includedFilenames;
 }
Beispiel #18
0
 public static Rectangle getPaddedRect(Nodes.Node n) {
     Rectangle r = getRect(n);
     r.X -= ballSize / 2;
     r.Y -= ballSize / 2;
     r.Width += ballSize;
     r.Height += ballSize;
     return r;
 }
Beispiel #19
0
 protected override Tags.Base ResolveSpecific(Nodes.Base node)
 {
     return this
            .Tags
            .Reverse()
            .Where(t => t.Validate(node))
            .First();
 }
Beispiel #20
0
 public static IEnumerable<INode> Propagate(Nodes nodes)
 {
   while (!nodes.IsEmpty)
   {
     var node = nodes.Pop();
     yield return node;
     nodes.Push(React(node));
   }
 }
        /// <summary>
        /// Returns whether a behaviour was checked to be saved or not.
        /// </summary>
        /// <param name="node">The behaviour you want to check.</param>
        /// <returns>Returns true if the user wants the behaviour to be saved.</returns>
        internal bool IsSelected(Nodes.BehaviorNode node) {
            foreach(object obj in behaviorListBox.CheckedItems) {
                if (node == obj) {
                    return true;
                }
            }

            return false;
        }
Beispiel #22
0
        public override void Render(Parrot.Infrastructure.IParrotWriter writer, IRendererFactory rendererFactory, Nodes.Statement statement, IDictionary<string, object> documentHost, object model)
        {
            var localModel = GetLocalModel(documentHost, statement, model);

            if (localModel is bool && (bool)localModel)
            {
                RenderChildren(writer, statement.Children, rendererFactory, documentHost, base.DefaultChildTag, model);
            }
        }
Beispiel #23
0
        /// <summary>
        /// Creates an attachment from a given type.
        /// </summary>
        /// <param name="type">The type we want to create an attachment of.</param>
        /// <param name="node">The node this will be added to.</param>
        /// <returns>Returns the created event.</returns>
        public static Attachment Create(Type type, Nodes.Node node) {
            Debug.Check(type != null);

            Attachment atta = (Attachment)type.InvokeMember(string.Empty, System.Reflection.BindingFlags.CreateInstance, null, null, new object[] { node });

            if (atta == null)
            { throw new Exception(Resources.ExceptionMissingEventConstructor); }

            return atta;
        }
		internal static BehaviorTreeView GetBehaviorTreeView(Nodes.BehaviorNode node)
		{
			foreach(BehaviorTreeViewDock dock in __instances)
			{
				if(dock.BehaviorTreeView.RootNode ==node)
					return dock.BehaviorTreeView;
			}

			return null;
		}
Beispiel #25
0
		/// <summary>
		/// Creates an event from a given type.
		/// </summary>
		/// <param name="type">The type we want to create an event of.</param>
		/// <param name="node">The node the event will be added to.</param>
		/// <returns>Returns the created event.</returns>
		public static Event Create(Type type, Nodes.Node node)
		{
			Debug.Check(type !=null);

			Event evnt= (Event)type.InvokeMember(string.Empty, System.Reflection.BindingFlags.CreateInstance, null, null, new object[] { node });

			if(evnt ==null)
				throw new Exception(Resources.ExceptionMissingEventConstructor);

			return evnt;
		}
Beispiel #26
0
        public ParseTree(string source, Nodes.ParseTreeNode rootNode)
        {
            if (source == null)
            {
                throw new ArgumentNullException("source");
            }

            this.source = source;

            this.RootNode = rootNode;
        }
        public HelixWatch3DNodeViewModel(Nodes.Watch3D node, Watch3DViewModelStartupParams parameters):
            base(parameters)
        {
            watchNode = node;
            IsResizable = true;

            RegisterPortEventHandlers(node);

            watchNode.Serialized += SerializeCamera;
            watchNode.Deserialized += watchNode_Deserialized;

            Name = string.Format("{0} Preview", node.GUID);
        }
Beispiel #28
0
        public static void Clear(Nodes.BehaviorNode behavior)
        {
            Debug.Check(behavior != null);

            string behaviorFilename = behavior.Filename;
            if (!string.IsNullOrEmpty(behaviorFilename) && _undoDataDict.ContainsKey(behaviorFilename))
            {
                UndoQueue undoQueue = _undoDataDict[behaviorFilename];
                undoQueue.Clear();

                _undoDataDict.Remove(behaviorFilename);
            }
        }
Beispiel #29
0
 public override void Visit(AccessColumnNode node)
 {
     Nodes.Push(new AccessColumnNode(NamingHelper.ToColumnName(node.Alias, node.Name), string.Empty,
                                     node.ReturnType, TextSpan.Empty));
 }
        protected void Pipe_ServerPush(PipeConnection connection, int length)
        {
            try
            {
                var msg = PushMessageBase.Parser.ParseFrom(connection.Buffer, 0, length);
                switch (msg.Type)
                {
                case PushMessageID.UpdateUser:
                    UserInfo = msg.DataUser;
                    break;

                case PushMessageID.UpdateTunnel:
                    Dispatcher.Invoke(() =>
                    {
                        foreach (var t in Tunnels)
                        {
                            if (t.Id == msg.DataTunnel.Id)
                            {
                                t.Proto = msg.DataTunnel;
                                t.SetNodeName(Nodes.ToDictionary(k => k.Id, v => v.Name));
                                break;
                            }
                        }
                    });
                    break;

                case PushMessageID.UpdateTunnels:
                    LoadTunnels(msg.DataTunnels);
                    break;

                case PushMessageID.UpdateNodes:
                    Dispatcher.Invoke(() =>
                    {
                        Nodes.Clear();
                        var map = new Dictionary <int, string>();
                        foreach (var n in msg.DataNodes.Nodes)
                        {
                            Nodes.Add(new NodeModel(n));
                            map.Add(n.Id, n.Name);
                        }
                        foreach (var t in Tunnels)
                        {
                            t.SetNodeName(map);
                        }
                    });
                    break;

                case PushMessageID.AppendLog:
                    Dispatcher.Invoke(() =>
                    {
                        foreach (var l in msg.DataLog.Data)
                        {
                            Log(l);
                        }
                    });
                    break;

                case PushMessageID.PushUpdate:
                    Update = msg.DataUpdate;
                    break;

                case PushMessageID.PushConfig:
                    Config = msg.DataConfig;
                    break;
                }
            }
            catch { }
        }
Beispiel #31
0
 public void InsertBaseNode(int index, BaseNode node)
 {
     Nodes.Insert(index, node);
     ProcessMode(node);
 }
Beispiel #32
0
 public Node GetNode(int id)
 {
     return(Nodes.FirstOrDefault(x => x.NodeId == id));
 }
Beispiel #33
0
 public ScriptNode Add(ScriptNode node)
 {
     Nodes.Add(node);
     return(node);
 }
Beispiel #34
0
 protected Tree(TreeNode treeNode, IGitUICommandsSource uiCommands)
 {
     Nodes             = new Nodes(this);
     _uiCommandsSource = uiCommands;
     TreeViewNode      = treeNode;
 }
Beispiel #35
0
 //-----------------------------------------------------------------------------
 public void Init(CResultatRequeteRechercheObjet resultat)
 {
     m_resultat = resultat;
     Nodes.Clear();
     FillNodes(Nodes, resultat.ArbreResultats);
 }
        private void PulseMakerRunStarted()
        {
            var nodesToUpdate = Nodes.Where(n => n.CanUpdatePeriodically);

            MarkNodesAsModifiedAndRequestRun(nodesToUpdate, true);
        }
Beispiel #37
0
 public void RemoveNode(NodeInfo node)
 {
     Nodes.Remove(node);
     node.OnClosed  -= OnClosed;
     node.OnMessage -= OnMessage;
 }
Beispiel #38
0
 public void AddNode(NodeInfo node)
 {
     Nodes.Add(node);
     node.OnClosed  += OnClosed;
     node.OnMessage += OnMessage;
 }
Beispiel #39
0
 public OutputNode GetOutputNode()
 {
     return((OutputNode)(Nodes.FirstOrDefault(x => x is OutputNode)));
 }
        public int WriteDotFile()
        {
            List <HasseNode> Nodes;

            if (subset != null)
            {
                Nodes = subset;
            }
            else
            {
                Nodes = NodeCollection.Values.ToList();
            }

            /*
             * Nodes = new List<HasseNode> ();
             * foreach (HasseNode N in NodeCollection.Values )
             * {
             *  if (N.KeyString.Equals ("discrimination" ) ){
             *      N.GetThisAndAllAbove(Nodes,0);
             *  }
             * }
             */
            List <HasseNode> Nodes2 = new List <HasseNode>(Nodes);

            Nodes.Clear();
            foreach (HasseNode N in Nodes2)
            {
                if (N.LevelFromRoot <= FilterMaxLevelFromRoot)
                {
                    Nodes.Add(N);
                }
            }

            //Nodes.Sort(); // compare is on key strings

            OpenFile(FilenameAndPath);
            System.IO.StreamWriter LogFile = new System.IO.StreamWriter(@"C:\Users\ssampath\Documents\HasseDiagramOutput\log.txt", false);
            int EdgeCount = 0;
            int VisitCode = new System.Random().Next();

            foreach (HasseNode Node in Nodes)
            {
                LogFile.WriteLine(Node.LabelText + "\t" + Node.KeyString);
                WriteNode(Node);
            }


            foreach (HasseNode Node in Nodes)
            {
                foreach (HasseEdge E in Node.EdgesToCovered)
                {
                    if (!E.IsVisited(VisitCode)) // avoid duplication
                    {
                        WriteEdge(E);
                        E.Visit(VisitCode);
                        EdgeCount++;
                    }
                }
            }
            CloseFile();
            LogFile.Close();
            return(EdgeCount);
        }
Beispiel #41
0
 public ReceivedTreeNode(TreeNode[] subNode)
 {
     Text = CultureService.Instance.GetString(CultureText.node_Received_Text);
     Nodes.AddRange(subNode);
     SelectedImageKey = ImageKey = @"arrow_down";
 }
Beispiel #42
0
 public void Update(int i, int value)
 {
     Nodes.Remove(i);
     Values[i] = value;
     Nodes.Add(i);
 }
Beispiel #43
0
 public DuoNodes(Nodes v1, Nodes v2)
 {
     Val1 = v1;
     Val2 = v2;
 }
Beispiel #44
0
        public void Read(Stream iStream, BXML_TYPE iType)
        {
            if (iType == BXML_TYPE.BXML_PLAIN)
            {
                Signature = new byte[8] {
                    (byte)'L', (byte)'M', (byte)'X', (byte)'B', (byte)'O', (byte)'S', (byte)'L', (byte)'B'
                };
                Version            = 3;
                FileSize           = 85;
                Padding            = new byte[64];
                Unknown            = true;
                OriginalPathLength = 0;

                // NOTE: keep whitespace text nodes (to be compliant with the whitespace TEXT_NODES in bns xml)
                // no we don't keep them, we remove them because it is cleaner
                Nodes.PreserveWhitespace = Keep_XML_WhiteSpace;
                Nodes.Load(iStream);

                // get original path from first comment node
                //fixed 18-08
                XmlNode node = null;
                try
                {
                    node = Nodes.DocumentElement.ChildNodes.OfType <XmlComment>().First();
                }
                catch
                {
                }
                finally
                {
                    if (node != null && node.NodeType == XmlNodeType.Comment)
                    {
                        string Text = node.InnerText;
                        OriginalPathLength = Text.Length;
                        OriginalPath       = Encoding.Unicode.GetBytes(Text);
                        Xor(OriginalPath, 2 * OriginalPathLength);
                        if (Nodes.PreserveWhitespace && node.NextSibling.NodeType == XmlNodeType.Whitespace)
                        {
                            Nodes.DocumentElement.RemoveChild(node.NextSibling);
                        }
                    }
                    else
                    {
                        OriginalPath = new byte[2 * OriginalPathLength];
                    }
                }
            }

            if (iType == BXML_TYPE.BXML_BINARY)
            {
                Signature = new byte[8];
                BinaryReader br = new BinaryReader(iStream);
                br.BaseStream.Position = 0;
                Signature          = br.ReadBytes(8);
                Version            = br.ReadInt32();
                FileSize           = br.ReadInt32();
                Padding            = br.ReadBytes(64);
                Unknown            = br.ReadByte() == 1;
                OriginalPathLength = br.ReadInt32();
                OriginalPath       = br.ReadBytes(2 * OriginalPathLength);
                AutoID             = 1;
                ReadNode(iStream);

                // add original path as first comment node
                byte[] Path = OriginalPath;
                Xor(Path, 2 * OriginalPathLength);
                XmlComment node = Nodes.CreateComment(Encoding.Unicode.GetString(Path));
                Nodes.DocumentElement.PrependChild(node);
                XmlNode docNode = Nodes.CreateXmlDeclaration("1.0", "utf-8", null);
                Nodes.PrependChild(docNode);
                if (FileSize != iStream.Position)
                {
                    throw new Exception(String.Format("Filesize Mismatch, expected size was {0} while actual size was {1}.", FileSize, iStream.Position));
                }
            }
        }
Beispiel #45
0
 protected Node(Tree tree)
 {
     Nodes = new Nodes(tree);
 }
Beispiel #46
0
        private void ReadNode(Stream iStream, XmlNode parent = null)
        {
            XmlNode      node = null;
            BinaryReader br   = new BinaryReader(iStream);
            int          Type = 1;

            if (parent != null)
            {
                Type = br.ReadInt32();
            }


            if (Type == 1)
            {
                node = Nodes.CreateElement("Text");

                int ParameterCount = br.ReadInt32();
                for (int i = 0; i < ParameterCount; i++)
                {
                    int    NameLength = br.ReadInt32();
                    byte[] Name       = br.ReadBytes(2 * NameLength);
                    Xor(Name, 2 * NameLength);

                    int    ValueLength = br.ReadInt32();
                    byte[] Value       = br.ReadBytes(2 * ValueLength);
                    Xor(Value, 2 * ValueLength);

                    ((XmlElement)node).SetAttribute(Encoding.Unicode.GetString(Name), Encoding.Unicode.GetString(Value));
                }
            }

            if (Type == 2)
            {
                node = Nodes.CreateTextNode("");

                int    TextLength = br.ReadInt32();
                byte[] Text       = br.ReadBytes(TextLength * 2);
                Xor(Text, 2 * TextLength);

                ((XmlText)node).Value = Encoding.Unicode.GetString(Text);
            }

            if (Type > 2)
            {
                throw new Exception("Unknown XML Node Type");
            }

            bool Closed    = br.ReadByte() == 1;
            int  TagLength = br.ReadInt32();

            byte[] Tag = br.ReadBytes(2 * TagLength);
            Xor(Tag, 2 * TagLength);
            if (Type == 1)
            {
                node = RenameNode(node, Encoding.Unicode.GetString(Tag));
            }

            int ChildCount = br.ReadInt32();

            AutoID = br.ReadInt32();
            AutoID++;

            for (int i = 0; i < ChildCount; i++)
            {
                ReadNode(iStream, node);
            }

            if (parent != null)
            {
                if (Keep_XML_WhiteSpace || Type != 2 || !String.IsNullOrWhiteSpace(node.Value))
                {
                    parent.AppendChild(node);
                }
            }
            else
            {
                Nodes.AppendChild(node);
            }
        }
Beispiel #47
0
        public IList <ScriptNode> MergeWith(Script script, float x, float y)
        {
            var nodeMap  = new Dictionary <int, int>();
            var groupMap = new Dictionary <int, int>();
            var newNodes = new List <ScriptNode>();

            foreach (var group in script.Groups)
            {
                var newGroup = group.CloneNew();
                Groups.Add(newGroup);
                groupMap[group.Id] = newGroup.Id;
            }

            foreach (var node in script.Nodes)
            {
                var newNode = node.CloneNew();
                if (newNode.GroupId != 0)
                {
                    newNode.GroupId = groupMap[newNode.GroupId];
                }
                newNodes.Add(newNode);
                Nodes.Add(newNode);
                nodeMap[node.Id] = newNode.Id;
            }

            foreach (var newNode in newNodes)
            {
                foreach (var pin in newNode.InputPins)
                {
                    if (pin.Connection != null)
                    {
                        pin.Connection = new Connection(nodeMap[pin.Connection.NodeId], pin.Connection.PinId);
                    }
                }
                foreach (var pin in newNode.ExitPins)
                {
                    if (pin.Connection != null)
                    {
                        pin.Connection = new Connection(nodeMap[pin.Connection.NodeId], pin.Connection.PinId);
                    }
                }
            }

            // Transfer layout where it's known
            var nodesWithoutLayout = new HashSet <int>(newNodes.Select(_ => _.Id));

            if (script.Layout != null && script.Layout.Nodes.Count > 0)
            {
                Layout = Layout ?? new ScriptLayout();
                var left = script.Layout.Nodes.Select(_ => _.X).Min();
                var top  = script.Layout.Nodes.Select(_ => _.Y).Min();
                foreach (var scriptNodeLayout in script.Layout.Nodes)
                {
                    var layout = scriptNodeLayout.Clone();
                    int targetNodeId;
                    if (nodeMap.TryGetValue(layout.NodeId, out targetNodeId))
                    {
                        layout.NodeId = targetNodeId;
                        layout.X     += x - left;
                        layout.Y     += y - top;
                        Layout.Nodes.Add(layout);
                        nodesWithoutLayout.Remove(layout.NodeId);
                    }
                }
            }
            // Now process the rest of the nodes
            {
                foreach (var i in nodesWithoutLayout)
                {
                    var layout = new ScriptNodeLayout();
                    layout.NodeId = i;
                    layout.X     += x;
                    layout.Y     += y;
                    x            += 10;
                    Layout.Nodes.Add(layout);
                }
            }

            return(newNodes);
        }
Beispiel #48
0
        /// <summary>
        /// Deploys an execution into the cluster.
        /// </summary>
        /// <param name="assemblyName">The full name of the assembly.</param>
        /// <param name="typeName">The full name of the type.</param>
        /// <param name="methodName">The full name of the method.</param>
        /// <param name="param">the serialized parameter object.</param>
        /// <param name="contextid">The context id of this execution.</param>
        /// <param name="domainKey">The domain Key of this domain.</param>
        public void Execute(string assemblyName, string typeName, string methodName, byte[] param, string contextid, string domainKey)
        {
            ExecutionContext context = new ExecutionContext(assemblyName, typeName, methodName, param, contextid, domainKey);

            Nodes.BestNode(domainKey).Execute(context);
        }
Beispiel #49
0
        /// <summary>
        /// Add the children nodes of a particular node in the tree.
        /// While adding nodes if a match is found for objToSelect then nodeRepresentingCurrentChoice assigned to it
        /// and is returned. Otherwise if no node in the tree matches objToSelect this method returns null.
        /// </summary>
        public virtual LabelNode AddChildrenAndLookForSelected(ICmObject objToSelect,
                                                               Stack <ICmObject> ownershipStack, IEnumerable <ICmObject> chosenObjs)
        {
            LabelNode nodeRepresentingCurrentChoice = null;
            // JohnT: if this.Nodes[0] is not a LabelNode, it is a dummy node we added so that
            // its parent LOOKS like something we can expand. That is the usual case for a node
            // we can expand. Therefore finding one of those, or finding more or less than one
            // node, is evidence that we haven't previously computed the real children of this,
            // and should do so.
            bool fExpanded = Nodes.Count != 1 || (Nodes[0] as LabelNode) != null;

            if (!fExpanded)
            {
                Nodes.Clear();
                nodeRepresentingCurrentChoice = AddSecondaryNodesAndLookForSelected(this,
                                                                                    Nodes, nodeRepresentingCurrentChoice, objToSelect, ownershipStack, chosenObjs);
                foreach (ObjectLabel label in ((ObjectLabel)Tag).SubItems)
                {
                    if (!WantNodeForLabel(label))
                    {
                        continue;
                    }
                    LabelNode node = Create(label, m_stylesheet, m_displayUsage);
                    if (chosenObjs != null)
                    {
                        node.Checked = chosenObjs.Contains(label.Object);
                    }
                    Nodes.Add(node);
                    nodeRepresentingCurrentChoice = CheckForSelection(label, objToSelect,
                                                                      node, nodeRepresentingCurrentChoice);
                    nodeRepresentingCurrentChoice = AddSecondaryNodesAndLookForSelected(
                        node, node.Nodes, nodeRepresentingCurrentChoice, objToSelect,
                        ownershipStack, chosenObjs);
                }
            }
            else
            {
                // Even if we don't have to create children for this, we need to search the
                // children for matches, and perhaps expand some of them.
                foreach (LabelNode node in Nodes)
                {
                    nodeRepresentingCurrentChoice = CheckForSelection(node.Label,
                                                                      objToSelect, node, nodeRepresentingCurrentChoice);
                }
            }
            if (nodeRepresentingCurrentChoice == null)
            {
                foreach (LabelNode node in Nodes)
                {
                    if (ownershipStack.Contains(node.Label.Object))
                    {
                        nodeRepresentingCurrentChoice = node.AddChildrenAndLookForSelected(
                            objToSelect, ownershipStack, chosenObjs);
                        return(nodeRepresentingCurrentChoice);
                    }
                }
            }
            else
            {
                Expand();
                nodeRepresentingCurrentChoice.EnsureVisible();
            }
            return(nodeRepresentingCurrentChoice);
        }
Beispiel #50
0
 /// <summary>
 /// Send a message to the node with the specified ID.
 /// </summary>
 /// <param name="nodeID">The node ID of the node to send the message to.</param>
 /// <param name="message">The message to be sent.</param>
 /// <param name="domainKey"> The Key of the domain to deliver the message to.</param>
 public void SendMessage(string nodeID, string message, string domainKey)
 {
     Nodes.SendMessage(nodeID, message, domainKey);
 }
Beispiel #51
0
 /// <summary>
 /// Retrieve a particular node by its node id.
 /// </summary>
 /// <param name="id">The string id of the node.</param>
 /// <returns>The node with the specified id or null.</returns>
 public ClusterNode GetNodeByID(string id)
 {
     return(Nodes.GetNodeByID(id));
 }
Beispiel #52
0
        /// <summary>
        /// 产生一个WorkNode
        /// </summary>
        /// <param name="fk_flow">流程编号</param>
        /// <param name="fk_node">节点ID</param>
        /// <param name="workID">工作ID</param>
        /// <param name="fid">FID</param>
        /// <param name="userNo">用户编号</param>
        /// <returns>返回dataset</returns>
        public static DataSet GenerWorkNode(string fk_flow, int fk_node, Int64 workID, Int64 fid, string userNo, string fromWorkOpt = "0")
        {
            //节点.
            if (fk_node == 0)
            {
                fk_node = int.Parse(fk_flow + "01");
            }

            if (workID == 0)
            {
                workID = BP.WF.Dev2Interface.Node_CreateBlankWork(fk_flow, null, null, userNo, null);
            }

            Node nd = new Node(fk_node);

            try
            {
                nd.WorkID = workID; //为获取表单ID提供参数.
                MapData md = new MapData();
                md.No = nd.NodeFrmID;
                if (md.RetrieveFromDBSources() == 0)
                {
                    throw new Exception("装载错误,该表单ID=" + md.No + "丢失,请修复一次流程重新加载一次.");
                }

                Work wk = nd.HisWork;
                wk.OID = workID;

                wk.RetrieveFromDBSources();
                wk.ResetDefaultVal();

                // 第1.2: 调用,处理用户定义的业务逻辑.
                string sendWhen = nd.HisFlow.DoFlowEventEntity(EventListOfNode.FrmLoadBefore, nd,
                                                               wk, null);

                //获得表单模版.
                DataSet myds = BP.Sys.CCFormAPI.GenerHisDataSet(md.No, nd.Name);

                //移除MapAttr
                myds.Tables.Remove("Sys_MapAttr"); //移除.

                //获取表单的mapAttr
                //求出集合.
                MapAttrs mattrs = new MapAttrs(md.No);
                if (fk_node != null)
                {
                    /*处理表单权限控制方案*/
                    FrmNode frmNode = new FrmNode();
                    int     count   = frmNode.Retrieve(FrmNodeAttr.FK_Frm, md.No, FrmNodeAttr.FK_Node, fk_node);
                    if (count != 0 && frmNode.FrmSln != 0)
                    {
                        FrmFields fls = new FrmFields(md.No, frmNode.FK_Node);
                        foreach (FrmField item in fls)
                        {
                            foreach (MapAttr attr in mattrs)
                            {
                                if (attr.KeyOfEn != item.KeyOfEn)
                                {
                                    continue;
                                }

                                if (item.IsSigan)
                                {
                                    item.UIIsEnable = false;
                                }

                                attr.UIIsEnable = item.UIIsEnable;
                                attr.UIVisible  = item.UIVisible;
                                attr.IsSigan    = item.IsSigan;
                                attr.DefValReal = item.DefVal;
                            }
                        }
                    }
                }

                DataTable Sys_MapAttr = mattrs.ToDataTableField("Sys_MapAttr");
                myds.Tables.Add(Sys_MapAttr);

                //把流程信息表发送过去.
                GenerWorkFlow gwf = new GenerWorkFlow();
                gwf.WorkID = workID;
                gwf.RetrieveFromDBSources();

                //加入WF_Node.
                DataTable WF_Node = nd.ToDataTableField("WF_Node");
                myds.Tables.Add(WF_Node);

                #region 加入组件的状态信息, 在解析表单的时候使用.
                BP.WF.Template.FrmNodeComponent fnc = new FrmNodeComponent(nd.NodeID);

                nd.WorkID = workID; //为获取表单ID提供参数.
                if (nd.NodeFrmID != "ND" + nd.NodeID && nd.HisFormType != NodeFormType.RefOneFrmTree)
                {
                    /*说明这是引用到了其他节点的表单,就需要把一些位置元素修改掉.*/
                    int refNodeID = int.Parse(nd.NodeFrmID.Replace("ND", ""));

                    BP.WF.Template.FrmNodeComponent refFnc = new FrmNodeComponent(refNodeID);

                    fnc.SetValByKey(FrmWorkCheckAttr.FWC_H, refFnc.GetValFloatByKey(FrmWorkCheckAttr.FWC_H));
                    fnc.SetValByKey(FrmWorkCheckAttr.FWC_W, refFnc.GetValFloatByKey(FrmWorkCheckAttr.FWC_W));
                    fnc.SetValByKey(FrmWorkCheckAttr.FWC_X, refFnc.GetValFloatByKey(FrmWorkCheckAttr.FWC_X));
                    fnc.SetValByKey(FrmWorkCheckAttr.FWC_Y, refFnc.GetValFloatByKey(FrmWorkCheckAttr.FWC_Y));

                    if (fnc.GetValFloatByKey(FrmWorkCheckAttr.FWC_H) <= 10)
                    {
                        fnc.SetValByKey(FrmWorkCheckAttr.FWC_H, 500);
                    }

                    if (fnc.GetValFloatByKey(FrmWorkCheckAttr.FWC_W) <= 10)
                    {
                        fnc.SetValByKey(FrmWorkCheckAttr.FWC_W, 600);
                    }

                    if (fnc.GetValFloatByKey(FrmWorkCheckAttr.FWC_X) <= 10)
                    {
                        fnc.SetValByKey(FrmWorkCheckAttr.FWC_X, 200);
                    }

                    if (fnc.GetValFloatByKey(FrmWorkCheckAttr.FWC_Y) <= 10)
                    {
                        fnc.SetValByKey(FrmWorkCheckAttr.FWC_Y, 200);
                    }


                    fnc.SetValByKey(FrmSubFlowAttr.SF_H, refFnc.GetValFloatByKey(FrmSubFlowAttr.SF_H));
                    fnc.SetValByKey(FrmSubFlowAttr.SF_W, refFnc.GetValFloatByKey(FrmSubFlowAttr.SF_W));
                    fnc.SetValByKey(FrmSubFlowAttr.SF_X, refFnc.GetValFloatByKey(FrmSubFlowAttr.SF_X));
                    fnc.SetValByKey(FrmSubFlowAttr.SF_Y, refFnc.GetValFloatByKey(FrmSubFlowAttr.SF_Y));

                    fnc.SetValByKey(FrmThreadAttr.FrmThread_H, refFnc.GetValFloatByKey(FrmThreadAttr.FrmThread_H));
                    fnc.SetValByKey(FrmThreadAttr.FrmThread_W, refFnc.GetValFloatByKey(FrmThreadAttr.FrmThread_W));
                    fnc.SetValByKey(FrmThreadAttr.FrmThread_X, refFnc.GetValFloatByKey(FrmThreadAttr.FrmThread_X));
                    fnc.SetValByKey(FrmThreadAttr.FrmThread_Y, refFnc.GetValFloatByKey(FrmThreadAttr.FrmThread_Y));

                    fnc.SetValByKey(FrmTrackAttr.FrmTrack_H, refFnc.GetValFloatByKey(FrmTrackAttr.FrmTrack_H));
                    fnc.SetValByKey(FrmTrackAttr.FrmTrack_W, refFnc.GetValFloatByKey(FrmTrackAttr.FrmTrack_W));
                    fnc.SetValByKey(FrmTrackAttr.FrmTrack_X, refFnc.GetValFloatByKey(FrmTrackAttr.FrmTrack_X));
                    fnc.SetValByKey(FrmTrackAttr.FrmTrack_Y, refFnc.GetValFloatByKey(FrmTrackAttr.FrmTrack_Y));

                    fnc.SetValByKey(FTCAttr.FTC_H, refFnc.GetValFloatByKey(FTCAttr.FTC_H));
                    fnc.SetValByKey(FTCAttr.FTC_W, refFnc.GetValFloatByKey(FTCAttr.FTC_W));
                    fnc.SetValByKey(FTCAttr.FTC_X, refFnc.GetValFloatByKey(FTCAttr.FTC_X));
                    fnc.SetValByKey(FTCAttr.FTC_Y, refFnc.GetValFloatByKey(FTCAttr.FTC_Y));

                    #region 没有审核组件分组就增加上审核组件分组. @杜需要翻译&测试.
                    if (md.HisFrmType == FrmType.FoolForm)
                    {
                        //判断是否是傻瓜表单,如果是,就要判断该傻瓜表单是否有审核组件groupfield ,没有的话就增加上.
                        DataTable gf     = myds.Tables["Sys_GroupField"];
                        bool      isHave = false;
                        foreach (DataRow dr in gf.Rows)
                        {
                            string cType = dr["CtrlType"] as string;
                            if (cType == null)
                            {
                                continue;
                            }

                            if (cType.Equals("FWC") == true)
                            {
                                isHave = true;
                            }
                        }

                        if (isHave == false)
                        {
                            DataRow dr = gf.NewRow();

                            nd.WorkID = workID; //为获取表单ID提供参数.
                            dr[GroupFieldAttr.OID]      = 100;
                            dr[GroupFieldAttr.FrmID]    = nd.NodeFrmID;
                            dr[GroupFieldAttr.CtrlType] = "FWC";
                            dr[GroupFieldAttr.CtrlID]   = "FWCND" + nd.NodeID;
                            dr[GroupFieldAttr.Idx]      = 100;
                            dr[GroupFieldAttr.Lab]      = "审核信息";
                            gf.Rows.Add(dr);

                            myds.Tables.Remove("Sys_GroupField");
                            myds.Tables.Add(gf);

                            //执行更新,就自动生成那个丢失的字段分组.
                            refFnc.Update();

                            /*
                             * //丢失了就插入新的.
                             * BP.Sys.GroupField gfEn = new GroupField();
                             * gfEn.FrmID = nd.NodeFrmID;
                             * gfEn.CtrlType = "FWC";
                             * gfEn.CtrlID = "FWCND" + nd.NodeID;
                             * gfEn.Idx = 100;
                             * gfEn.Lab = "审核信息";
                             * gfEn.Insert(); */
                        }
                    }
                    #endregion 没有审核组件分组就增加上审核组件分组.
                }

                #region 没有审核组件分组就增加上审核组件分组. @杜需要翻译&测试.
                if (nd.NodeFrmID == "ND" + nd.NodeID && nd.HisFormType != NodeFormType.RefOneFrmTree)
                {
                    //   Work wk1 = nd.HisWork;

                    if (nd.FormType == NodeFormType.FoolForm)
                    {
                        //判断是否是傻瓜表单,如果是,就要判断该傻瓜表单是否有审核组件groupfield ,没有的话就增加上.
                        DataTable gf     = myds.Tables["Sys_GroupField"];
                        bool      isHave = false;
                        foreach (DataRow dr in gf.Rows)
                        {
                            string cType = dr["CtrlType"] as string;
                            if (cType == null)
                            {
                                continue;
                            }

                            if (cType.Equals("FWC") == true)
                            {
                                isHave = true;
                            }
                        }

                        if (isHave == false)
                        {
                            DataRow dr = gf.NewRow();

                            nd.WorkID = workID; //为获取表单ID提供参数.
                            dr[GroupFieldAttr.OID]      = 100;
                            dr[GroupFieldAttr.FrmID]    = nd.NodeFrmID;
                            dr[GroupFieldAttr.CtrlType] = "FWC";
                            dr[GroupFieldAttr.CtrlID]   = "FWCND" + nd.NodeID;
                            dr[GroupFieldAttr.Idx]      = 100;
                            dr[GroupFieldAttr.Lab]      = "审核信息";
                            gf.Rows.Add(dr);

                            myds.Tables.Remove("Sys_GroupField");
                            myds.Tables.Add(gf);

                            //更新,为了让其自动增加审核分组.
                            BP.WF.Template.FrmNodeComponent refFnc = new FrmNodeComponent(nd.NodeID);
                            refFnc.Update();
                        }
                    }
                }
                #endregion 没有审核组件分组就增加上审核组件分组.

                myds.Tables.Add(fnc.ToDataTableField("WF_FrmNodeComponent"));

                #endregion 加入组件的状态信息, 在解析表单的时候使用.

                #region 增加 groupfields
                if (nd.FormType == NodeFormType.FoolTruck && nd.IsStartNode == false &&
                    DataType.IsNullOrEmpty(wk.HisPassedFrmIDs) == false)
                {
                    #region 处理字段分组排序.
                    //查询所有的分组, 如果是查看表单的方式,就不应该把当前的表单显示出来.
                    string myFrmIDs = "";
                    if (fromWorkOpt.Equals("1") == true)
                    {
                        if (gwf.WFState == WFState.Complete)
                        {
                            myFrmIDs = wk.HisPassedFrmIDs + ",'ND" + fk_node + "'";
                        }
                        else
                        {
                            myFrmIDs = wk.HisPassedFrmIDs; //流程未完成并且是查看表单的情况.
                        }
                    }
                    else
                    {
                        myFrmIDs = wk.HisPassedFrmIDs + ",'ND" + fk_node + "'";
                    }

                    GroupFields gfs = new GroupFields();
                    gfs.RetrieveIn(GroupFieldAttr.FrmID, "(" + myFrmIDs + ")");

                    //按照时间的顺序查找出来 ids .
                    string sqlOrder = "SELECT OID FROM  Sys_GroupField WHERE   FrmID IN (" + myFrmIDs + ")";
                    if (BP.Sys.SystemConfig.AppCenterDBType == DBType.Oracle)
                    {
                        myFrmIDs  = myFrmIDs.Replace("'", "");
                        sqlOrder += " ORDER BY INSTR('" + myFrmIDs + "',FrmID) , Idx";
                    }

                    if (BP.Sys.SystemConfig.AppCenterDBType == DBType.MSSQL)
                    {
                        myFrmIDs  = myFrmIDs.Replace("'", "");
                        sqlOrder += " ORDER BY CHARINDEX(FrmID, '" + myFrmIDs + "'), Idx";
                    }

                    if (BP.Sys.SystemConfig.AppCenterDBType == DBType.MySQL)
                    {
                        myFrmIDs  = myFrmIDs.Replace("'", "");
                        sqlOrder += " ORDER BY INSTR('" + myFrmIDs + "', FrmID ), Idx";
                    }
                    DataTable dtOrder = DBAccess.RunSQLReturnTable(sqlOrder);

                    //创建容器,把排序的分组放入这个容器.
                    GroupFields gfsNew = new GroupFields();

                    //遍历查询出来的分组.
                    foreach (DataRow dr in dtOrder.Rows)
                    {
                        string pkOID = dr[0].ToString();
                        var    mygf  = gfs.GetEntityByKey(pkOID);
                        gfsNew.AddEntity(mygf); //把分组字段加入里面去.
                    }

                    DataTable dtGF = gfsNew.ToDataTableField("Sys_GroupField");
                    myds.Tables.Remove("Sys_GroupField");
                    myds.Tables.Add(dtGF);
                    #endregion 处理字段分组排序.

                    #region 处理 mapattrs
                    //求当前表单的字段集合.
                    MapAttrs    attrs = new MapAttrs();
                    QueryObject qo    = new QueryObject(attrs);
                    qo.AddWhere(MapAttrAttr.FK_MapData, "ND" + nd.NodeID);
                    qo.addOrderBy(MapAttrAttr.Idx);
                    qo.DoQuery();

                    //计算累加的字段集合.
                    MapAttrs attrsLeiJia = new MapAttrs();
                    qo = new QueryObject(attrsLeiJia);
                    qo.AddWhere(MapAttrAttr.FK_MapData, " IN ", "(" + wk.HisPassedFrmIDs + ")");
                    qo.addOrderBy(MapAttrAttr.Idx);
                    qo.DoQuery();

                    //把两个集合接起来.
                    foreach (MapAttr item in attrsLeiJia)
                    {
                        item.UIIsEnable = false; //设置为只读的.
                        attrs.AddEntity(item);
                    }

                    //替换掉现有的.
                    myds.Tables.Remove("Sys_MapAttr");                      //移除.
                    myds.Tables.Add(attrs.ToDataTableField("Sys_MapAttr")); //增加.
                    #endregion 处理mapattrs

                    #region 把枚举放入里面去.
                    myds.Tables.Remove("Sys_Enum");

                    myFrmIDs = wk.HisPassedFrmIDs + ",'ND" + fk_node + "'";
                    SysEnums enums = new SysEnums();
                    enums.RetrieveInSQL(SysEnumAttr.EnumKey,
                                        "SELECT UIBindKey FROM Sys_MapAttr WHERE FK_MapData in(" + myFrmIDs + ")");

                    // 加入最新的枚举.
                    myds.Tables.Add(enums.ToDataTableField("Sys_Enum"));
                    #endregion 把枚举放入里面去.

                    #region  MapExt .
                    myds.Tables.Remove("Sys_MapExt");

                    // 把扩展放入里面去.
                    myFrmIDs = wk.HisPassedFrmIDs + ",'ND" + fk_node + "'";
                    BP.Sys.MapExts exts = new MapExts();
                    qo = new QueryObject(exts);
                    qo.AddWhere(MapExtAttr.FK_MapData, " IN ", "(" + myFrmIDs + ")");
                    qo.DoQuery();

                    // 加入最新的MapExt.
                    myds.Tables.Add(exts.ToDataTableField("Sys_MapExt"));
                    #endregion  MapExt .
                }
                #endregion 增加 groupfields

                #region 流程设置信息.
                if (nd.IsStartNode == false)
                {
                    BP.WF.Dev2Interface.Node_SetWorkRead(fk_node, workID);

                    // @杜.
                    if (gwf.TodoEmps.Contains(BP.Web.WebUser.Name + ";") == false)
                    {
                        gwf.TodoEmps += BP.Web.WebUser.No + "," + BP.Web.WebUser.Name;
                        gwf.Update();
                    }
                }

                //增加转向下拉框数据.
                if (nd.CondModel == CondModel.SendButtonSileSelect)
                {
                    if (nd.IsStartNode == true || gwf.TodoEmps.Contains(WebUser.No + ",") == true)
                    {
                        /*如果当前不是主持人,如果不是主持人,就不让他显示下拉框了.*/

                        /*如果当前节点,是可以显示下拉框的.*/
                        Nodes nds = nd.HisToNodes;

                        DataTable dtToNDs = new DataTable();
                        dtToNDs.TableName = "ToNodes";
                        dtToNDs.Columns.Add("No", typeof(string));           //节点ID.
                        dtToNDs.Columns.Add("Name", typeof(string));         //到达的节点名称.
                        dtToNDs.Columns.Add("IsSelectEmps", typeof(string)); //是否弹出选择人的对话框?
                        dtToNDs.Columns.Add("IsSelected", typeof(string));   //是否选择?

                        #region 增加到达延续子流程节点。
                        NodeYGFlows ygflows = new NodeYGFlows(fk_node.ToString());
                        if (ygflows.Count > 1 && SystemConfig.CustomerNo.Equals("CZBank") == true)
                        {
                            dtToNDs.Rows.Clear();  //为浙商银行做的特殊判断,如果配置了延续流程,就不让其走分支节点.
                        }
                        foreach (NodeYGFlow item in ygflows)
                        {
                            DataRow dr = dtToNDs.NewRow();
                            dr["No"]   = item.FK_Flow + "01";
                            dr["Name"] = "启动:" + item.FlowName;
                            //if (item.HisDeliveryWay == DeliveryWay.BySelected)
                            dr["IsSelectEmps"] = "1";
                            //else
                            //  dr["IsSelectEmps"] = "0";  //是不是,可以选择接受人.

                            //设置默认选择的节点.
                            //if (defalutSelectedNodeID == item.NodeID)
                            //    dr["IsSelected"] = "1";
                            //else
                            //    dr["IsSelected"] = "0";

                            dr["IsSelected"] = "0";
                            dtToNDs.Rows.Add(dr);
                        }
                        #endregion 增加到达延续子流程节点。

                        #region 到达其他节点.
                        //上一次选择的节点.
                        int defalutSelectedNodeID = 0;
                        if (nds.Count > 1)
                        {
                            string mysql = "";
                            // 找出来上次发送选择的节点.
                            if (SystemConfig.AppCenterDBType == DBType.MSSQL)
                            {
                                mysql = "SELECT  top 1 NDTo FROM ND" + int.Parse(nd.FK_Flow) + "Track A WHERE A.NDFrom=" + fk_node + " AND ActionType=1 ORDER BY WorkID DESC";
                            }
                            else if (SystemConfig.AppCenterDBType == DBType.Oracle)
                            {
                                mysql = "SELECT * FROM ( SELECT  NDTo FROM ND" + int.Parse(nd.FK_Flow) + "Track A WHERE A.NDFrom=" + fk_node + " AND ActionType=1 ORDER BY WorkID DESC ) WHERE ROWNUM =1";
                            }
                            else if (SystemConfig.AppCenterDBType == DBType.MySQL)
                            {
                                mysql = "SELECT  NDTo FROM ND" + int.Parse(nd.FK_Flow) + "Track A WHERE A.NDFrom=" + fk_node + " AND ActionType=1 ORDER BY WorkID  DESC limit 1,1";
                            }

                            //获得上一次发送到的节点.
                            defalutSelectedNodeID = DBAccess.RunSQLReturnValInt(mysql, 0);
                        }

                        #region 为天业集团做一个特殊的判断.
                        if (SystemConfig.CustomerNo == "TianYe" && nd.Name.Contains("董事长") == true)
                        {
                            /*如果是董事长节点, 如果是下一个节点默认的是备案. */
                            foreach (Node item in nds)
                            {
                                if (item.Name.Contains("备案") == true && item.Name.Contains("待") == false)
                                {
                                    defalutSelectedNodeID = item.NodeID;
                                    break;
                                }
                            }
                        }
                        #endregion 为天业集团做一个特殊的判断.


                        foreach (Node item in nds)
                        {
                            DataRow dr = dtToNDs.NewRow();
                            dr["No"]   = item.NodeID;
                            dr["Name"] = item.Name;
                            //if (item.hissel

                            if (item.HisDeliveryWay == DeliveryWay.BySelected)
                            {
                                dr["IsSelectEmps"] = "1";
                            }
                            else
                            {
                                dr["IsSelectEmps"] = "0";  //是不是,可以选择接受人.
                            }
                            //设置默认选择的节点.
                            if (defalutSelectedNodeID == item.NodeID)
                            {
                                dr["IsSelected"] = "1";
                            }
                            else
                            {
                                dr["IsSelected"] = "0";
                            }

                            dtToNDs.Rows.Add(dr);
                        }
                        #endregion 到达其他节点。


                        //增加一个下拉框, 对方判断是否有这个数据.
                        myds.Tables.Add(dtToNDs);
                    }
                }

                // 节点数据.
                //string sql = "SELECT * FROM WF_Node WHERE NodeID=" + fk_node;
                //DataTable dt = BP.DA.DBAccess.RunSQLReturnTable(sql);
                //dt.TableName = "WF_NodeBar";
                //myds.Tables.Add(dt);

                //// 流程数据.
                //Flow fl = new Flow(fk_flow);
                //myds.Tables.Add(fl.ToDataTableField("WF_Flow"));
                #endregion 流程设置信息.

                #region 把主从表数据放入里面.
                //.工作数据放里面去, 放进去前执行一次装载前填充事件.

                //重设默认值.
                wk.ResetDefaultVal();

                //@樊雷伟 把这部分代码搬到jflow上去. CCFlowAPI. 114行出.
                if (BP.Sys.SystemConfig.IsBSsystem == true)
                {
                    // 处理传递过来的参数。
                    foreach (string k in System.Web.HttpContext.Current.Request.QueryString.AllKeys)
                    {
                        if (DataType.IsNullOrEmpty(k) == true)
                        {
                            continue;
                        }

                        wk.SetValByKey(k, System.Web.HttpContext.Current.Request.QueryString[k]);
                    }

                    // 处理传递过来的frm参数。
                    foreach (string k in System.Web.HttpContext.Current.Request.Form.AllKeys)
                    {
                        if (DataType.IsNullOrEmpty(k) == true)
                        {
                            continue;
                        }
                        wk.SetValByKey(k, System.Web.HttpContext.Current.Request.Form[k]);
                    }

                    //更新到数据库里.
                    wk.DirectUpdate();
                }

                // 执行表单事件..
                string msg = md.DoEvent(FrmEventList.FrmLoadBefore, wk);
                if (DataType.IsNullOrEmpty(msg) == false)
                {
                    throw new Exception("err@错误:" + msg);
                }

                // 执行FEE事件.
                string msgOfLoad = nd.HisFlow.DoFlowEventEntity(EventListOfNode.FrmLoadBefore, nd,
                                                                wk, null);
                if (msgOfLoad != null)
                {
                    wk.RetrieveFromDBSources();
                }

                //执行装载填充.
                MapExt me = new MapExt();
                if (me.Retrieve(MapExtAttr.ExtType, MapExtXmlList.PageLoadFull, MapExtAttr.FK_MapData, wk.NodeFrmID) == 1)
                {
                    //执行通用的装载方法.
                    MapAttrs attrs = new MapAttrs(wk.NodeFrmID);
                    MapDtls  dtls  = new MapDtls(wk.NodeFrmID);
                    wk = BP.WF.Glo.DealPageLoadFull(wk, me, attrs, dtls) as Work;
                }

                //如果是累加表单,就把整个rpt数据都放入里面去.
                if (nd.FormType == NodeFormType.FoolTruck && nd.IsStartNode == false &&
                    DataType.IsNullOrEmpty(wk.HisPassedFrmIDs) == false)
                {
                    GERpt rpt = new GERpt("ND" + int.Parse(nd.FK_Flow) + "Rpt", workID); // nd.HisFlow.HisGERpt;
                    rpt.ResetDefaultVal();

                    //rpt.Copy(wk); //加入后就出现了错误.

                    myds.Tables.Add(rpt.ToDataTableField("MainTable"));
                    // myds.WriteXml("C:\\XX.xml");
                }
                else
                {
                    DataTable mainTable = wk.ToDataTableField(md.No);
                    mainTable.TableName = "MainTable";
                    myds.Tables.Add(mainTable);
                }
                string    sql = "";
                DataTable dt  = null;
                #endregion

                #region 把外键表加入DataSet
                DataTable dtMapAttr = myds.Tables["Sys_MapAttr"];
                MapExts   mes       = md.MapExts;
                foreach (DataRow dr in dtMapAttr.Rows)
                {
                    string lgType    = dr["LGType"].ToString();
                    string uiBindKey = dr["UIBindKey"].ToString();

                    if (DataType.IsNullOrEmpty(uiBindKey) == true)
                    {
                        continue; //为空就continue.
                    }
                    if (lgType.Equals("1") == true)
                    {
                        continue; //枚举值就continue;
                    }
                    string uiIsEnable = dr["UIIsEnable"].ToString();
                    if (uiIsEnable.Equals("0") == true && lgType.Equals("1") == true)
                    {
                        continue; //如果是外键,并且是不可以编辑的状态.
                    }
                    if (uiIsEnable.Equals("1") == true && lgType.Equals("0") == true)
                    {
                        continue; //如果是外部数据源,并且是不可以编辑的状态.
                    }
                    // 检查是否有下拉框自动填充。
                    string keyOfEn    = dr["KeyOfEn"].ToString();
                    string fk_mapData = dr["FK_MapData"].ToString();


                    #region 处理下拉框数据范围. for 小杨.
                    me = mes.GetEntityByKey(MapExtAttr.ExtType, MapExtXmlList.AutoFullDLL, MapExtAttr.AttrOfOper, keyOfEn) as MapExt;
                    if (me != null)
                    {
                        string fullSQL = me.Doc.Clone() as string;
                        fullSQL = fullSQL.Replace("~", ",");
                        fullSQL = BP.WF.Glo.DealExp(fullSQL, wk, null);
                        dt      = DBAccess.RunSQLReturnTable(fullSQL);
                        //重构新表
                        DataTable dt_FK_Dll = new DataTable();
                        dt_FK_Dll.TableName = keyOfEn;//可能存在隐患,如果多个字段,绑定同一个表,就存在这样的问题.
                        dt_FK_Dll.Columns.Add("No", typeof(string));
                        dt_FK_Dll.Columns.Add("Name", typeof(string));
                        foreach (DataRow dllRow in dt.Rows)
                        {
                            DataRow drDll = dt_FK_Dll.NewRow();
                            drDll["No"]   = dllRow["No"];
                            drDll["Name"] = dllRow["Name"];
                            dt_FK_Dll.Rows.Add(drDll);
                        }
                        myds.Tables.Add(dt_FK_Dll);
                        continue;
                    }
                    #endregion 处理下拉框数据范围.

                    // 判断是否存在.
                    if (myds.Tables.Contains(uiBindKey) == true)
                    {
                        continue;
                    }

                    if (BP.Sys.PubClass.GetDataTableByUIBineKey(uiBindKey) != null)
                    {
                        myds.Tables.Add(BP.Sys.PubClass.GetDataTableByUIBineKey(uiBindKey));
                    }
                }
                #endregion End把外键表加入DataSet

                #region 处理流程-消息提示.
                DataTable dtAlert = new DataTable();
                dtAlert.TableName = "AlertMsg";

                dtAlert.Columns.Add("Title", typeof(string));
                dtAlert.Columns.Add("Msg", typeof(string));
                dtAlert.Columns.Add("URL", typeof(string));

                //  string msg = "";
                switch (gwf.WFState)
                {
                case WFState.AskForReplay:     // 返回加签的信息.
                    string mysql = "SELECT * FROM ND" + int.Parse(fk_flow) + "Track WHERE WorkID=" + workID + " AND " + TrackAttr.ActionType + "=" + (int)ActionType.ForwardAskfor;

                    DataTable mydt = BP.DA.DBAccess.RunSQLReturnTable(mysql);
                    foreach (DataRow dr in mydt.Rows)
                    {
                        string msgAskFor  = dr[TrackAttr.Msg].ToString();
                        string worker     = dr[TrackAttr.EmpFrom].ToString();
                        string workerName = dr[TrackAttr.EmpFromT].ToString();
                        string rdt        = dr[TrackAttr.RDT].ToString();

                        DataRow drMsg = dtAlert.NewRow();
                        drMsg["Title"] = worker + "," + workerName + "回复信息:";
                        drMsg["Msg"]   = DataType.ParseText2Html(msgAskFor) + "<br>" + rdt;
                        dtAlert.Rows.Add(drMsg);
                    }
                    break;

                case WFState.Askfor:     //加签.

                    sql = "SELECT * FROM ND" + int.Parse(fk_flow) + "Track WHERE WorkID=" + workID + " AND " + TrackAttr.ActionType + "=" + (int)ActionType.AskforHelp;
                    dt  = BP.DA.DBAccess.RunSQLReturnTable(sql);
                    foreach (DataRow dr in dt.Rows)
                    {
                        string msgAskFor  = dr[TrackAttr.Msg].ToString();
                        string worker     = dr[TrackAttr.EmpFrom].ToString();
                        string workerName = dr[TrackAttr.EmpFromT].ToString();
                        string rdt        = dr[TrackAttr.RDT].ToString();

                        DataRow drMsg = dtAlert.NewRow();
                        drMsg["Title"] = worker + "," + workerName + "请求加签:";
                        drMsg["Msg"]   = DataType.ParseText2Html(msgAskFor) + "<br>" + rdt + "<a href='./WorkOpt/AskForRe.htm?FK_Flow=" + fk_flow + "&FK_Node=" + fk_node + "&WorkID=" + workID + "&FID=" + fid + "' >回复加签意见</a> --";
                        dtAlert.Rows.Add(drMsg);

                        //提示信息.
                        // this.FlowMsg.AlertMsg_Info(worker + "," + workerName + "请求加签:",
                        //   DataType.ParseText2Html(msgAskFor) + "<br>" + rdt + " --<a href='./WorkOpt/AskForRe.aspx?FK_Flow=" + this.FK_Flow + "&FK_Node=" + this.FK_Node + "&WorkID=" + this.WorkID + "&FID=" + this.FID + "' >回复加签意见</a> --");
                    }
                    // isAskFor = true;
                    break;

                case WFState.ReturnSta:
                    /* 如果工作节点退回了*/
                    ReturnWorks rws = new ReturnWorks();
                    rws.Retrieve(ReturnWorkAttr.ReturnToNode, fk_node,
                                 ReturnWorkAttr.WorkID, workID,
                                 ReturnWorkAttr.RDT);

                    if (rws.Count != 0)
                    {
                        //string msgInfo = "";
                        //foreach (BP.WF.ReturnWork rw in rws)
                        //{
                        //    DataRow drMsg = dtAlert.NewRow();
                        //    //drMsg["Title"] = "来自节点:" + rw.ReturnNodeName + " 退回人:" + rw.ReturnerName + "  " + rw.RDT + "&nbsp;<a href='/DataUser/ReturnLog/" + fk_flow + "/" + rw.MyPK + ".htm' target=_blank>工作日志</a>";
                        //    drMsg["Title"] = "来自节点:" + rw.ReturnNodeName + " 退回人:" + rw.ReturnerName + "  " + rw.RDT;
                        //    drMsg["Msg"] = rw.BeiZhuHtml;
                        //    dtAlert.Rows.Add(drMsg);
                        //}

                        string msgInfo = "";
                        foreach (BP.WF.ReturnWork rw in rws)
                        {
                            //drMsg["Title"] = "来自节点:" + rw.ReturnNodeName + " 退回人:" + rw.ReturnerName + "  " + rw.RDT + "&nbsp;<a href='/DataUser/ReturnLog/" + fk_flow + "/" + rw.MyPK + ".htm' target=_blank>工作日志</a>";
                            msgInfo += "\t\n来自节点:" + rw.ReturnNodeName + " 退回人:" + rw.ReturnerName + "  " + rw.RDT;
                            msgInfo += rw.BeiZhuHtml;
                        }

                        string str = nd.ReturnAlert;
                        if (str != "")
                        {
                            str = str.Replace("~", "'");
                            str = str.Replace("@PWorkID", workID.ToString());
                            str = str.Replace("@PNodeID", nd.NodeID.ToString());
                            str = str.Replace("@FK_Node", nd.NodeID.ToString());

                            str = str.Replace("@PFlowNo", fk_flow);
                            str = str.Replace("@FK_Flow", fk_flow);
                            str = str.Replace("@PWorkID", workID.ToString());

                            str = str.Replace("@WorkID", workID.ToString());
                            str = str.Replace("@OID", workID.ToString());

                            DataRow drMsg = dtAlert.NewRow();
                            drMsg["Title"] = "退回信息";
                            drMsg["Msg"]   = msgInfo + "\t\n" + str;
                            dtAlert.Rows.Add(drMsg);
                        }
                        else
                        {
                            DataRow drMsg = dtAlert.NewRow();
                            drMsg["Title"] = "退回信息";
                            drMsg["Msg"]   = msgInfo + "\t\n" + str;
                            dtAlert.Rows.Add(drMsg);
                        }
                    }
                    break;

                case WFState.Shift:
                    /* 判断移交过来的。 */
                    ShiftWorks        fws = new ShiftWorks();
                    BP.En.QueryObject qo  = new QueryObject(fws);
                    qo.AddWhere(ShiftWorkAttr.WorkID, workID);
                    qo.addAnd();
                    qo.AddWhere(ShiftWorkAttr.FK_Node, fk_node);
                    qo.addOrderBy(ShiftWorkAttr.RDT);
                    qo.DoQuery();
                    if (fws.Count >= 1)
                    {
                        DataRow drMsg = dtAlert.NewRow();
                        drMsg["Title"] = "移交历史信息";
                        msg            = "";
                        foreach (ShiftWork fw in fws)
                        {
                            string temp = "@移交人[" + fw.FK_Emp + "," + fw.FK_EmpName + "]。@接受人:" + fw.ToEmp + "," + fw.ToEmpName + "。<br>移交原因:-------------" + fw.NoteHtml;
                            if (fw.FK_Emp == WebUser.No)
                            {
                                temp = "<b>" + temp + "</b>";
                            }

                            temp = temp.Replace("@", "<br>@");
                            msg += temp + "<hr/>";
                        }
                        drMsg["Msg"] = msg;
                        dtAlert.Rows.Add(drMsg);
                    }
                    break;

                default:
                    break;
                }
                #endregion

                #region 增加流程节点表单绑定信息.
                if (nd.HisFormType == NodeFormType.RefOneFrmTree)
                {
                    /* 独立流程节点表单. */

                    nd.WorkID = workID; //为获取表单ID ( NodeFrmID )提供参数.

                    FrmNode fn = new FrmNode();
                    fn.MyPK = nd.NodeFrmID + "_" + nd.NodeID + "_" + nd.FK_Flow;
                    fn.Retrieve();
                    myds.Tables.Add(fn.ToDataTableField("FrmNode"));
                }
                #endregion 增加流程节点表单绑定信息.


                myds.Tables.Add(dtAlert);
                return(myds);
            }
            catch (Exception ex)
            {
                Log.DebugWriteError(ex.StackTrace);
                throw new Exception(ex.Message);
            }
        }
Beispiel #53
0
 public void AddBaseNode(BaseNode node)
 {
     Nodes.Add(node);
     ProcessMode(node);
 }
Beispiel #54
0
        private static void AddXTreeItem(XTreeCollection xTreeList, NodeInfo nodeInfo)
        {
            s_IsShow   = RolePermissions.AccessCheckNodePermission(OperateCode.NodeContentPreview, nodeInfo.NodeId);
            s_IsInput  = RolePermissions.AccessCheckNodePermission(OperateCode.NodeContentInput, nodeInfo.NodeId);
            s_IsManage = RolePermissions.AccessCheckNodePermission(OperateCode.NodeContentManage, nodeInfo.NodeId);
            string str = "";

            if (!s_IsAdministrator)
            {
                if (nodeInfo.ArrChildId.IndexOf(",", StringComparison.Ordinal) > 0)
                {
                    foreach (NodeInfo info in Nodes.GetNodesListInArrChildId(nodeInfo.ArrChildId))
                    {
                        s_IsChildNodePurview = (RolePermissions.AccessCheckNodePermission(OperateCode.NodeContentPreview, info.NodeId) || RolePermissions.AccessCheckNodePermission(OperateCode.NodeContentInput, info.NodeId)) || RolePermissions.AccessCheckNodePermission(OperateCode.ContentManage, info.NodeId);
                        if (s_IsChildNodePurview)
                        {
                            break;
                        }
                    }
                }
                else
                {
                    s_EnableAddWhenHasChild = true;
                }
            }
            if (ModelManager.GetNodesModelTemplateRelationShip(nodeInfo.NodeId, DataConverter.CLng(HttpContext.Current.Request["ModelId"])).IsNull)
            {
                s_IsInput  = false;
                s_IsManage = false;
            }
            if ((s_IsShow || s_IsInput) || (s_IsManage || s_IsChildNodePurview))
            {
                XTreeItem item = new XTreeItem();
                item.Text         = nodeInfo.NodeName;
                item.ArrModelId   = "0";
                item.ArrModelName = "";
                item.NodeId       = nodeInfo.NodeId.ToString();
                item.Target       = "";
                item.Expand       = "0";
                if (nodeInfo.Child > 0)
                {
                    item.XmlSrc = string.Concat(new object[] { "ContentSelectTreeXml.aspx?NodeID=", nodeInfo.NodeId, "&ModelId=", HttpContext.Current.Request["ModelId"] });
                }
                if (!s_IsInput && !s_IsManage)
                {
                    str             = "Forbid";
                    item.AnchorType = "0";
                }
                else
                {
                    switch (nodeInfo.PurviewType)
                    {
                    case 0:
                        str = "Container";
                        break;

                    case 1:
                        str = "HalfOpen";
                        break;

                    case 2:
                        str = "Purview";
                        break;

                    default:
                        str = "Container";
                        break;
                    }
                    item.AnchorType = "2";
                    if (!s_EnableAddWhenHasChild)
                    {
                        str             = "Forbid";
                        item.AnchorType = "0";
                    }
                }
                item.Icon = str;
                xTreeList.Add(item);
            }
        }
Beispiel #55
0
 public override void Visit(AccessCallChainNode node)
 {
     Nodes.Push(new AccessColumnNode(node.ToString(), string.Empty, node.ReturnType, TextSpan.Empty));
 }
Beispiel #56
0
 public override void Visit(FieldNode node)
 {
     base.Visit(node);
     Expression = Nodes.Pop() as FieldNode;
 }
Beispiel #57
0
 public void StartAll()
 {
     Task.WaitAll(Nodes.Where(n => n.State == CoreNodeState.Stopped).Select(n => n.StartAsync()).ToArray());
 }
Beispiel #58
0
 public override ExecutionStep CreateStep() =>
 new ParallelStep(Nodes.Select(t => t.CreateStep()).ToArray());
Beispiel #59
-1
        public Leader(IElection election, 
            IHartbeatTimer hartbeat,
            IObservable<AppendEntryResultMessage> reply,
            IObserver<AppendEntryMessage> append,
            IObserver<ClientResultMessage> clientReply,
            IObservable<ClientMessage> client,
            ILogReplication logReplication, 
            Nodes nodes,
            ILoggerFactory loggerFactory,
            RaftOptions options, 
            ServerIdentifier serverIdentifier)
        {
            _isDispose = false;
            _hartbeat = hartbeat;
            _append = append;
            _clientReply = clientReply;
            _client = client;
            _logReplication = logReplication;
            _nodes = nodes;
            _options = options;
            _serverIdentifier = serverIdentifier;
            _election = election;
            _logger = loggerFactory.CreateLogger(nameof(Leader) + " " + serverIdentifier);

            if (_options.UseLogging)
                _logger.LogInformation($"{nameof(ServerStateType.Leader)}");

            // Reinitialized after election
            NextIndex = new ConcurrentDictionary<ServerIdentifier, int>();
            MatchIndex = new ConcurrentDictionary<ServerIdentifier, int>();
            _hartbeat.Leader(SendHartbeat);
            _replyDispose = reply.Subscribe(EntryReplyMessageRecived);
            _clientReplyDispose = client.Subscribe(ClientMessageRecived);
        }
Beispiel #60
-1
        public LeaderBaseTests()
        {
            var mocker = new AutoMocker();

            ServerIdentifier = new ServerIdentifier();
            mocker.Use(ServerIdentifier);

            Election = new Election();
            AppendEntryResult = new Subject<AppendEntryResultMessage>();
            AppendEntry = new Subject<AppendEntryMessage>();
            LogReplication = new LogReplication();
            Nodes = new Nodes();

            Leader = new Rafting.States.Leader(
                Election,
                mocker.Get<IHartbeatTimer>(),
                AppendEntryResult,
                AppendEntry,
                mocker.Get<IObserver<ClientResultMessage>>(),
                mocker.Get<IObservable<ClientMessage>>(),
                LogReplication,
                Nodes,
                mocker.Get<ILoggerFactory>(),
                new RaftOptions(),
                mocker.Get<ServerIdentifier>());
        }