private void OnNUnitGraphUpdateReady(object sender, GraphUpdateReadyEventArgs e)
        {
            List <uint> changedNodeIds = new List <uint>();

            foreach (SnapshotNode node in e.SyncData.ModifiedNodes)
            {
                if (IdGenerator.GetType(node.Id) != ComponentType.Node)
                {
                    continue; // This isn't a visual node, don't bother.
                }
                changedNodeIds.Add(node.Id);
            }

            foreach (SnapshotNode node in e.SyncData.AddedNodes)
            {
                if (IdGenerator.GetType(node.Id) != ComponentType.Node)
                {
                    continue; // This isn't a visual node, don't bother.
                }
                changedNodeIds.Add(node.Id);
            }

            if (0 < changedNodeIds.Count)
            {
                runner.BeginQueryNodeValue(changedNodeIds);
            }
        }
 /// <summary>
 /// GraphUpdateReady event handler.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void GraphUpdateReady(object sender, GraphUpdateReadyEventArgs e)
 {
     if (EventStatus.OK == e.ResultStatus)
     {
     }
 }
Beispiel #3
0
            public override void Execute()
            {
                if (!objectCreationGraphNode.propertyChanged)
                {
                    return;
                }
                objectCreationGraphNode.propertyChanged = false;
                UpdateNodeRef updateNode = objectCreationGraphNode.updateNodeRefList[0];

                GraphUpdateReadyEventArgs retArgs = null;
                lock (runner.operationsMutex)
                {
                    try
                    {
                        // @keyu: graph nodes may have been recreated caused of
                        // some update on the UI so that we have to find out
                        // new graph code that create this ffi object.
                        var graph = runner.runnerCore.DSExecutable.instrStreamList[0].dependencyGraph;
                        var graphnodes = graph.GetGraphNodesAtScope(this.objectCreationGraphNode.classIndex, this.objectCreationGraphNode.procIndex);
                        foreach (var graphnode in graphnodes)
                        {
                            if ((graphnode == objectCreationGraphNode) ||
                                (graphnode.updateNodeRefList.Count == 1 &&
                                 updateNode.IsEqual(graphnode.updateNodeRefList[0])))
                            {
                                graphnode.propertyChanged = true;
                                break;
                            }
                        }

                        runner.ResetVMForExecution();
                        runner.Execute();

                        var modfiedGuidList = runner.GetModifiedGuidList();
                        runner.ResetModifiedSymbols();
                        var syncDataReturn = runner.CreateSynchronizeDataForGuidList(modfiedGuidList);
                        retArgs = new GraphUpdateReadyEventArgs(syncDataReturn);
                    }
                    catch (Exception e)
                    {
                        retArgs = new GraphUpdateReadyEventArgs(new SynchronizeData(),
                                                                EventStatus.Error,
                                                                e.Message);
                    }
                }

                if (runner.GraphUpdateReady != null)
                {
                    runner.GraphUpdateReady(this, retArgs);
                }
            }
Beispiel #4
0
            private void ReportRuntimeWarnings(string code, SynchronizeData syncDataReturn, Dictionary<uint, string> modifiedGuidList, ref GraphUpdateReadyEventArgs retArgs)
            {
                //GraphUpdateReadyEventArgs retArgs = null;

                if (runner.runnerCore.RuntimeStatus.Warnings.Count > 0)
                {
                    if(retArgs == null)
                        retArgs = new GraphUpdateReadyEventArgs(syncDataReturn);

                    foreach (var err in runner.runnerCore.RuntimeStatus.Warnings)
                    {
                        string msg = err.message;
                        int lineNo = err.Line;

                        // TODO: How can the lineNo be invalid ?
                        if (lineNo == ProtoCore.DSASM.Constants.kInvalidIndex)
                        {
                            retArgs.Warnings.Add(new GraphUpdateReadyEventArgs.ErrorObject { Message = msg, Id = 0 });
                            continue;
                        }

                        string varName = GetVarNameFromCode(lineNo, code);

                        foreach (var kvp in modifiedGuidList)
                        {
                            // Get the uid recognized by the graphIDE
                            uint guid = kvp.Key;
                            string name = kvp.Value;
                            if(name.Equals(varName))
                            {
                                retArgs.Warnings.Add(new GraphUpdateReadyEventArgs.ErrorObject { Message = msg, Id =  runner.graphCompiler.GetRealUID(guid)});
                                break;
                            }
                        }

                        if (retArgs.Warnings.Count == 0)
                        {
                            LogWarningsFromInputNodes(retArgs, varName, msg);
                        }
                    }
                }
            }
