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); }
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; }
public static void Serialize(IEnumerable<QvxTablesRow> rows, BinaryWriter bw) { if (serializer == null) serializer = new QvxSerializer<QvxTablesRow>(); serializer.Serialize(rows, bw); }