ReplicaNet Release notes

The workspace for all example projects are contained in the 'Examples' directory. The workspace file for Visual Studio 6.0 is 'Examples\Examples.dsw'. The DotNET2003 solution file is 'Examples\Examples2003.sln'.

Each example has a "readme.txt" file that explains the brief outline of each example.
Example 4 is a particularly useful example that shows how to use ReplicaNet inside a typical game situation where the game uses classes for each object.
The 'Docs' folder contains Doxygen generated documentation and CHM files for this build of the libraries

The components to ReplicaNet are in the ReplicaNetPublic folder. Your include directories need to be set to "ReplicaNetPublic/Includes". The relevant library for the type of build you require must be linked from "ReplicaNetPublic/Libs".

The tutorial index can be found in "Tutorials\index.html"

Important!

Visual Studio 6
The library files for MSVS6.0 can be found in 'ReplicaNetPublic\Libs\LibVC6'.

dotNET2003 builds.
The library files for dotNET2003 can be found in the 'ReplicaNetPublic\Libs\LibDotNET2003' directory.

Linux
The library files, headers and tools for Linux can be found in the 'ReplicaNetLinux.tar.gz' archive.

Common headers
The header files for all builds are in the 'ReplicaNetPublic\Includes' directory. Workspace DSW and solution SLN files are available in the 'Examples' directory.


Windows build notes
Using the wrong library version for the wrong compiler version will generate very strange errors at link time.
Be sure to include the correct runtime code generation options in your project. Recently some very odd crashes and memory corruption bug reports were submitted that were tracked down to a developer mixing Multithreaded DLL ReplicaNet libraries with third party single-threaded libraries.

DotNET2003 may produce "libci.lib" link problems when using some versions of the DirectX SDK. To resolve this problem add "libci" to Project Properties->Linker->Input->Ignore Specific Library.

The graphical examples use the Microsoft® DirectX® 9.0 SDK Update (April 2005) with patches for Visual Studio 6.0 from the Microsoft® DirectX® 9.0 SDK Update (Summer 2003) and this was used to test the installation. This DirectX version still maintains compiler support for Visual Studio 6.0 where later DirectX SDK versions remove this compiler support. The library and header files for this version of the DirectX SDK can be downloaded from http://www.replicanet.com/DX90SDK.zip.

The Windows Platform SDK used with Visual Studio 6.0 is Windows Server 2003 PSDK Full Download with Local Install and is available from http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm

The Visual Studio 6.0 compiler has been tested with service pack 5 or 6. Without one of these compiler service packs installed it is unlikely that any of the DirectX examples will compile. The service packs can be downloaded from http://msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp5/default.aspx
http://msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp6/default.aspx

To get technical support on any issues you may have please email techsupport@replicanet.com


Release V5.4

Additions and changes  to the API

  • A quick view of functions added:
    ReplicaNet::SetPlaybackSpeed()
    ReplicaNet::PlaybackAdvanceTo()
    ReplicaNet::GetSessionRecord()
    XPSock_GetHardwareStatus()
    [ReplicaNet/XPSession]::[Set/Get]NodeBuffers()

  • ReplicaNet and XPSession have session manager and ReplicaObject database optimisations.

  • ReplicaNet and XPSession can utilise extra memory to offset thread synchronisation costs by using SetNodeBuffers().

  • Network session recordings can now be started at any time and are not limited to starting before a session is created or joined.

  • Playback of a network session recording can be paused or played at any other speed or advanced to any future time.

  • When a playback of a recording finishes ReplicaNet::GetSessionErrorReason() returns ReplicaNet::kReplicaNet_EEND_RECORDING

  • Extra debugging information is shown by RNVisualDebugger for  DataBlocks, including function parameters and other parameters used to configure the DataBlock to show if/when those values are changed by the user.

  • When RNVisualDebugger makes a successful debug connection to a ReplicaNet session the address of the node is included in the debug file.

Bug fixes

  • DataBlock_Predict_Float would sometimes use an old incorrect value when migrating a ReplicaObject from a session node to a different session node and then back to the original session node.


