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
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
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
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
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.
|