using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.CSharp.Syntax; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Tango.Scripting { public class ScriptParser { public List ParseScript(String code) { List vars = new List(); SyntaxTree tree = CSharpSyntaxTree.ParseText(code); var root = (CompilationUnitSyntax)tree.GetRoot(); List variables = new List(); FillVariables(variables, root.Members[0]); variables = variables.Distinct().ToList(); foreach (var item in variables) { ScriptVariable v = new ScriptVariable(); v.Name = item.Identifier.ToString(); if (item.Initializer.Value.GetType() == typeof(ObjectCreationExpressionSyntax)) { v.Type = (item.Initializer.Value as ObjectCreationExpressionSyntax).Type.ToString(); } else if (item.Initializer.Value.GetType() == typeof(InvocationExpressionSyntax)) { v.Type = (((item.Initializer.Value as InvocationExpressionSyntax).Expression as MemberAccessExpressionSyntax).Name as GenericNameSyntax).TypeArgumentList.Arguments[0].ToString(); } vars.Add(v); } return vars; } private void FillVariables(List variables, SyntaxNode node) { foreach (var item in node.DescendantNodes(x => true)) { if (item.GetType() == typeof(VariableDeclaratorSyntax)) { variables.Add(item as VariableDeclaratorSyntax); } else { FillVariables(variables, item); } } } } public class ScriptVariable { public String Name { get; set; } public String Type { get; set; } public override string ToString() { return String.Format("{0} : {1}", Type, Name); } } }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.BL.Entities;
using Tango.BL.Enumerations;
using Tango.PMR.Diagnostics;

namespace Tango.MachineStudio.Common.EventLogging
{
    /// <summary>
    /// Represents a database events logger.
    /// </summary>
    public interface IEventLogger
    {
        /// <summary>
        /// Occurs when a new machine event has been logged.
        /// </summary>
        event EventHandler<MachinesEvent> NewLog;

        /// <summary>
        /// Logs the specified machine event.
        /// </summary>
        /// <param name="machineEvent">The machine event.</param>
        void Log(MachinesEvent machineEvent);

        /// <summary>
        /// Logs the specified event type.
        /// </summary>
        /// <param name="eventType">Type of the event.</param>
        /// <param name="message">The message.</param>
        void Log(EventTypes eventType, String message, bool write_to_db = true);

        /// <summary>
        /// Logs the specified hardware event.
        /// </summary>
        /// <param name="hardwareEvent">The hardware event.</param>
        void Log(Event hardwareEvent);

        /// <summary>
        /// Logs the specified exception using the <see cref="EventTypes.ApplicationException"/>.
        /// </summary>
        /// <param name="exception">The exception.</param>
        void Log(Exception exception);

        /// <summary>
        /// Logs the specified exception using the <see cref="EventTypes.ApplicationException"/>.
        /// </summary>
        /// <param name="exception">The exception.</param>
        void Log(Exception exception, String description);

        /// <summary>
        /// Logs the specified message using the <see cref="EventTypes.ApplicationInformation"/>.
        /// </summary>
        /// <param name="message">The message.</param>
        void Log(String message);

        /// <summary>
        /// Immediately saves all pending events to database.
        /// </summary>
        void FlushAll();
    }
}