Release V5.3

Additions and changes  to the API

  • A quick view of functions added:
    ReplicaNet::BeginSessionRecord()
    ReplicaNet::StopSessionRecord()
    ReplicaNet::CallbackSessionRecord()
    ReplicaNet::BeginSessionPlayback()
    ReplicaNet::StopSessionPlayback()
    ReplicaNet::CallbackSessionPlayback()
    ReplicaNet::GetSessionPlayback()
    ReplicaNet::SetPlaybackAllowMasterReplicaObjects()
    ReplicaNet::GetPlaybackAllowMasterReplicaObjects()
    DebugHandler::CallbackConnectionError()
    ReplicaNet::CallBackAllocate()
    ReplicaNet::CallBackDelete()
    Transport::GetTransportClosed()
    XPSession::GetSessionErrorReason()
    ReplicaNet::GetSessionErrorReason()
    Transport::SetEnableLANDiscovery()
    XPSession::SetAllowConnections()
    XPSession::GetAllowConnections()
    ReplicaNet::SetAllowConnections()
    ReplicaNet::GetAllowConnections()

  • Recording and playback of ReplicaNet sessions is now possible using the SessionRecord/SessionPlayback functions. The CallbackSessionRecord/CallbackSessionPlayback functions allow the user to implement their own storage solution for the data. Example4 has been updated to use this functionality.

  • Added virtual void DebugHandler::CallbackConnectionError() to allow visual debugger connection errors to be detected.

  • ReplicaNet::CallBackAllocate() and ReplicaNet::CallBackDelete() allow users to override the ReplicaObject allocation and deletion behaviour from a callback.

  • Example 2 has been updated to show how to add custom data types to networked function parameters.

  • Transport::GetTransportClosed(), XPSession::GetSessionErrorReason() and ReplicaNet::CallbackSessionErrorReason() allows the type of transport and session errors to be determined.

  • LAN Discovery of transports can be enabled or disabled by using Transport::SetEnableLANDiscovery().

  • A master session can now allow or deny other session nodes from joining a session by using SetAllowConnections() when using ReplicaNet or XPSession.

Bug fixes

  • Fixed a bug in the RNROLCompiler when parsing ">" directives such as "object > RealInclude..."

  • Fixed sending data packets with ReplicaNet when SetDataRetention() is not true would result in an assert "Not allowed to leave unknown packets types in the queue".

Other changes

  • The RNVisualDebugger displays packets in the list view sorted by time.

  • The RNVisualDebugger remembers the last settings used for the Connect dialog.

  • The RNVisualDebugger debug output for DataBlocks contains more information about what distance and tolerance values are used when calculating updates.

Compiler support

  • Support for DotNET2002 has been discontinued. Visual Studio 6.0, DotNET2003 and Linux continue to be supported. Support for DotNET2005 will be added when the compiler finishes its beta phase.

 

Release V5.2

Additions and changes  to the API

  • A quick view of functions added:
    XPSock_SentHistogram()
    XPSock_RecvHistogram()
    TransportConfig::PacketBufferBeginCaptureWindow()
    TransportConfig::PacketBufferEndCaptureWindow()
    TransportConfig::SetPacketBufferEnable()
    TransportConfig::GetPacketBufferEnable()
    DataBlock::GetForceSendTimeDelay()
    DataBlock::GetForceSendMaximumUpdates()
    XPSession::GetBandwidthFromSessionID()
    ReplicaNet::GetBandwidthFromSessionID()

  • Detailed logs of the packets sent using the low-level XPSock API can be created by using XPSock_SentHistogram() and XPSock_RecvHistogram(). For example the reliable UDP transport uses the cross platform XPSock layer.

  • The application can now define a specific window for packet buffering to use. TransportConfig::PacketBuffer[Begin/End]CaptureWindow(). Packet buffering will now need to be enabled or disabled by using TransportConfig::SetPacketBufferEnable() in conjunction with the packet buffer API. If TransportConfig::SetPacketBufferTime() was used previously, a new call to SetPacketBufferEnable() will need to be added.

  • DataBlock::GetForceSendTimeDelay() and DataBlock::GetForceSendMaximumUpdates() have been added.

  • Configuration options have been improved  for reliable UDP packets that have been lost or have missing ACKs by increasing the table of resend times. TransportConfig::SetResendTimes() and TransportConfig::GetResendTimes() have been updated.

  • The CXPSession interface, to allow the XPSession class to be used from C, has had the extra functionality of XPSession added.

  • It is now possible to read the configured bandwidth of a session by using the [XPSession/ReplicaNet]::GetBandwidthFromSessionID() functions.

  • The RNPlatform utility library has been made available to all builds so that applications wishing to only use the RNPlatform headers do not need to include the RNXPURL library.

