Skip to content

GSF v2.3.164 Release Notes

J. Ritchie Carroll edited this page May 7, 2019 · 2 revisions
GSF.Core Updates
  • In FileProcessor, replaced internal DelayAndExecute method with the version from ActionExtensions.
  • Added old code for looking up a user's groups as a fallback strategy when the new code fails.
  • Added RetryCount to FileProcessorEventArgs.
  • Added Range class with internal state and IMergeable interface to allow for merging state.
  • Fixed visibility of the Start and End properties in Range.
  • Fixed comments in latest updates to Range class.
  • Fixed an indexing bug in Logger.cs
  • Updated TableOperations to apply any defined escaped field name targets to default order by expression.
  • Added ability to encrypt and decrypt data models with TableOperations using an EncryptDataAttribute.
  • Updated GetInterpretedValue in TableOperations to handle cases where with encrypted data targets or field data type targets could be null.
  • Added TableOperation handling for use case where a field is modeled as both searchable and encrypted.
  • Changed TableOperations encrypted search targets to a list since order matters when constructing a search string
  • Updated EncryptDataAttribute to not allow empty key specifications.
  • Improved comments related to TableOperations.
  • Added SearchRecords function to TableOperations to allow local searches against retrieved table records as queried from database for fields modeled with SearchableAttribute, this way search functionality will work even with fields that are modeled with the EncryptDataAttribute and use the SearchType.LikeExpression.
  • Added an extension method GetComparer for StringComparison to return the associated StringComparer
  • Updated TableOperations to use local Linq sort when specified sort field has been marked for encryption.
  • Updated PageList to accept a source enumeration count for cases where this is known in advance as an optimization.
  • Updated paginated QueryRecords with specified sort field to operate properly even when sort field is encrypted.
  • Added code to handle use case when string based primary keys could be marked for encryption.
  • Updated IPagedList to inherit from IList to increase its usefulness.
  • Updated comments in TableOperations related to root query restrictions.
  • Extracted the DelayedSynchronizedOperation that was in DynamicCalcultor into its own public class.
  • Updated TableOperations to include ability to control if root record restrictions should be applied to update and delete operations.
  • Updated TableOperations Update function to apply RootQueryRestrictions earlier in function so that root restriction is applied even if user does not provide an additional one.
  • Added ApplyToUpdates and ApplyToDeletes properties to the RootQueryRestrictionAttribute so that application to target operations can apply automatically through modeling.
  • Simplified new StdDev extensions.
  • Fixed an issue in new StandardDeviation extensions to properly handle calculatorForSample.
  • Fixed code checking the file type of the target in CopyPermissions of FilePath.cs.
  • Modified JoinKeyValuePairs() to add startValueDelimiter and endValueDelimiter if a parameter value contains one of those two characters.
  • Updated DataExtensions CreateParameterizedCommand function to properly handle stored procedures.
  • Improved detection of stored procedures
  • Updated data extensions to used compiled regular expressions, including a new expression for determining if a SQL statement is an identifier, assumed to be a stored procedure.
  • Added configuration option to allow manual enabling or disabling use of FIPS cryptographic modules. Defaults to Auto which reads FIPS setting from registry.
  • Added a log writer that writes to an in-memory stream.
  • Removed the FriendlyName object from the X509CertificateGenerator.cs
  • Added functions to CertificateGenerator for importing and exporting certificates from the current user store.
  • Modified transactions in FileBackedLookupTable to always clear the journal node after completing the transaction so that opening the file in read-only can verify that the FileBackedLookupTable is not in an inermediate state.
  • Added validation to the WriteToDisk method in IsamDataFileBase.
  • Fixed errors in OleDb schema analysis.
  • Updated TableOperations to properly handle modeled char properties when posting SQL updates to SQLite.
  • Added selector function to each of the Standard Deviation collection functions.
  • Fixed off-by-one error in CharExtensions.ToUpper().
  • Added Normalize() extension method on decimal to remove trailing zeros.
  • Copied functionality from DataMigrationUtility into the GSF.Data namespace in GSF.Core.
  • Improved public interface of the various classes in Schema.cs.
  • Fixed mistake in conditional introduced during translation of DataUpdater.cs.
  • Initialized m_tableCollection field in the constructor for BulkDataOperationBase.
  • Tweaked code in DataDeleter and DataUpdater to properly escape tables, fields, and values for the appropriate destination database.
  • Fixed logic errors introduced when initializing the m_tableCollection member in the constructor for BulkDataOperationBase.