Beispiel #5
0
            private void ReportErrors(string code, SynchronizeData syncDataReturn, Dictionary<uint, string> modifiedGuidList, ref GraphUpdateReadyEventArgs retArgs)
            {
                Dictionary<ulong, ProtoCore.Core.ErrorEntry> errorMap = runner.runnerCore.LocationErrorMap;

                if (errorMap.Count == 0)
                    return;

                retArgs = new GraphUpdateReadyEventArgs(syncDataReturn);
                foreach (var kvp in errorMap)
                {
                    ProtoCore.Core.ErrorEntry err = kvp.Value;
                    string msg = err.Message;
                    int lineNo = err.Line;

                    // If error is a Build error
                    if (err.BuildId != ProtoCore.BuildData.WarningID.kDefault)
                    {
                        // Error comes from imported DS file
                        if (!string.IsNullOrEmpty(err.FileName))
                        {
                            msg += " At line " + err.Line + ", column " + err.Col + ", in " + Path.GetFileName(err.FileName);
                            if (err.Type == ProtoCore.Core.ErrorType.Error)
                            {
                                retArgs.Errors.Add(new GraphUpdateReadyEventArgs.ErrorObject { Message = msg, Id = 0 });
                            }
                            else if (err.Type == ProtoCore.Core.ErrorType.Warning)
                            {
                                retArgs.Warnings.Add(new GraphUpdateReadyEventArgs.ErrorObject { Message = msg, Id = 0 });
                            }
                            continue;
                        }

                    }

                    string varName = GetVarNameFromCode(lineNo, code);

                    // Errors
                    if (err.Type == ProtoCore.Core.ErrorType.Error)
                    {
                        // TODO: How can the lineNo be invalid ?
                        if (lineNo == ProtoCore.DSASM.Constants.kInvalidIndex || varName == null)
                        {
                            retArgs.Errors.Add(new GraphUpdateReadyEventArgs.ErrorObject { Message = msg, Id = 0 });
                            continue;
                        }

                        foreach (var pair in runner.graphCompiler.mapModifiedName)
                        {
                            string name = pair.Key;
                            if (name.Equals(varName))
                            {
                                uint guid = pair.Value;
                                retArgs.Errors.Add(new GraphUpdateReadyEventArgs.ErrorObject { Message = msg, Id = runner.graphCompiler.GetRealUID(guid) });
                                break;
                            }

                        }
                    }
                    else if(err.Type == ProtoCore.Core.ErrorType.Warning) // Warnings
                    {
                        // TODO: How can the lineNo be invalid ?
                        if (lineNo == ProtoCore.DSASM.Constants.kInvalidIndex || varName == null)
                        {
                            retArgs.Warnings.Add(new GraphUpdateReadyEventArgs.ErrorObject { Message = msg, Id = 0 });
                            continue;
                        }

                        foreach (var pair in modifiedGuidList)
                        {
                            // Get the uid recognized by the graphIDE
                            string name = pair.Value;
                            if (name.Equals(varName))
                            {
                                uint guid = pair.Key;
                                retArgs.Warnings.Add(new GraphUpdateReadyEventArgs.ErrorObject { Message = msg, Id = runner.graphCompiler.GetRealUID(guid) });
                                break;
                            }
                        }
                        if (retArgs.Warnings.Count == 0)
                        {
                            foreach (var pair in runner.graphCompiler.mapModifiedName)
                            {
                                string name = pair.Key;
                                if (name.Equals(varName))
                                {
                                    uint guid = pair.Value;
                                    retArgs.Warnings.Add(new GraphUpdateReadyEventArgs.ErrorObject { Message = msg, Id = runner.graphCompiler.GetRealUID(guid) });
                                    break;
                                }
                            }
                        }
                    }
                }
            }