Bug fixes

  • The changes to the reliable UDP transport resend times and internal buffering controls in the event of excessive packet loss have improved the situation where the Demo1 game session will stay connected when emulating 1000ms latency, 300ms jitter and 30% packet loss. The plane pitch and roll values have also had maximum values added so that latency artefacts with these rotation values are much less apparent.

 

Release V5.1

Additions and changes  to the API

  • A quick view of functions added:
    ReplicaNet::SetAutomaticPacketCompression()
    ReplicaNet::GetAutomaticPacketCompression()
    ReplicaNet::GetCompressionStatistics()
    ReplicaNet::GetMergedStatistics()
    ReplicaNet::SetPollLayerBelowForXPSession()
    ReplicaNet::GetPollLayerBelowForXPSession()
    ReplicaNet::GetMasterSessionID()
    ReplicaNet::GetURLFromSessionID()
    XPSession::SetAutomaticPacketCompression()
    XPSession::GetAutomaticPacketCompression()
    XPSession::GetCompressionStatistics()
    XPSession::GetMergedStatistics()
    XPSession::GetMasterSessionID()
    XPSession::GetURLFromSessionID()
    ReplicaNet::SetClientOnly()
    ReplicaNet::GetClientOnly()
    XPSession::SetClientOnly()
    XPSession::GetClientOnly()

  • Automatic packet compression can be configured by using:
    XPSession::SetAutomaticPacketCompression()
    XPSession::GetAutomaticPacketCompression()
    XPSession::GetCompressionStatistics()

  • Added RNPlatform include files to the documentation.

  • Added documentation for FreewareSetRegistrationCode().

  • Packet buffering (coalescing/packet marshalling) has been added to the RNXPURL library with the TransportConfig::SetPacketBufferTime() and related functions. Transport::GetPacketsSentMerged() and Transport::GetPacketsReceivedMerged() have been added to the Transport class. ReplicaNet::GetMergedStatistics() and XPSession::GetMergedStatistics() have also been added to allow packet statistics to be read.

  • Spider nodes or potential master nodes now try to use the configured game channel for their listen connections first. If the transport isn't listening on the game channel when it becomes a master node it will try again to allocate listen connections using the configured game channel.

  • Spelling errors corrected and documentation made clearer for numerous functions.

  • Client only nodes can now be configured using XPSession/ReplicaNet SetClientOnly() and GetClientOnly(). If set then the node will only receive session joiner and leaver notification for nodes that are able to become a master node and use spidering. This helps a MMO type of game enforce a rigid data propagation policy for client nodes connecting to peer-to-peer server nodes.

  • The ability to control the use of threads used for XPSession and XPURL from ReplicaNet has been added with the SetPollLayerBelowForXPSession() function.

  • The session ID for the master session can be read using the [ReplicaNet/XPSession]::GetMasterSessionID() function.

  • A session ID can be resolved to a URL using the [ReplicaNet::XPSession]::GetURLFromSessionID() function.

  • Transport Network bandwidth can be configured by transport type using Transport::SetBandwidthLimit() and Transport::SetMaximum[Output/Input]Bandwidth() functions.

Bug fixes

  • The reliable UDP disconnect packet was not be being matched against valid input packet addresses for a socket created from a connect call. This would cause a premature disconnect if a socket received this packet from any other address that isn't valid.

  • Extraneous reliable UDP disconnect packets were being sent when a connection was already broken by one end of the communication channel.

  • Fixed a bug caused by network emulation being enabled with packet latency, which then was not sending disconnect packets when a transport was disconnected or deleted. This was causing the disconnection to take longer than normal when network emulation was enabled.