GSF.TimeSeries Updates
  • Added Modbus Protocol to SQL scripts.
  • Fixed up protocols in initial data set scripts.
  • Fixed race condition between HandleConnectOnDemandAdapters and adapter initialization.
  • Fix DataPublisher subscribe requests to propagate input measurement changes to the routing tables.
  • Fixed event wiring in AllAdaptersCollection.
  • Fixed casing on protocol definition for DNP3.
  • Fixed protocol ID of the test device in the sample data set.
  • Fixed NULL comparisons in SQL trigger for tracking changes to Device records.
  • Updated the schema version of the databases to reflect the change to the device update trigger.
  • Modified order of operations in DataPublisher.HandleSubscribeRequest to fix the issue of subscribers not receiving cached measurements upon subscription.
  • Added ManageCertificate command to ServiceHostBase.
  • Updated SerializedSchema.bin using refactored Schema class.
  • Added code to detach from the StatisticsEngine.Calculated event in DataSubscriber.cs.
  • Fixed parameter parsing for PublishInterval in unsynchronized data subscriber
  • Added ping console command to servicehostbase.
  • Updated ping command to split server setting to remove the port.
  • Added code to handle connect on demand scenarios for DataSubscriber.
  • Fixed temporal support in DataSubscriber.
  • Updated gateway style statistics to fall-back on reflection in source object in case properties are available.
GSF.Communications Updates
  • Cancelled timeouts when SSL and Negotiate authentication routines throw exceptions.
  • Updated GetInterfaceIPStack to base IPStack off of the server IP if interface is no
  • Updated ZeroMQ libraries to their latest versions.
  • Eliminated superfluous TCP server restarts when faced with a half-open connection.
  • Updated TCP/TLS payload aware implementations to allow for zero-length payload marker and custom endian order encoding of payload size.

GSF.PhasorProtocol and Related Library Updates

  • Modified the sentinel value of objects derived from the AnalogValueBase and DigitalValueBase classes.
  • Added validation to the routine that updates the connection string after the user updates a connection string parameter.
  • Fixed design-time errors in PagedViewModelBase.
  • Updated the status flag reference in the RealTimeMeasurementUserControl to match the status flag reference in InputStatusMonitorUserControl.
  • Added IEEE C37.118.2 tab to the status flag reference.
  • Fixed input wizard to apply the selected PDC vendor device ID to the concentrator on save.
  • Added validation for the chart refresh interval to ensure that the Manger doesn't crash when the value is misconfigured.
  • Fixed Latitude and Longitude fields so that trailing zeros don't cause validation errors on the Device page.
  • Added line-to-line option under Phase to the Manage Phasor page of the Manager.
  • Fixed up startup operation that fills in missing protocols.
  • Removed stats from device outputs - although statistics may be associated with device, it will not be the adapter producing them...
  • Added more messaging around ToogleBadData testing function and restricted command to admins and editors.
  • Updated automated output measurement creation for power calculations to use HistorianID from associated voltage.
  • Updated default lag-time of PowerMultiCalculatorAdapter to 5 seconds.
  • Fixed design-time errors in the PhasorSelectionViewModel.
  • Fixed design-time errors in PowerCalculationViewModel.
  • Fixed the metadata import adapter to use the parent acronym when using source prefix to name child devices.
