Latest release of The Server Framework: 7.3

Version 7.3 of The Server Framework was released today.

This release includes bug fixes and new code.

As always, see the release notes here, for full details of all changes.

Bug fixes:

  • Fixed a bug with JetByteTools::Core::CCallbackTimerWheel which would show up if the time provider was providing ticks at a different granularity than the granularity of the wheel.
  • Fixed a bug in CDatagramSocketConnectionManager and CDatagramSocketServer where the buffers returned in write and sendTo completion callbacks had an incorrect number of bytes set as ‘used’.

Changes:

  • Clearly identify any open source software used by the framework and make it easy to disable it or see the relevant license details.
  • Preparations for making the code compile on other platforms.
  • More libraries now require that you include their Admin.h files in your Config.h file if you wish to use them.
  • Removed some code used during testing and debugging of the framework where the code is either unsupported in the forthcoming 8.0 release or broken/untested/unused.
  • Added support for a new method of dynamic object leak tracking.
  • Removed the need for WinsockWrapper.h any reference to this header should be removed.
  • Rationalised the nascent dynamic debug log functionality to bridge the gaps between the 6.9.x customer specific code and the 8.0 (different customer) specific code to something that works in a way that works for everyone. Framework libraries now often have a CDebugLog class which includes their debug log functionality and this can be dynamically adjusted during runtime.
  • Added CAllFrameworkDebugLogs which automatically locates and initialises all available framework dynamic debug logs.
  • Made it possible to turn off a Output() and OutputEx() debug log output by setting JETBYTE_CORE_ENABLE_DEBUG_TRACE_OUTPUT to 0 in your Config.h
  • Added CCachedValueTickCountProvider which only queries the current tick count on the first call and then returns the same value.
  • Added CFixedValueTickCountProvider which returns the value given to it in its constructor.
  • Added CHighResolutionTickCountProvider which uses the highest resolution tick count source for the operating system.
  • Moved JetByteTools/IOTools/Data.h to JetByteTools/Core/Data.h
  • Added TDynamicObjectTracker for use by derived classes that can track leaks in dynamically allocated object instances.
  • Added CDynamicObjectTrackerCollection which allows you to report on leaked objects.
  • Changed the JetByteTools::Core::IQueueTimers interface so that implementations can report back to the caller if the operation performed has changed the first timer that will expire. This allows for an optimisation to threaded timer queues so that they need not wake the timer thread if the next timer to expire has not changed.
  • Added CThreadBase which deals with various thread event listeners in a thread-implementation agnostic manner.
  • Thread pools now work in terms of IAsyncWorkItem rather than OVERLAPPED as this makes cross platform code easier.
  • Expanded the functionality of IMonitorThreadPool so that all thread pools can now be monitored by the same interface.
  • Added non-throwing, bool-returning, “try” operations to TReusableIdManager
  • CSimpleMessageLog can now include thread names in the log information.
  • CActivatableObject can now have data added using an array of Data structures.
  • CActivatableObject can now have a custom command processor callback function added with each command.
  • Added CActivatableObject::CommandWrapperEx which is a wrapper that deals in terms of arrays of Data structures.
  • Added CActivatableObject::CommandProcessorCallback::OnActivatableObjectProcessCommandEx() which allows you to process a ‘pass through’ command that uses arrays of Data structures as is rather than as a contiguous single block of data.
  • Added CActivatableObject::ProcessingFlags::AllowRecursiveProcessing
  • Added TOptionallyOwnedPointer
  • Added CQueueSpaceNotifier
  • Added CRateLimiter
  • Added CThreadSafeRingBufferWorkQueue
  • Added CThreadSafeRingBufferWorkPool
  • Added CFiberLocalStorage
  • Added CMutex
  • Added CPerformanceCounterMonitor
  • Added JETBYTE_WIN32_DEPRECATE_OPTEX which defaults to 1.
  • Removed the embedded WSABUF structure from the IBuffer interface. This is only required when the I/O call is issued and does not need to exist after the function call returns and so does not need to be part of the buffer itself. This also removes the need for the SetupX methods that were previously called prior or executing I/O operations.
  • Added IBuffer:MakeSpaceAtFrontIfPossible()
  • Added JETBYTE_IO_DEPRECATE_BUFFER_USER_DATA which defaults to 0.
  • Added JETBYTE_IO_DEPRECATE_SEQUENCED_BUFFER_COLLECTION which defaults to 0.
  • Added JETBYTE_IO_DEPRECATE_BUFFER_CHAIN_CUSTOM_BUFFER_INDEX which defaults to 0.
  • Added CBufferFacadeOnRawMemory
  • Added TBufferPool
  • Added CCustomPoolBufferAllocator
  • Added IAssociateDeviceWithIOSubSystem
  • Added IAllocateBuffers::AllocateBuffers and IAllocateBuffers::AllocateBuffersForBytes
  • Added CBufferChain::CopyChainIntoBuffer and CBufferChain::CopyDataIntoChain
  • Added lots of wrappers for various aspects of OpenSSL that are used by SRTP and streaming media.
  • Added CSharedMemoryMutexPerformanceDataBlock which can be used when the Optex version has been deprecated. This version is also more reliable as it can’t be left orphaned.
  • Added IAddress::IsWildcardAddress()
  • Adjusted how the CAddressIPv4 constructor works with the supplied dottedIPorName string, it now tries to convert names if it can, rather than just assuming it was a dotted ip…
  • Adjusted how the CAddressIPv4 constructor works with the supplied addressAsString string, it now tries to convert names if it can, rather than just assuming it was a dotted ip…
  • Adjusted how the CAddressIPv6 constructor works with the supplied addressAsString string, it now tries to convert names if it can, ratherthan just assuming it was a dotted ip…
  • Added CNetworkInterfaceAddresses which is now used to list available interfaces rather than using the zero argument version of CAddressInfo, which has been removed.