Release V5.0

Breaking changes

  • Header files are now fully qualified. For example #include "ReplicaNet.h" has changed to be #include "RNReplicaNet/Inc/ReplicaNet.h". Similar changes are required for all of the other ReplicaNet, XPSession and XPURL header files.

  • Now all ReplicaNet classes are in the RNReplicaNet namespace, previously used empty forward declarations of ReplicaNet classes might produce compiler errors. The fix for this is to make sure your own empty forward declarations of ReplicaNet classes are included in the correct namespace.

  • Examples, tutorials and documentation have been updated to use the new library directories and the new directories for the RNROLCompiler.

Additions and changes  to the API

  • A visual debugger had been added called RNVisualDebugger and is able to display debug information about a network session. The preprocessor define REPLICANET_VISUALDEBUGGER is used to turn on this extra debug information. The standard implementations of DataBlock_NData, DataBlock_PredictFloat and DataBlock_Function have been updated to use this macro. The new DebugHandler class ("XPURL/Inc/DebugHandler.h") can be extended and registered with the XPURL::RegisterDebugHandler() function. Please see the XPURL and the ReplicaNet documentation for more information.

  • Added more speed improvements for distance based propagation.

  • When using DataBlock_PredictFloat delta hints the resulting extrapolation has been improved to be more accurate.

  • DataBlock::SetID() changed to be protected and a friend of ReplicaObject to highlight that this function method should not normally be called by the user.

  • Added ReplicaNet::[Set/Get]DataBlockUpdatePolicy() and ReplicaNet::ProcessDataBlockUpdate() to optionally separate the DataBlock updates from the normal ReplicaNet::Poll() or threaded periodic updates.

  • The pure virtual ReplicaObject::GetRegistryBlock() has been promoted from private to public to allow the s_RO_RegistryBlock for an unknown ReplicaObject class to be queried by the user.
    For example, to get the registered class name of an unknown "ReplicaObject *theObject" pointer:
    theObject->GetRegistryBlock()->GetName()

  • XPSession::SetLatencyRecalculationDelay() and therefore ReplicaNet::SetLatencyRecalculationDelay() have had their algorithm changed to calculate a more accurate latency to the master session. The input parameter meaning has changed so existing code should be checked for this change.

  • XPSession/ReplicaNet::GetLatencyToMasterSession() was reporting latency in the event of the master disconnecting and a session becomming master. The latency is now reported to be 0 seconds if the session becomes the new session master.

  • DataBlock update filters have been extended to use the functions SetUpdateDelayMinimum(),SetForceSendMaximumUpdates() and
    SetForceSendTimeDelay(). Please see the ReplicaNet documentation for a complete description.

  • XPSock_GetHostAddress() (and Transport::ExportURL() which uses this function) changed to avoid using DNS queries if at all possible.

  • XPSock_Send() and XPSocket::Send() changed to return the number of sent bytes.

  • Session spider messages have been made shorter, this improves network bandwidth from the master session.

  • XPSession fault recovery and notification of faults improved.

  • Documentation improved relating to GetTime() and GetLocalTime().

  • Each example ReadMe.txt file states what build configurations are available.

  • Examples 1,4,9 updated to include a section on how to implement a graceful shutdown for ReplicaNet.

  • SysTime.h is now a public include.

ROLCompiler and ROL Language changes

  • RNROLCompiler object::datablockcustom() This keyword defines a custom DataBlock that is used in the object and added in to RNROLCompiler documentation.