GSF.Web Updates
  • Updated AuthenticationHandler to respond with Unauthorized for Ajax calls instead of Redirect for resources that are marked for auth-failure redirection.
  • Added SubscriberHub and jquery.subscriber.js API for JavaScript internal subscriptions and fixed up GraphMeasurements.cshtml.
  • Fixed errors in SubscriberHub when building the subscriber connection string to connect to the internal data publisher.
  • Added array prototypes that IE11 does not implement to gsf.web.client.js.
  • Added AddSelectFieldFromEnum, which allows select field options to be generated from an enum, to DataContext.cs.
  • Added Number prototypes for parseFloat and isInteger to fix IE11 not having these functions defined.
  • Added formatting to the option fields in AddSelectFieldFromEnum. Also ensured correct Enum value type was being used in generating the dictionary.
  • Added method to add a select field where options are pulled from a dictionary.
  • Fixed AddSelectFromEnum to pull option names from description if available, before using enum name.
  • Fixed AddSelectFieldFromEnum to use Convert.ChangeType instead of GetEnumValueOrDefault.
  • Removed shared resource paths and fixed with correct relative path to ensure it works with IIS webapps as well as self hosted webapps.
  • In authentication handler, modified call to security provider factory to provide the passthrough principal and modified the session expiration handler to clean up the security provider cache.
  • Added feature to RemoteConsole.cshtml where you can pass a command through the url to start on load.
  • Fixed credential caching in AuthenticationHandler to prevent dangling auto-refresh security providers.
  • Fixed issue with passing booleans as parentKeys into RenderViewModelConfiguration showing up capitalized in the rendered javascript.
  • Fixed IE login loop by eliminating browser caching of AJAX calls to the AuthTest page.
  • Added bootstrap 4 files to GSF.Web shared content so we could start phasing into new products.
  • Changed new bootstrap4 files to embedded resources.
  • Added flot rangeselection plugin to shared resources.
  • Added react and react-dom files to web embedded resources.
  • Added Interface and BypassStatistics parameters to the data subscriber connection string in SubscriberHub.cs.
  • Updated JQuery data subscriber to include ability to add value formatting.
  • Added jquery.subscriber bulk operations, including subscriptionInfo parameter, for handling application of measurement value formats, e.g., for statistics.
  • Updated joinKeyValuePair extension in gsf.web.client.js to include start and end value delimiters in its consideration for nested wrapping
  • Added javascript Array.prototype.fill to client.js
GSF.Security Updates
  • Updated AdoSecurityProvider to publish exceptions and relevant events to diagnostic logs and added ability to disable database log writes - this fixes #40
  • Added non-serialized AccountName to SecurityGroup model so that non-SID based account name can be easily accessed from model instances, e.g., from Javascript
  • Modified the cache monitor to use asynchronous tail recursion and avoid refreshing cache contexts inside critical regions, for performance reasons.
  • Added overloads to security provider factory methods to supply passthrough principal and control auto refresh behavior.