Beispiel #6
0
            private void ReportBuildErrorsAndWarnings(string code, SynchronizeData syncDataReturn, Dictionary<uint, string> modifiedGuidList, ref GraphUpdateReadyEventArgs retArgs)
            {
                //GraphUpdateReadyEventArgs retArgs = null;
                if (runner.compileState.BuildStatus.ErrorCount > 0)
                {
                    retArgs = new GraphUpdateReadyEventArgs(syncDataReturn);

                    foreach (var err in runner.compileState.BuildStatus.Errors)
                    {
                        string msg = err.Message;
                        int lineNo = err.Line;

                        // TODO: How can the lineNo be invalid ?
                        if (lineNo == ProtoCore.DSASM.Constants.kInvalidIndex)
                        {
                            retArgs.Errors.Add(new GraphUpdateReadyEventArgs.ErrorObject { Message = msg, Id = 0 });
                            continue;
                        }

                        string varName = GetVarNameFromCode(lineNo, code);

                        foreach (var ssnode in syncData.AddedNodes)
                        {
                            if (ssnode.Content.Contains(varName))
                            {
                                uint id = ssnode.Id;

                                retArgs.Errors.Add(new GraphUpdateReadyEventArgs.ErrorObject { Message = msg, Id = id });
                                break;
                            }
                        }
                        if (retArgs.Errors.Count == 0)
                        {
                            foreach (var ssnode in syncData.ModifiedNodes)
                            {
                                if (ssnode.Content.Contains(varName))
                                {
                                    uint id = ssnode.Id;

                                    retArgs.Errors.Add(new GraphUpdateReadyEventArgs.ErrorObject { Message = msg, Id = id });
                                    break;
                                }
                            }
                        }
                    }
                }
                if (runner.compileState.BuildStatus.WarningCount > 0)
                {
                    if (retArgs == null)
                        retArgs = new GraphUpdateReadyEventArgs(syncDataReturn);

                    foreach (var warning in runner.compileState.BuildStatus.Warnings)
                    {
                        string msg = warning.msg;
                        int lineNo = warning.line;

                        // TODO: How can the lineNo be invalid ?
                        if (lineNo == ProtoCore.DSASM.Constants.kInvalidIndex)
                        {
                            retArgs.Warnings.Add(new GraphUpdateReadyEventArgs.ErrorObject { Message = msg, Id = 0 });
                            continue;
                        }

                        string varName = GetVarNameFromCode(lineNo, code);

                        // This array should be empty for Build errors

                        /*foreach (var ssnode in syncDataReturn.ModifiedNodes)
                        {
                            if(ssnode.Content.Contains(varName))
                            {
                                uint id = ssnode.Id;

                                retArgs.Warnings.Add(new GraphUpdateReadyEventArgs.ErrorObject { Message = msg, Id = id });
                                break;
                            }
                        }*/
                        foreach (var kvp in modifiedGuidList)
                        {
                            // Get the uid recognized by the graphIDE
                            uint guid = kvp.Key;
                            string name = kvp.Value;
                            if (name.Equals(varName))
                            {
                                retArgs.Warnings.Add(new GraphUpdateReadyEventArgs.ErrorObject { Message = msg, Id = runner.graphCompiler.GetRealUID(guid) });
                                break;
                            }
                        }

                        if(retArgs.Warnings.Count == 0)
                        {
                            LogWarningsFromInputNodes(retArgs, varName, msg);
                        }

                    }
                }
            }
Beispiel #7
0
            void LogWarningsFromInputNodes(GraphUpdateReadyEventArgs retArgs, string varName, string msg)
            {
                foreach (var ssnode in syncData.AddedNodes)
                {
                    if (ssnode.Content.Contains(varName))
                    {
                        uint id = ssnode.Id;

                        retArgs.Warnings.Add(new GraphUpdateReadyEventArgs.ErrorObject { Message = msg, Id = id });
                        break;
                    }
                }

                if (retArgs.Warnings.Count == 0)
                {
                    foreach (var ssnode in syncData.ModifiedNodes)
                    {
                        if (ssnode.Content.Contains(varName))
                        {
                            uint id = ssnode.Id;

                            retArgs.Warnings.Add(new GraphUpdateReadyEventArgs.ErrorObject { Message = msg, Id = id });
                            break;
                        }
                    }
                }
            }
