We are happy to announce the release of kbmMW v. 4.70.00 Professional and Enterprise Edition. kbmMW continues to set the bar for what an n-tier product must be capable of in the real world! New stuff ========= - Added support for marshalling and demarshalling generic TDictionary descendants. - Added native LZH support including new TkbmMWLZHCompression component. Notice that LZH compression gives good compression, but at a cost of CPU cycles. Thus requests per second will be drastically limited. For this reason, its best to use the compression on a separate transport accessible only by devices that require compression, and leave other devices communicate via a server transport that is not compressed. As the LZH compression is in native Pascal code, it should compile for IOS/Android too. - Added support for tentatively pushing messages to a queue. The message is not available for pop, until the push has been committed. Alternatively the push can be rolledback. - Added support for streaming true native int64 in TkbmMWBinaryStreamFormat. Upped the stream version to 47000. Its still backwards compatible. - Added multilevel congestion support and filtering on message queues. CongestionPriority is used for determining which messages to drop (all from this priority and below) when CongestionThreshol has been reached. CongestionThreshold is now considered the last barrier of defence for filtering out both low and higher priority messages. CongestionPriorityLow and CongestionThresholdLow is a new congestion barrier added to filter out low priority messages. - Added TentativelyPushedMessages and renamed PoppedMessages to TentativelyPoppedMessages to message queues. Returns number of tentatively (and thus not visible) pushed messages, and already popped but not committed messages. - Added support for read/write float and double data, little endien and big endian in TkbmMWMemoryStream. - Added Swap16, Swap32, Flip16, Flip32, Flip8 to TkbmMWPlatformMarshal. - Added PassedTime to TkbmMWTiming. Same as HasPassedTime but returns new base time. - Added kbmMWHashString64 and kbmMWHashWideString64. Renamed old kbmMWHashString and kbmMWHashWideString to kbmMWHashString32 and kbmMWHashWideString32. Calculates 32 and 64 bit versions of FNV-1A hashes. - Added kbmMWSubjectStartsWith to kbmMWSubjectUtils.pas - Added support for using IOS/Android native logging when using kbmMWDebug features. Changes/minor additions ======================= - Updated SQLiteServer and Client samples to allow selection of compression. - Improved TCPIP Indy client messaging transport disconnection. - Changed statistics timestamps to (potential) ns precision. Fixes ===== - Fixed buffer overrun in TkbmMWStringList.SetTextStr. - Fixed bug related to XE7 and field lifecycle on error table. - Fixed CPU cores pegged at 99% by making use of TLightweightEvent optional on XE3 and up. Now default is disabled and TEvent is used instead. Reason is that it has shown to be unstable on loaded systems getting into endless spinwaits, hogging all CPU cores. - Fixed A/V when nodes are missing in streamed TkbmMWXMLAuthorizationStorage data upon load. - Fixed field ownership in TkbmMWXMLStreamFormat and TkbmMWJSONStreamFormat. - Fixed incorrect JSON escaping forward slash. - Fixed GetAsStream in TkbmMWJSONNative. - Fixed missing platform attributes. - Fixed kbmMWExplode for NextGen compilers. - Fixed kbmMWSafeString for NextGen compilers. - Fixed kbmMWExtractParameter for NextGen compilers.