Various Time-series Adapter Updates
  • Updated DNP3Adapters to the latest version of OpenDnp3 and added a polling interval.
  • Added connection string parameter in Dnp3Adapters for differentiating timestamps when receiving otherwise identical measurements during a single polling operation.
  • Added Fixed typo in Dnp3Adapters description for the TimestampDifferentiation connection string parameter.
  • Added static method to auto-restore Modbus configurations stored as embedded resources.
  • Removed seemingly arbitrary restriction on the valid values for Group.StartAddress in the ModbusPoller.
  • Fixed order of operations when saving and initializing Modbus devices.
  • Added code to unregister the device proxy for the ModbusPoller to prevent potential issues with statistic calculations.
  • To get around restrictions placed on message size in SignalR, replaced SignalR functions for saving and loading Modbus configuration with web API calls instead.
  • Added role authorization to Modbus configuration web API methods.
  • Updated Modbus configuration restoration to include sub-directories for a cleaner export.
  • Fixed the Modbus client-side SignalR callback for populating the message wells on Status.cshtml.
  • Added Modbus nodeID parameter to the data hub call to get enabled devices.
  • Modified the CSV export adapter to use adjusted value for the export.
  • Modified the CSV input adapter to fill in data for missing publication intervals.
  • Added several statistics to DynamicCalculator EmailNotifier that get reported through adapter status message.
  • Added a database notifier to DynamicCalculatorAdapter that will take multiple input measurements and define a boolean expression such that when the expression is true a custom database operation is triggered.
  • Renamed DynamicCalculator synchronized operation target for consistency.
  • Added invokable "QueueOperation" command to DatabaseNotifier so that database operation can be manually executed.
  • Added resharper suppressions to DatabaseNotifier where needed.
  • Hid InputMeasurmentKeys from DynamicCalculator since variable controls inputs.
  • Updated DynamicCalculator adapter to use new public of DelayedSynchronizedOperation.
  • Added DynamicCalculator property DatabaseMinimumWriteInterval to control minimum database writing interval (implemented using new public DelayedSynchronizedOperation)
  • Fixed default setting for DatabaseMinimumWriteInterval in DatabaseNotifier.
  • Fixed issue with DatabaseMinimumWriteInterval property access where synchronized operation is not available until adapter is initialized.
  • Renamed write interval to max since it better represents its function.
  • Updated DatabaseNotifier.QueueOperation to run without delay, if not already running.
  • Added special constant TIME to DynamicCalculator to access current real-time value, in Ticks, for time based calculations.
  • Added System.DateTime to default imports for DynamicCalculator and added last calculated value to adapter status (when set to expect an output)
  • Removed superfluous OutputMeasurementKeys property from DatabaseNotifier and EmailNotifier
  • Updated DatabaseNotifier to default to locally configured database as defined in "systemSettings" when database configuration string is left blank.
  • Simplified and fixed operation of DatabaseNotifier and related adapters.
  • Updated basic command parameter typing for DynamicCalculator DateTime values to try both exact and loose formats.
  • Improved status details of DynamicCalculator adapters.
  • Fixed bug in Initialize() DynamicCalculator method that was parsing publicationInterval instead of calculationInterval from the connection string.
  • Tweaked Historianadapters OptimizeLocalHistorianSettings() to remove config file sections when adapters are deleted, but not when they are disabled.
  • Added adapter to TestingAdapters synchronize local clock with time from incoming measurements.
  • In the SynchronizeLocalClock adapter of TestingAdapters, modified logic for forcing connection string parameter values to eliminate invalid lagTime errors.
  • In GrafanaAdapters, made GrafanaDataSourceBase class serializable.
  • In PIAdapters, added an instance tracking dictionary that can be used by an OSI-PI Grafana controller
  • Added some read optimizations to PI Input Adapter for historical data query.
  • Added tag prefix remove count option to data playback for PI Adapters.
  • Cleaned up default properties of PI input adapter used for historical data queries.
Various GSF Library Updates
  • Fixed unhandled null reference exception in GSF.Windows when authentication fails in the Manager.
  • Added flag to relax validation when processing schema files in GSF.COMTRADE.
  • Added code to the directory listing in order to parse null terminated strings in GSF.Net for FTP
  • Updated EmbedFile, the embedded C++ resource file builder, to allow for optional null terminating character.
  • Updated SQLite binaries to version 1.0.109 - corrected serveral CVEs, including:CVE-2015-3717, CVE-2018-8740, CVE-2015-3414, CVE-2015-3415, CVE-2015-3416, CVE-2015-3417, CVE-2015-5895, CVE-2017-10989, CVE-2015-6607, CVE-2016-6153, CVE-2018-8740
  • Moved build location for unit tests out of the Libraries folder.
  • Updated NuGet badges to use buildstats.info
  • In GSF.ServiceProcess ServiceHelper, modified call to security provider factory to provide passthrough principal and turn off auto refresh.
