Esempio n. 1
0
        static void Main(string[] args)
        {
            #region EventLogEntry -> QVX Serializer
            // it is not possible to add attributes to this already compiled and existing class
            // you have to give an collection of attributes to the serializer to override
            // the default behavior
            var overideAttributes = new Dictionary<string, List<QvxBaseAttribute>>() {
                    {"Data", new List<QvxBaseAttribute>() { new QvxIgnoreAttribute(true) }},
                    {"ReplacementStrings", new List<QvxBaseAttribute>() { new QvxSubfieldAttribute("|") }},
            };

            var qvxSer = new QvxSerializer<System.Diagnostics.EventLogEntry>(overideAttributes);
            #endregion

            #region Request Handler
            var handler = new QvxDefaultHandleRequestHandler();

            handler.QvxEditConnectHandler = (c, d) =>
               {
                   // we don't need a edit Dialog
                   return new QvxReply() { OutputValues = { "" }, Result = QvxResult.QVX_OK };
               };

            handler.QvxConnectHandler = (c) =>
            {
                return new QvxReply() { Result = QvxResult.QVX_OK };
            };

            handler.QvxDisconnectHandler = () =>
            {
                return new QvxReply() { Result = QvxResult.QVX_OK };
            };
            #endregion

            #region Execute Handler
            var excHand = new QvxQvxExecuteCommandHandler();

            excHand.QvxExecuteRequestTablesHandler = () =>
            {
                return
                    from c in System.Diagnostics.EventLog.GetEventLogs()
                    select new QvxTablesRow(c.Log);
            };

            excHand.QvxExecuteRequestColumnsHandler = (table) =>
            {
                return
                    from c in qvxSer.QvxTableHeader.Fields
                    select new QvxColumsRow(table, c.FieldName);
            };

            excHand.QvxExecuteRequestSelectHandler = (sql, c) =>
            {
                var qvxresult = QvxResult.QVX_SYNTAX_ERROR;

                Action<QvxDataClient> tmpAction = null;

                string eventlogName="";
                try
                {
                    // extract the eventlog name from the SQL
                    eventlogName = sql.Substring(sql.ToUpper().IndexOf("FROM") + 4).Trim();
                }
                catch
                {
                }
                var enventlog = (from evlog in System.Diagnostics.EventLog.GetEventLogs() where evlog.Log == eventlogName select evlog).FirstOrDefault();

                if (enventlog != null)
                {
                    tmpAction = (dataclient) =>
                    {
                        qvxSer.Serialize(enventlog.Entries.Cast<System.Diagnostics.EventLogEntry>(), new BinaryWriter(dataclient));

                        dataclient.Close();
                    };

                    qvxresult = QvxResult.QVX_OK;
                }

                return new Tuple<QvxResult, Action<QvxDataClient>>(qvxresult, tmpAction);
            };
            #endregion

            #region Generic Command Handler
            var generic = new QvxDefaultQvxGenericCommandHandler();
            generic.HaveStarField = true;
            #endregion

            #region Wireup
            // Connect the execute handler to the default handler
            handler.QvxExecuteHandler = excHand.HandleRequest;

            handler.QvxGenericCommandHandler = generic.HandleRequest;

            var client = new QvxCommandClient(args);

            // Connect the default handler to the qvx pipe client
            client.HandleQvxRequest = handler.HandleRequest;

            #endregion

            // Start the Client
            client.StartThread();

            // Wait or do other stuff :-)
            while (client.Running) Thread.Sleep(500);
        }
Esempio n. 2
0
        public QvxReply HandleRequest(QvxExecuteCommands command, string cmd, QvxDataClient dataclient, List<string> param)
        {
            var result = new QvxReply() { Result = QvxResult.QVX_OK };
            switch (command)
            {
                #region SQL
                case QvxExecuteCommands.SQL:
                    result.Result = QvxResult.QVX_UNSUPPORTED_COMMAND;
                    if (QvxExecuteRequestSelectHandler != null)
                    {
                        var tmpResult = QvxExecuteRequestSelectHandler(cmd, param);
                        if (tmpResult != null)
                        {
                            result.Result = tmpResult.Item1;
                            dataclient.DataClientDeliverData = tmpResult.Item2;
                        }
                    }
                    break;
                #endregion

                #region TYPES
                case QvxExecuteCommands.TYPES:
                    result.Result = QvxResult.QVX_UNSUPPORTED_COMMAND;
                    if (QvxExecuteRequestTypesHandler != null)
                    {
                        var res = QvxExecuteRequestTypesHandler();
                        if (res != null)
                        {
                            result.Result = QvxResult.QVX_OK;

                            Type type = res.GetType().GetInterface(typeof(IEnumerable<>).Name).GetGenericArguments()[0];

                            var serializer = new QvxSerializer(type);
                            serializer.Serialize(res, new BinaryWriter(dataclient));
                        }
                        else
                            result.Result = QvxResult.QVX_UNKNOWN_ERROR;
                    }
                    break;
                #endregion

                #region COLUMNS
                case QvxExecuteCommands.COLUMNS:
                    result.Result = QvxResult.QVX_UNSUPPORTED_COMMAND;
                    if (QvxExecuteRequestColumnsHandler != null)
                    {
                        string tablename = null;

                        result.Result = QvxResult.QVX_OK;

                        if ((param != null) && (param.Count > 0) && param[0].StartsWith("TABLE_NAME="))
                        {
                            tablename = param[0].Substring(11);
                        }

                        dataclient.DataClientDeliverData = (dc) =>
                            {
                                var res = QvxExecuteRequestColumnsHandler(tablename);
                                if (res != null)
                                    QvxColumsRow.Serialize(res, new BinaryWriter(dataclient));
                            };
                    }
                    break;
                #endregion

                #region TABLES
                case QvxExecuteCommands.TABLES:
                    result.Result = QvxResult.QVX_UNSUPPORTED_COMMAND;
                    if (QvxExecuteRequestColumnsHandler != null)
                    {
                        result.Result = QvxResult.QVX_OK;
                        dataclient.DataClientDeliverData = (dc) =>
                            {
                                var res = QvxExecuteRequestTablesHandler();
                                if (res != null)
                                    QvxTablesRow.Serialize(res, new BinaryWriter(dc));
                            };
                    }
                    break;
                #endregion

                #region Default
                default:
                    result.Result = QvxResult.QVX_UNSUPPORTED_COMMAND;
                    break;
                #endregion
            }

            if (result.Result == QvxResult.QVX_OK)
            {
                dataclient.StartThread();
            }
            return result;
        }
Esempio n. 3
0
        public static void Serialize(IEnumerable<QvxTablesRow> rows, BinaryWriter bw)
        {
            if (serializer == null)
                serializer = new QvxSerializer<QvxTablesRow>();

            serializer.Serialize(rows, bw);
        }