Bug fixes

  • RNROLCompiler object::addinclude() was changed so that it uses the whole line minus comments for the include file.

  • Removed a strdup and replaced it with malloc, strcpy. Was causing problems with the memory hooks.

  • Fixed a few bugs with session propagation filter and thus distance based propagation which uses the session propagation.

  • A session without an observer was getting a spike of all available objects when using distance based propagation.

  • Fixed a couple of std::string bugs that cause problems on non-Win32 versions of the STL.

  • Found a memory leak with TransportUDP that would very rarely leave memory allocated when the network stack was shutdown.

  • Fixed a bug if multithreading is enabled the session thread could hang if pre-connection is enabled.

  • Fixed a bug where broadcast packets were using too much bandwidth when spidering was enabled.

  • Bug fixed with reflected ReplicaObjects where some DataBlocks were not getting updated properly.

  • UDPReliableManager now frees all memory allocated in the databases when shutdown.

 

Release V4.1

Additions and changes  to the API

  • Fixed: ReplicaNet::DataReceive() was not setting the session ID properly.

  • Observer ReplicaObjects can now be allocated and used from any session node.

  • Fixed: A rare bug could have happened when deleting the ReplicaNet class and using XPURL::ShutdownNetwork().

  • The examples have not changed from the previous release.

Proposed breaking changes
The next version of ReplicaNet is planned to include one significant breaking change for existing code. This change will involve adding a RNReplicaNet namespace to the components XPURL and XPSession. The helper classes attached to ReplicaNet including, but not limited to, Encryption, PlatformInfo, SysTime, MutexClass and ThreadClass will also be added to the same RNReplicaNet namespace. The ReplicaNet component naming will remain unchanged. The quick fix for existing code could be to include "using namespace RN ReplicaNet;" at the top of every CPP file or, less recommended, inside a header file. The better fix would involve adding the prefix namespace "RNReplicaNet::" to every referenced class used in the ReplicaNet library, except the ReplicaNet class.

The second change to reduce header file name collisions will be to change all of the header files for each component to include the prefix "ReplicaNet/Inc/". The examples will be updated to reflect this change. To quickly fix existing code the header include directory could include both paths to the ReplicaNet include directory so that both the long and short versions resolve to the same location. The better fix could involve adding the necessary prefix to all header files that include parts of ReplicaNet components.

These changes have been driven by the need for developers to avoid potential name collisions for classes and header files.

This version will be called V5.0 to reflect this significant change in version from the previous releases.

Please email version5@replicanet.com if you wish to discuss or find out more about this particular change.

 

Release V4.0

Additions and changes  to the API

This is a large update with some very exciting additions to the API. A special thank you goes to the developers who helped to beta test the stability of this release.

  • ReplicaObject Session propagation, when enabled the ReplicaObject will ignore all joining sessions and the user application is then responsible for supplying the session IDs that this object will propagate to. This mechanism effectively turns off all ReplicaNet object propagation functions for this object, including the distance based propagation. This mechanism can only be enabled or disabled before the object is published to ReplicaNet. This gives full user control over how and where ReplicaObjects are propagated in a session.

  • For XPSession and ReplicaNet the function Disconnect() can be used to force disconnect any session node ID.

  • Before a session node fully connects, a state can be entered in to that allows raw data packets to be exchanged between the joining node and the master session node.

  • The raw packet mechanism has been added to ReplicaNet allowing user created raw data packets to be transferred.

  • Added two new examples that show the new features available in ReplicaNet V4.0

  • Updated Example6 to show how to create a DataBlock derived class that updates an STL container member variable.

  • For the DataBlock NData and NDataAt a new ROL keyword has been added DisableEndianTest(). This disables the endian test for the block of memory.

  • Removed a potential for a thread deadlock to happen inside TransportUDP with regards to THREADSAFELOCKCLASS(gUDPKnownAddresses) and THREADSAFELOCKCLASS(gUDPKnownTransports) being out of order is some cases.

  • Added build rules for Example2 Linux build. Also added extended build rules for the Linux libraries.

  • Known issues with Linux are with the pthread mutex mechanism where Linux pthreads operate differently to SGI IRIX pthread mutex. This Linux problem is expected to be resolved soon.

  • Added an extra class called NetworkVector3 to Example6 that shows how to create a networked representation of a 3D vector.

  • Documented the ReplicaObject extensions AllocateForReplicaNet() and DeleteForReplicaNet().

  • Fixed - Trying to call a network function on an object before it was published caused a null pointer exception.

  • It is possible to alter the disconnection and packet retry parameters using the TransportConfig class.

  • Documentation for load balancing ha been added. 

  • A virtual function when a DataBlock receives packet data has been added, ReplicaObject::DataBlockPacketDataReceived()