Various GSF Tool Updates
  • Updated StatHistorianReportGenerator to update DataAvailability table, if it exists
  • Added openECA to possible TSL known applications in StatHistorianReportGenerator.
  • Updated ArchiveLocator in StatHistorianReportGenerator to include search of local config files for archive file (when unspecified)
  • Updated AppConfig file to default to Statistics folder in StatHistorianReportGenerator - since this is the most common deployment folder for statistic archives.
  • Added diagnostic logging code to the StatHistorianReportGenerator so that any errors thrown by tool during nightly run can be captured and diagnosed - plus general code cleanup.
  • Updated database connection in StatHistorianReportGenerator to return null of no connection string or data provider string could be found (instead of raising an exception)
  • Updated StatHistorianReportGenerator reporting of invalid operation exceptions in PopulateDataAvailabilityTable to log an info message instead of an error message since many hosts will not have this table defined.
  • Added max height to the data grid in the OpenArchivesDialog of HistorianView.
  • Added event handler for LayoutUpdated of HistorianView to fix the SizeToContent property if the size is manually changed.
  • Updated LogFileViewer to check for and load command line arguments so that executable can be associated with .logz files, and hence double-clicked on to open.
  • Added the ability to filter by the Details Column in the LogFileViewer
  • Added the ability to skip a range of time in the LogFileViewer.
  • Added the ability to filter on Stack Details in the LogFileViewer.
  • Added new tables to common exclusion list in the DataMigrationUtility for data migration.
  • Removed AlarmState from the common exclusion list for data migration in the DataMigrationUtility.
  • Fixed order of inserts for nullable foreign keys in PostgreSQL in the DataMigrationUtility.
  • Added PostgreSQL statement to reset the auto-increment value for tables in which the utility performs identity inserts in the DataMigrationUtility.
  • Added DataDeleter and DataUpdater modules, translated from VB code written in 2003 to the DataMigrationUtility.
  • Added new CSVDataManager tool to the solution.
  • Improved header export operation of GEP Data Extractor and updated align timestamps label to include context about frame rate.