Beispiel #8
0
            public override void Execute()
            {
                GraphUpdateReadyEventArgs retArgs;

                lock (runner.operationsMutex)
                {
                    try
                    {
                        string code = null;
                        runner.SynchronizeInternal(syncData, out code);

                        var modfiedGuidList = runner.GetModifiedGuidList();
                        runner.ResetModifiedSymbols();
                        var syncDataReturn = runner.CreateSynchronizeDataForGuidList(modfiedGuidList);

                        retArgs = null;

                        ReportErrors(code, syncDataReturn, modfiedGuidList, ref retArgs);

                        //ReportBuildErrorsAndWarnings(code, syncDataReturn, modfiedGuidList, ref retArgs);
                        //ReportRuntimeWarnings(code, syncDataReturn, modfiedGuidList, ref retArgs);

                        if(retArgs == null)
                            retArgs = new GraphUpdateReadyEventArgs(syncDataReturn);
                    }
                    // Any exceptions that are caught here are most likely from the graph compiler
                    catch (Exception e)
                    {
                        retArgs = new GraphUpdateReadyEventArgs(syncData, EventStatus.Error, e.Message);
                    }
                }

                if (runner.GraphUpdateReady != null)
                {
                    runner.GraphUpdateReady(this, retArgs); // Notify all listeners (e.g. UI).
                }
            }
        private void OnRunnerGraphUpdateReady(object sender, GraphUpdateReadyEventArgs e)
        {
            if (null == CoreComponent.CurrentDispatcher)
            {
                return; // Headless mode?
            }
            if (Configurations.DumpDebugInfo)
            {
                System.Diagnostics.Debug.WriteLine("OnRunnerGraphUpdateReady: " + e.SyncData);
            }

            if (e.ResultStatus == EventStatus.Error)
            {
                //@TODO(Zx) Replace this with proper error propagation and notification
                System.Diagnostics.Debug.WriteLine("GraphUpdateReady reported: " + e);
                CoreComponent.CurrentDispatcher.Invoke(new Action(() =>
                {
                    CoreComponent.Instance.AddFeedbackMessage(ResourceNames.Error, e.ErrorString);
                }));
            }

            if (e.Errors.Count > 0)
            {
                List <GraphUpdateReadyEventArgs.ErrorObject> errors = e.Errors;
                foreach (GraphUpdateReadyEventArgs.ErrorObject error in errors)
                {
                    if (error.Id == 0)
                    {
                        CoreComponent.CurrentDispatcher.Invoke(new Action(() =>
                        {
                            CoreComponent.Instance.AddFeedbackMessage(ResourceNames.Error, e.ErrorString);
                        }));
                    }
                    else
                    {
                        ReportErrorStringOnUi(error.Id, error.Message);
                    }
                }
            }

            if (e.Warnings.Count > 0)
            {
                List <GraphUpdateReadyEventArgs.ErrorObject> warnings = e.Warnings;
                foreach (GraphUpdateReadyEventArgs.ErrorObject warning in warnings)
                {
                    if (warning.Id == 0)
                    {
                        CoreComponent.CurrentDispatcher.Invoke(new Action(() =>
                        {
                            CoreComponent.Instance.AddFeedbackMessage(ResourceNames.Warning, warning.Message);
                        }));
                    }
                    else
                    {
                        ReportWarningStringOnUi(warning.Id, warning.Message);
                    }
                }
            }

            List <uint> changedNodeIds = new List <uint>();

            foreach (SnapshotNode node in e.SyncData.ModifiedNodes)
            {
                if (IdGenerator.GetType(node.Id) != ComponentType.Node)
                {
                    continue; // This isn't a visual node, don't bother.
                }
                changedNodeIds.Add(node.Id);
            }

            foreach (SnapshotNode node in e.SyncData.AddedNodes)
            {
                if (IdGenerator.GetType(node.Id) != ComponentType.Node)
                {
                    continue; // This isn't a visual node, don't bother.
                }
                changedNodeIds.Add(node.Id);
            }

            if (0 < changedNodeIds.Count)
            {
                CoreComponent.CurrentDispatcher.Invoke(new Action(() =>
                {
                    if (RemoveNodesNotQualifiedForPreview(changedNodeIds))
                    {
                        runner.BeginQueryNodeValue(changedNodeIds);
                    }
                }));
            }
        }