ROLCompiler and ROL Language changes

  • The win32 pragma to disable a harmless browse database warning has been wrapped in #ifdef _WIN32/#endif

  • SetOpaqueType() allows "::" to be used so that namespaces can be included as part of the opaque type.

 

Release V3.9

Additions and changes  to the API

  • The function 'realloc' has been added to the memory tracking layer.

  • The documentation for ReplicaObject::GetUniqueID() has been updated.

  • ReplicaNet::AllocateReplicaObject() Has been moved to be a private function. This function should not have been available for public use.

  • Memory tracking now has the option to enable total and peak blocks and sizes, see ReplicaNet_MemoryTotalsEnable()

  • Added Example7 - Which shows just basic XPSession operation.

  • Beta - ReplicaObject::SetPropagateToSessionDistance() , ReplicaObject::SetPropagateToSessionDistanceDefault() and ReplicaObject::GetPropagateToSessionDistance() have been added.
    These allow objects to specify a distance and if that object is outside the distance to a session observer then that session does not get object updates. This is very useful for helping to reduce network bandwidth for MMO games.

  • CurrentThreadSleep_SetHook() has been added in CThreadClass.h to allow a hook to be set for the CurrentThreadSleep() function.

  • Beta - ReplicaObject::SetMessageReflectionID(const int sessionID)
    This function allows an object to state which sessionID should be used for sending messages to other sessions.
    By default the master object is used to send DataBlock and message updates. Useful for MMO games where the network bandwidth for object replication can be assigned to other sessions.

  • ReplicaObject::SetClassID() Has been removed because the idea of setting the classID of an allocated replica object is outside the scope of the user.

  • ROLCompiler created ReplicaObject derived classes used the static class member function Allocate() to allocate a derived class.
    This function has been renamed to AllocateForReplicaNet(). This was to tidy up the naming convention for this derived class
    Also a static delete function has been added called DeleteForReplicaNet(ReplicaObject *)
    Both of these functions can be implemented in a derived class to alter the behaviour of allocate and delete methods for these classes.

  • Callbacks ReplicaNet::JoinerSessionID[Pre/Post]() and ReplicaNet::LeaverSessionID[Pre/Post]() have been added to allow a ReplicaNet derived class to be notified when a sessionID joins or leaves the network session.

Release V3.8

Additions and changes  to the API

  • XPURL, XPSession and ReplicaNet have been changed to use an optional DLL component.
    The libraries that start with "DLL" will force the library DLL to be loaded at run time.
    When using the DLL libraries you must define DOREPNETEXPORTAPI in the preprocessor. This ensures importing of the correct dll functions. It also automatically does #include "MemoryTracking.h"
    The memory tracking header is needed to ensure that the dll calling method accounts for memory properly.
    The automatic inclusion of the header during DLL builds can be turned off by defining REPLICANET_NOAUTOMATICINCLUDEMEMORYTRACKING
    For non-dll builds the memory tracking header is not included.
    Specifically for ReplicaNet and DLL builds, REPLICANET_DLLPREREGISTER() must used called before the ReplicaNet class is allocated. This ties the object classes to the DLL.
    REPLICANET_DLLPREREGISTER() can also be called in a non-DLL build without any adverse side effects.

  • The memory tracking header ("MemoryTracking.h") can be auto included by defining REPLICANET_ALWAYSDOMEMORYTRACKING for non-dll based builds.

  • Some include headers changed. ReplicaNet.h changed to remove as much private data from the public class as possible.
    ReplicaManager.h removed from the public API.
    Added DLLExportAPI.h

  • ROLCompiler: Changed to spot bugs due to braces being mismatched.

  • ROL Language: Command object::Reliable() was not implemented. Since all objects default to using the reliable method this wasn't a bad bug.

  • ROL Language: Added #include "<file>" and #includeclass <class> and updated the ROLCompiler docs.

  • ROL Language: Added object::RealInclude(), see the ROL Compiler documentation for details.

  • ROL Language: Added object::SetOpaqueType(), see the ROL Compiler documentation for details.

 