Time-series Platform Library Updates (GEP C++ API) - Includes Work for Addition of DataPublisher
  • Fixed config frame construction issue where both measurements of a phasor were not available in the metadata
  • simplified configuration update locks
  • Added extra null reference handling to DataSubscriber for cases where all callbacks may not be registered and race conditions on shutdown related to class termination
  • Removed redundant null pointer checks on message dispatch callbacks.
  • Added initial DataPublisher structures and filter expression syntax grammar with compiled parsing code and included antlr4 runtime files.
  • Remove redundant ANTLR4 runtime header files.
  • Simplified filter expression grammar related to IS (NOT)? NULL processing.
  • Removed the "||" string concatenation operator from filter expressions since "+" can overload this role.
  • Added structural implementation of listener based parser for filter expressions.
  • Added initial DataSet implementation and removed using namespace statements from header files for better usability.
  • Updated filter expression parser to accommodate walking the parse tree to start the evaluation process.
  • Added direct measurement parsing for filter expressions.
  • Improved filter expression parsing grammar and completed more functionality the parsing code.
  • Added initial implementation of expression tree to be used in filter expression parser.
  • More updates to expression tree structure and integration with primary filter expression parser.
  • Made all data row operations work with nullable value types.
  • Updates to nullable type implementation within expression tree.
  • Added coalese and iif expression parser function implementations.
  • Added nullable type abstraction so that specific type does not need to be known before checking if the instance has a value.
  • Simplified coalesce function to use abstract nullable type.
  • Added optional format parameter to ToString function overload that accepts a nullable datetime value.
  • Added publisher instance class for easier creation of multiple data publishers.
  • Added string helper functions and core structure of convert function.
  • Added functions to copy all device and measurement metadata and added DfDt measurement to configuration frame.
  • Completed filter expression convert function
  • Added overload to accept non-pointer based measurements for data publisher measurement publication function
  • Added function publication overloads to publisher instance class.
  • Updated instance subscriber example to work with latest updates.
  • Updated old license headers in source files
  • Ticked build version number to indicate updates to data publisher
  • Completed expression functions
  • Fixed build errors from last check-in
  • Fixed where clause null handling
  • Improved null value generation handling by filter expression parser.
  • Code complete on filter expressions.
  • Updated parameter names for consistency on common string Compare function.
  • Improved filter expression tree operations related to boolean and nullable types.
  • Simplified nullable operations.
  • Filter expression parsing general code cleanup and simplifications.
  • Added TOP limit and ORDER BY sorting to filter expressions
  • Updated expression tree unary values to not require a pre-evaluated value expression.
  • Modified ExpressionTree to make Evaluate overload that takes expression pointer to be private.
  • Improved multi-value order by expression handling
  • Cleaned up const reference application in filter expression parser.
  • Fixed greater than or equal to operation detection and root expression evaluation - also, general code clean-up
  • Added table add/remove functions to DataSet implementation
  • Update ToString template function to inline implementations for better library support.
  • Renamed DataSet::AddTable function to AddOrUpdateTable to better reflect its functionality.
  • Renamed DataSet namespace to Data to reduce conflicts with DataSet class
  • Fixed strcpy_s length parameters and expression tree shared measurement pointer reference.
  • Added initial filter expression parser test code
  • shared ptr and any type reference fixes.
  • Improved GUID grammar detection, parsing and generation
  • Reordered GUID token grammar definition before string for better identification.
  • Common types code cleanup.
  • Improved grammar related to order by column names and boolean literals
  • Added case insensitive string operations for unordered_map and applied to DataTable column lookups
  • Fixed value data types for LEN and SUBSTR functions.
  • Added more filter expression tests.
  • Added functions to optionally allow access to full filtered row matches.
  • Added static ParseXmlDataSet to create a DataSet from an XML data set with schema.
  • Added overloads to DataRow read/write column functions that take column name input, complementing functions that take column index input.
  • Added test functions to FilterExpressionTests to validate loading DataSet from an XML source.
  • Setup filter expression tests to run all dataset tests on both sample files.
  • General code clean-up.
  • Improved grammar parsing related to TOP limit in filter expressions.
  • Added tests for TOP limit of filter expressions
  • Updated convert function to accept more types.
  • Restructured expressions in grammar to better handle common NOT keyword expressions.
  • Added flag to optional require signalID filtering and provided static row expression evaluation and table select functions.
  • Filter expression parser update - grammar restructuring and added new function templates (not complete)
  • Corrected ordering of keyword terminals in filter expression grammar from last check-in.
  • Corrected expression parsing for functions with zero arguments - also, renamed Max and Min functions to MaxOf and MinOf so users familiar with SQL with not presume these are aggregate operations.
  • Completed more filter expression function implementations.
  • Improved date-time parsing.
  • Simplified timestamp parsing function.
  • Added DateAdd functions
  • Added final tests and fixes for date functions in filter expressions
  • Completed implementation of IsDate, IsInteger, IsNumeric and IsGuid filter expression functions.
  • Set default console error suppression to be based on debug mode - defaults to suppress = true in release mode.
  • Added ability to add error listener to filter expression parser so that any grammar parsing exceptions could be logged or displayed as needed.
  • Updated NOT operations to consistently work with either "NOT" keyword or "!" symbol.
  • Added simplified callback for handling parsing exception messages to avoid user having to create an ANTLR error listener class.
  • Added binary comparison operator to ORDER BY expressions so that case sensitivity of sorts could be user controlled.
  • Remove type restriction on IsNull filter expression function.
  • Added XOR bitwise operator to filter expressions.
  • Reorganized namespace for common library functions and filter expressions - this included file shifting to match namespaces.
  • Added exception to DataRow::SetNullValue for computed columns.
  • Added initial code to allow for computed data set columns.
  • Minor code optimizations and cleanup per PVS-Studio analysis.
  • Updated to latest antlr4 C++ runtime code.
  • Optimized use of unordered sets so that use would only be necessitated when multiple filter expression statements are used, which is a less common case.
  • Completed computed column operation for DataColumns.
  • Updated DataSet XML parser to properly pickup columns that have an expression defined in the schema.
  • Updated filter expression parser to handle edge case of encountering standalone Guid when not tracking rows or table identifiers.
  • Made sure free DataRow values before updating them.
  • Minor code tidy up for FilterExpressionParser.
  • Added XML generation functions for DataSet.
  • Updated secondary metadata sample to include computed column that is used by unit tests.
  • Added Now and UtcNow functions that return microsecond precision timestamps.
  • Updated EndianConverter with static functions that take a buffer and use default instance.
  • Added client string encoding and decoding functions to DataPublisher
  • Added TryGetValue helper for maps that use custom StringComparer for case insensitive lookups.
  • Added CloneColumn and CloneRow functions to DataTable.
  • Added static Evaluate function to FilterExpressionParser that accepts an ExpressionTree.
  • Added more subscriber metadata response code to DataPublisher.
  • More work on DataPublisher metadata management.
  • Added common Timer class.
  • Updated client connection async socket write code.
  • Added simple publisher test project.
  • Updates to SimpleSubscriber to accommodate latest code changes.
  • Updated remaining sample projects to work with recent library changes.
  • Updated SimplePublish sample to properly run.
  • Modified DataSubscriber data packet handler to process new measurements directly on the async callback thread instead of sending the packet for processing on the dispatch queue as a potential optimization.
  • Added client command handling to data publisher.
  • Added ParseKeyValuePairs, PadLeft, PadRight, StringHastSet and StringMap options to assist with DataPublisher subscription operations.
  • Opted for unordered_map over map where possible as a simple optimization.
  • Updated SubscriberInstance to internally use unordered_map implementations as an optimization.
  • Added code to handle application of meta-data filters.
  • Updates to common types.
  • Corrected SendClientResponse methods and improved client startup / shutdown operations.
  • Improved client shutdown order of operations to better handle invalid socket terminations.
  • Added metadata schemas as embedded resources to simplify metadata generation.
  • Added code to take defined metadata structures, e.g., those used with subscriber, and create meta-data tables
  • Developed code to translate common normalized metadata into a flat ActiveMeasurements table for easier client measurement selection filtering..
  • Fleshed out more code related to handling of new client subscriptions and signal index cache management.
  • Removed compression modes property from client connection since it can be derived from operational modes.
  • Converter function pointer to standard function templates to support more versatile function registration, e.g, lambda expressions.
  • Added user data property for publisher instance and performed some subscriber code cleanup
  • Fixed issues with instance subscribe example.
  • Updated samples to control DataSubscriber lifetimes within main function to accommodate desired order-of-operations for standard function pointer destruction.
  • Optimized data subscriber data packet parsing operations.
  • Added common Ticks time structure constants.
  • Added default swap order flag to ParseGuid operation based run-time endianness and fixed a logic error in ParseBoolean function.
  • Added compact measurement serialization function for DataPublisher use.
  • Implemented signal index cache serialization and general code clean-up.
  • Updated DataRow to properly delete filter expression parser for computed columns upon destruction.
  • Fixed issues with active measurements generation from common metadata, plus general code clean-up
  • Added meta-data publication code to SimplePublish sample.
  • Added metadata management and simple publication timer to SimplePublish example.
  • Added initial compact measurement publication code.
  • Improved ticks to ptime conversions.
  • Added ticks to/from ptime conversion test.
  • Added signal filtering logic to measurement publication
  • Added overload code for measurement publication when source is a vector of shared pointer measurements.
  • Added self-note for future optimization.
  • Added AdvancedPublish sample that provides metadata via locally defined structures.
  • Fixed operation of advanced publisher code.
  • Added data type reasonable random values to AdvancedPublish sample.
  • Updated DefineMetadata to swap member level active filtering metadata with locally loaded metadata to minimize impacts to operations in use.
  • Updated sample code to use latest common types and functions.
  • Moved code from DataPublisher to SubscriberConnection as needed.
  • Updated code and cmakelist to run on Linux.
  • Fixed Linux build issues.
  • Fixed expression operator type acronym definition.
  • Disabled inline function expansion in release mode for VS to correct issues, see: https://developercommunity.visualstudio.com/content/problem/297477/vs-2017-15741575-crash-caused-by-activated-inline.html
  • Added temporal support options to DataPublisher interfaces.
  • Added missing prefixes to common data types in ExpressionTree.
  • Improved handling of SignalIndexCache instance within DataPublisher
  • Fixed multi-threaded send response issues with DataPublisher.
  • Fixed string encoding issues with C++ vs .NET endianness and wchar_t size differences with Windows and Linux
  • Corrected ANSI encoding interpretation in DataPublisher
  • Updated strand operations to use newer non-deprecated boost functions.
  • Added initial temporal playback sample to AdvancedPublish sample.
  • Improved temporal processing support by DataPublisher
  • Added an instance UUID representing a unique run-time identifier for the current subscriber connection that can be used to disambiguate when the same subscriber makes multiple connections
  • Simplified temporal subscription connection processing.
  • Simplified timer operations and temporal support.
  • Updated to common data types.
  • Updated timer operation thread to interrupt on stop.
  • Added auto-parse metadata behavior to reconnect sequence in SubscriberInstance.
  • Improved shutdown order of operations on temporal connections.
  • Fixed readme install steps for Ubuntu
  • Simplified temporal subscription shutdown processing.
  • Added InstancePublish sample to show how to create multiple GEP data publisher instances.
  • Cleaned up temporal replay functions of AdvancedSubscribe sample.
  • Added initial implementation of maximum allowed connections for DataPublisher instances.
  • Cleaned up shutdown and restart operations related to refused connections when maximum allowed connections is exceeded.
  • Updated DataPublisher to notify all subscribers that the configuration metadata has changed when the DefineMetadata function is called.
  • Added iterator handler to safely access connected subscriber instances from DataPublisher.
  • Added routing tables optimization to DataPublisher.
  • updated RoutingTables to use reader/writer lock as an optimization.
  • Minor optimizations to RoutingTable implementation.
  • Updated use of shared pointer derefs to const reference instances in RoutingTables.
  • RoutingTable post testing cleanup.
  • Removed extraneous tab characters from source code files.
  • Reshuffled TSSC point metadata class to accomodate TSSC encoder for data publisher.
  • Applied proper portable implementation of STDC_WANT_SECURE_LIB for strcpy_s string functions and removed compile warnings
  • Renamed TSSCMeasurementParser to TSSCDecoder
  • Added TSSCEncoder class.
  • Updated data publisher to properly process TSSC style subscriptions.
  • Added data publisher support for UDP connections.
  • Simplified payload compression flag utilization in subscriber connections for data publisher.
  • Simplfied data publisher threading implementations.
  • Added static assestions that will fail at compile time if float is not 32-bits and double is not 64-bits since compression depends on this.
  • Updated constant literals in common types to use proper literal suffixes for given types.
  • Changed locking mechanism of subscriber connection management in data publisher to be reader / writer lock based.
  • Added better invalid protocol detection and protection code.
  • Improved exception responses from subscriber meta-data filtering expressions.
  • Updated uint64_t literal suffixes for consistency.
  • Updated TryParseUInt16 to fail for integers larger than uint16 max value instead of downcasting.
  • Added base time offset rotation timer to data publisher for compact format.
  • Added throttled subscription support to DatabPublisher and MeasurementStateFlags enum class for better quality state flag support.
  • Corrected advanced subscribe sample to remove obsolete RemotelySynchronized parameter and added test functionality to send a custom user command.
  • Updated ToHex function to report hex values in uppercase.
  • Moved obsolete publish command measurements server command.
  • Added missing property implementation for publish interval to subscriber connection.
  • Added ability for data publisher implementations to add custom handlers for user-defined server commands and payload.
  • Updated buffer block and notify response handlers to use custom handler for user-defined commands to allow for post-API developed implementations to manage these features if needed.
  • Back ported bug fixes and 64-bit improvements to GEP from recent STTP updates.