Release V3.7

Please consult the documentation for complete information covering the added features.

Additions and changes  to the API

  • Automatic load balancing has been added. The default is for load balancing to be switched off to remain compatible with previous version of ReplicaNet.
    Use these added functions in ReplicaNet:
    void SetLoadBalancing(const bool enable = false);
    bool GetLoadBalancing(void);
    void SetMaximumLoad(float load = 0.0f);
    float GetMaximumLoad(int sessionID = kReplicaNetUnknownUniqueID);
    float GetTotalLoad(int sessionID = kReplicaNetUnknownUniqueID);
    void ObjectListBeginIterate(void);
    and in ReplicaObject:
    void SetLoadBalancing(const bool enable = false);
    bool GetLoadBalancing(void);
    void SetLoadScore(const float load = 0.0f);
    float GetLoadScore(void);

  • Optimisations to the reliable UDP layer to include a fast matching database have been successful in reducing CPU load for intensive packet transfers.

  • More ROL Compiler documentation has been added to describe the data blocks.

  • virtual ReplicaObject::UserRegisterDataBlocks() has been added to allow user extensions of the data block mechanism. Using this function, or by extending the ROL language includes, it is possible to create your own data blocks that could use your own complex extrapolated motion routines.

  • Object list iteration in ReplicaNet:
    void ObjectListBeginIterate(void);
    void ObjectListFinishIterate(void);
    ReplicaObject *ObjectListIterate(void);

  • The NData datablock now has SetDefaultData() which can set default data for a member variable and reduce packet size for newly created objects.

  • Bug fixed in ReplicaObject::FindDataBlock() that wasn't finding all data blocks for all member variables.

  • Object iteration functions with automatic object list locking.
    void ReplicaNet::ObjectListBeginIterate(void);
    void ReplicaNet::ObjectListFinishIterate(void);
    ReplicaObject *ReplicaNet::ObjectListIterate(void);

  • A thread locking problem that affected some Windows98 machines when the application shut down has been fixed.

  • ReplicaNet::GetTime() and XPSession::GetTime() are unchanged, however since these time values can vary due to latency changing between each machine, another time function has been added. ReplicaNet::GetLocalTime() and XPSession::GetLocalTime() now report the local time for the machine. The examples have been changed to reflect this.

  • Memory function hooks have been added to MemoryTracking.h.
    void SetReplicaNetAllocateFunction(tReplicaNet_AllocateFunc *allocateFunction);
    void SetReplicaNetClearAndAllocateFunction(tReplicaNet_ClearAndAllocateFunc *allocateFunction);
    void SetReplicaNetFreeFunction(tReplicaNet_FreeFunc *allocateFunction);
    All memory in the libraries is now allocated through functions provided by this API. Memory allocated in the user application is unchanged unless you include "MemoryTracking.h" 

Changes that might throw up minor compatibility problems

  • void ReplicaObject::ValidateObject(void) and virtual void ReplicaObject:: RegisterDataBlock(DataBlock *block) have been moved to be private/protected status since they are for internal use only.

 

Release V3.6

An improved object and session migration API.
A new type of update packet that relieves network congestion.
Two new example applications, including the source code to a multiplayer demo game.
More optimisations to the network packet layer to reduce CPU and memory use.
Increased stability for networks with packet loss.
Network emulation API to allow your application to be tested using different types of lag and packet loss.
Microsoft dotNET library builds included.

Release V3.5

Optimisations to ReplicaNet, XPSession and XPURL have significantly reduced CPU time to around 10% of what was being used before. A breakthrough in caching has enabled this incredible performance jump.
Significant gains have also been made while improving the accuracy of interpolated data types and reducing jitter from extrapolated data.
Encryption has been made stronger without compromising speed.
Extra API functions allow fine tuning of the network session to cater for specific latency calculation intervals.
Initial session discovery and connection has been improved to reduce some of the initial packet traffic.