ReplicaNet Release notes
The workspace for all example projects are contained in
the 'Examples' directory. The DotNET2008 solution file
is 'Examples\Examples_2008.sln'. The DotNET2010 solution is 'Examples_2010.sln' etc.
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 tutorial index can be found in "Tutorials\index.html"
Compiling and linking
This public release uses amalgamated source code for ReplicaNet and RNLobby client APIs. Just add "ReplicaNetPublic\AmalgamatedReplicaNet.cpp" to your project and an include path to "ReplicaNetPublic\Includes" then you're ready to compile.
This source includes all of the original client facing source code from the core ReplicaNet and RNLobby libraries.
The core libraries are around 100 C++ source files in around 12 projects with extra private headers that do not comprise the public interfaces.
The amalgamated source is simpler to include in a project and compile. An added bonus is that during testing the amalgamated source runs faster.
Most compilers are able to utilise extra optimisations when all the code is included into one block. Performance improvements of 5 to 10% have been measured.
Individual source files are available in the full SDK.
Full instructions are in the "Using ReplicaNet" section of the ReplicaNet class documentation.
Microsoft Windows
This SDK has been tested with:
- dotNET2008 SP 1. The service pack is available from Microsoft Update.
- dotNET2010 SP 1. The service pack is available from Microsoft Update.
- dotNET2012 Update 4.
- MinGW GCC 4.6.2
- C# with SWIG 2.0.6
Linux
The headers and tools for Linux can be found in the 'ReplicaNetLinux.tar.gz' archive.
Example2 has an example makefile.
Tested with Ubuntu 12.04 and GCC 4.6.3
Maramalade
Tested with Maramalade 6.3.2
Android
Tested with Android NDK R8
Apple
Tested with iOS/iPhone/iPad using Xcode 4.3.2
Xbox360
The Xbox360 version is only available to registered Microsoft
developers. Please contact your Microsoft account manager who will be able
verify your developer status with us.
Playstation2
The Playstation2 version is only available to Sony
registered developers. Please contact your Sony account
manager who will be able verify your developer status with
us.
Other games consoles
Please contact us with your requirements and we will do our best to help.
Common headers
The header files for all builds are in the 'ReplicaNetPublic\Includes' directory.
Examples
The 'Demo1' directory now contains the "Planes and Dolphin" demo with integrated lobby and statistics tracking.
Workspace solutions are available in the 'Examples' directory.
The solution 'Examples_2008.sln' is used by dotNET2008. The solution 'Examples_2010.sln' is used by dotNET2010.
Windows build notes
DotNET2008 and DotNET2010 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.
Some of the examples use the Microsoft® WTL library.
The dotNET2008 and dotNET2010 projects have been tested with WTL 7.5
(mirror)
After decompressing the relevant archive add the WTL include path to the compiler include directory paths.
To get technical support on any issues you may have please email
techsupport@replicanet.com
Release V7.3
Global additions and changes
RNWeb/Inc is a new cross platform optimised server side daemon library to facilitate the creation of HTTP/REST based services.
RLHubLib::UserManager and hence the GameLobby and the Demo1 game application now use REST based communication for IPC, allowing cross platform with logged in lobby sessions.
ODBCSQL/RNSQL: Added command "SHOW TABLES;" to return the tables in the current connection.
http://www.replicanet.com/Demo1Patcher.exe is a new demonstration product patcher showing complete end-to-end product patching.
Decompression code now checks for buffer under-run and over-run situations.
Additions and changes to XPSession and ReplicaNet
XPSession code complexity reduced by removing the XPSessionPrivate class structure.
XPSession will drop connections that try to send corrupt compressed data.
XPSession and ReplicaNet now have SetMaximumDataSize() to set the maximum amount of fragmented data to be received per connection.
XPSession and ReplicaNet can now configure compression level with SetPacketCompressionLevel() and SetLargePacketCompressionLevel().
Additions and changes to RNLobby
ScanForDiffs::CompressFile now uses multiple cores if available.
RLSrvUtility and UtilityServer have been updated with the RNWeb library.
RNMakePatches FTP upload has been made more reliable.
Create.asp has been updated to correctly clear any previously logged in user when creating a new account.
RNLobby website cookie banner added to comply with the relevant law
RNLobby\SQL\CreateTables.sql can now be used to populate the initial DB when installing RNLobby services. These services no longer try to create tables at startup.
Release V7.2
Global additions and changes
TransportUDP is now even more reliable when there is lots of packet loss.
XPSock_Utility* functions have been removed and similar functionality added to the status MessageHelper::Get*/Set* functions.
XPStream has been deprecated.
Added ExampleAndroidNDK
Example 1 now has bandwidth graphs and allows network latency and packet loss to be emulated.
Checksum::ChecksumDataWithSlots has been improved to include optional initialisation of the checksum slots.
Added Encrypt::CommutativeEncrypt() and Encrypt::CommutativeDecrypt()
Windows threading has switched to using _beginthreadex() etc.
Added RNReplicaNet::GetStringSafe()
Added RNODBCSQL::Prepare to aid in the creation of SQL queries with proper escaping.
Added RNSQL.exe tool to allow RNODBCSQL to be used from the command line, it will automatically translate queries for the supported database providers.
Transport CRYPTOUDP@ has been added. This uses a handshake to enforce a different encryption key for every connection.
Microsoft Visual Studio 2012 solution and projects created.
TransportConfig::SetPacketBufferEnable() and SetPacketBufferTime() now default to using packet buffering with a time of 0.01f seconds. Previously packet buffers were disabled and had to be explicitly enabled.
Additions and changes to ReplicaNet
Added ReplicaObject::SetDelayIDFetch() to control when GetNewSessionIDAndUniqueID() is called.
Added virtual int ReplicaObject::GetNumExpectedDataBlocks(void) and StaticSetExpectedNumDataBlocks()
Added ReplicaNet and XPSession GetNetworkPacketsRejected().
ReplicaObject::GetNewSessionIDAndUniqueID() accepts an optional ReplicaNet pointer to attach the ReplicaObject instance to.
Additions and changes to RNLobby
RNSimpleScriptCompiler can now accept ARM source code in GCC format.
Compile C/C++ or any other language supported by GCC into SimpleScript for use with the StatServer statistics parsing engine.
RNSimpleScriptDebugger has been improved to display more register and source level debugging.
Added more debug logs to AdvertiseServer.
RNLobby website updated to use the new escaping and user/email validation code.
RNLog no longer replaces ' with _ and the allowed range of characters has been increased.
Service::DebugOut and Service::DebugPrintFile are now much faster.
Added REST mobile API XMLLoginProcess.asp XMLGetVariables.asp XMLSetVariable.asp for the website to login and set variables that have relevant access.
Added Service::Get/SetRegistry
User SQL tables now have TimeUpdated added to allow operations to be more easily audited.
Default service long descriptions now include the service name.
Added MyService::GetDebugStatusLine() to improve common service debug information.
Added Example12Script2.cpp to demonstrate using C++ with StatServer.
RNAdminTool improved with extra status display.
RNLobby web APIs now use UTF-8 encoding.
RLHub source updated to compile with VS2012
Windows services can now be configured to operate with more secure access rights to the registry.
Service::GetServiceList() now differentiates between 32 and 64 bit service processes.
Service processes can now be 32 or 64 bit.
Service configuration and debug reporting via the command line has been improved.
RLSrvSecurity helps to guard against server hacking attempts by blocking suspicious activity detected on the network.
Release V7.1
Global additions and changes
Additions and changes to ReplicaNet
ReplicaNet::SetObserver() can observe ReplicaObjects using any update type.
Added ReplicaObject::SetPropagateToSessionDistanceInclude() and SetPropagateToSessionDistanceExclude() to allow a minimum and maximum distance to be set for distance based propagation.
RNROLCompiler has been updated to allow lang file classes to include text, use "H<", into the output header file instead of the default output cpp file. An example can be found in "RNROLCompiler\lang\object.lang".
RNROLCompiler now splits the application::object() defintion macros.
RNROLCompiler lang files have been updated.
RNROLCompiler now only searches the registry key include path after other include paths. User defined include paths have priority.
DataBlock_Predict_Float::ReplicaContinuityBreak changed to add ignoreTimeCheck and clearPreviousUpdates options.
Added checks for the defines RN_EXCEPTIONS_IGNORE/RN_EXCEPTIONS_ENABLED
Added a templated ReplicaObject::FindDataBlock() that will return the correct DataBlock derived class pointer type for a class member.
Each DataBlock derived class wanting to support type checking functionality should add the macro RN_CLASS_MINIMAL_RTTI to the public portion of their class definition.
ReplicaNet::CallbackGetObjectUniqueID() has been added to allow ReplicaObject unique IDs to be calculated by the user.
Additions and changes to RNLobby
ProductPatcher::GetRealFilePath now copes with some proxies that were returning incorrect zero length files.
ProductPatcher::GetDownloadAttemptsAndFailed() and ProductPatcher::GetDownloadSpeed() have been added.
UserServer, StatServer and BackendServer has more logging.
All the RLSrv instances log the bandwidth sent and received and CPU to the server monitor.
TransportNATUDP::Accepted() now reports the connection state correctly.
BaseTransportServer::Start() renamed to StartWithTransport().
BaseServer::Start() renamed to StartWithSocket().
Patcher speed and compression improved.
The database function RN_INTERVAL_TO_DOUBLE() has been added. In MySQL it does nothing since MySQL returns a numerical value. In PostgreSQL it uses EXRACT(EPOCH...
Release V7.0
Global additions and changes
Amalgamated source code is included, binary library builds are no longer needed.
FreewareSetRegistrationCode() and "RNPlatform/Inc/FreewareCode.h" are no longer needed and have been deprecated.
ReplicaNet_MemoryDumpAllocatedBlocks and ReplicaNet_MemoryBreakOnAllocatedBlocks are deprecated. Since source is now included any memory tracking can be included at compile time.
DLL builds have been deprecated and REPNETEXPORTAPI REPLICANETDLL_API XPSESSIONDLL_API XPURLDLL_API have been removed.
Additions and changes to ReplicaNet
RNPlatform/Inc/Rand.h has added RNReplicaNet::Rand::SeedFastWeak() and FastWeak() functions to avoid conflicts with the CRT srand() and rand() functions. All internal ReplicaNet calls to srand and rand have been replaced with this new API.
Windows XP support for IPv6 addresses has been added. Specifically this fixes the wsock32.dll missing exports for inep_pton and inet_ntop.
Handling of incomming data packets has been improved when multi-threading is enabled.
XPSession::SetProxyMode() and GetProxyMode() have been added. This allows a master session to act as a proxy for messages, only allowing messages to be routed through the master. Messages cannot be sent to or from the master. The master session ID is not not notified to other machines as a joiner or leaver, therefore ReplicaNet will not attempt to replicate objects to the master ID. This can be useful where a dedicated server needs to start a session to allow clients behind a restrictive firewall to connect and where the server does not want to receive any ReplicaObject updates. In effect a ReplicaNet session can connect to this proxy XPSession instance and not have to worry about superfluous object updates being sent to the master ID.
DataBlock_Predict_Float::GetLastDelta() Adds the ability to read the last received delta hint for a data block.
DataBlock::SetForceReflectionUpdate() Adds the ability to use received delta update hint values for any outgoing reflection master updates.
Additions and changes to RNLobby
PatchIndexManager now uses a file information cache index and scanning for modified files is quicker.
UserServer: The user ID to enter a room is always the last to get a UserClient::CallbackChatRoomEntered().
GameLobby now has a remove all friend requests menu item.
GameLobby chat now expires old chat messages to avoid filling up the chat window during prolonged use.
UserServer password security has been improved during login by using a unique login attempt salt.
All servers using BaseTransportServer have had their security improved by using a unique connection key.
NATResolver, NAT punch through and negotiation, has been improved for some rare types of firewall with very restrictive policies.
RLSrv services from different versions can be used on the same physical server by adding a "_VERxxx" extension to the EXE name.
RLSrv services can be configured to use different databases.
Added Debug.asp to test for common ASP/DB/COM setup problems.
RLSrvUtility is a platform agnostic RESTful HTTP server designed to handle requests from the web server. This replaces functionality from RLCOMUser which has been deprecated.
Additions and changes to RNSimpleScript
RNSimpleScriptcompiler spots duplicate labels and produces an error.
The script engine is now endian agnostic.
RNSimpleScriptCompiler will automatically include "FunctionEpilogue.lang" after encountering the first EndProc command.
Release V6.4
Additions and changes to the RNLobby API
StatServer: Scripting added the ability to shift a range of variables in contiguous sections by an offset. This can be used for a history of scores to be built up and rendered as a graph or table by the web backend. Script:Stat.lang: ShiftVariables(loginID,startSection,access,name,numItems,sectionOffset)
StatServer: Scripting added the ability to output the date/time stamp as a variable value. This can be used by the stat script backend to check the frequency of updates for game sessions and to reject sessions that are too frequent. Script:Stat.lang: GetTimeAsSeconds()
Additions and changes to the RNSimpleScript API
Added update of sl(r31) when items are pushed or popped on the stack. Also added "AsmPop r0" which will pop the register to the same pushing register. Very useful for self-unwinding stacks.
The include file "FunctionEpilogue.lang" needs to be included when procedures are used because it defines the label _proc_PopStackFrames
RNSimpleScriptCompiler now has a separate lang directory containing include scripts. The compiler will search this as part of the default include path.
RNSimpleScriptCompiler now optimises multiple branch chains with conditions.
Unusued script procedures are removed from the build output.
DefProc can now be used with blank () parameters.
The keywords "#define" and "#pragma once" can now be used in script files, allowing these files to also be included in C/C++ code.
RNSimpleScriptDebugger will display more accurate debug line information from the ".bnd" file.
Additions and changes to the ReplicaNet API
DataBlocks now support SetDiscardOlder() updates to tag each update with a variable window size allowing old out of order updates to be detected and discarded. This is instead of using the transport level unreliable ordered delivery.
The virtual method DataBlock::Poll() has changed to include two extra parameters. Classes that derive from DataBlock will need to be updated.
Global changes
IPv6 format addresses are now supported by ReplicaNet, XPSession, RNXPURL, RNXPSockets and RNLobby servers. Each socket or transport can support a listen address on IPv4 and IPv6 addresses at the same time. A socket or transport can choose either IPv4 or IPv6 to connect to a listening address.
The textual address format has changed as follows in these examples: IPv4 only "127.0.0.1:80". IPv6 only "[1234::1bcd:4321:1234:43bc]:80". Combined IPv4 and IPv6 address, note the separating '-' character "127.0.0.1:80-[1000:0123:0000:0000:0000:0000:1234:4321]:80".
To aid IPv4 and IPv6 compatibility TransportConfig::SetIPv4Detection(), TransportConfig::GetIPv4Detection(), TransportConfig::SetIPv6Detection(), TransportConfig::GetIPv6Detection() TransportConfig::SetIPv4Detected() TransportConfig::GetIPv4Detected(), TransportConfig::SetIPv6Detected() TransportConfig::GetIPv6Detected() have been added.
Transport has a new pure virtual function "Error Listen(const std::string &address)". This allows a Transport to listen on a specific address.
Unreliable ordered packet delivery options for RNPXURL, RNXPSession and RNReplicaNet are now supported. Similar to the reliable ordered delivery option there are separate bands provided by XPURL transports.
RNXPCompression speed and compression has been improved.
Transport discovery and replies have been improved for machines on a LAN that are behind their own NAT.
Release V6.3
Additions and changes to the RNLobby API
Password salting and security for UserServer and RLCOMUser Account::ObfuscatePassword() has been improved.
PostgreSQL database support has been added. MySQL and PostgreSQL are now automatically detected when lobby services start and compatible code is used.
UserServer, StatServer and AdvertiseServer now include extensive logging for actions taken by each user. The ASP web based account manager example code includes these extra logs.
Web based password resets now require two step authentication.
NATResolver connection negotiation has been improved.
Global changes
Example 4 now uses DataBlock frame based synchronisation using ReplicaNet::ProcessDataBlockUpdate() and recording compression using a separate thread.
To simplify the build process the separate libraries such as RNXPSession, RNPlatform, RNXPURL etc have all been merged into RNReplicaNet library. VC6 builds and builds that allow DLL linking have been deperecated.
Handling of the "getinfo" UDP packet (FF FF FF FF 67 65 74 69 6E 66 6F) by listen services has been fixed.
The Linux build now includes RNLobby support, with optional memory tracking.
Release V6.2
Additions and changes to the
ReplicaNet API
-
Added DataBlock_Predict_Float::ReplicaContinuityBreak() to allow local replica extrapolation/interpolation to be used until an update arrives from the network.
-
The RNVisualDebugger tool has been updated to allow selection of the
packet graph to highlight and filter packet updates. This allows unusual packet
data to be analysed to find ReplicaObject updates causing bandwidth spikes.
Additions and changes to the
RNLobby API
-
ODBCSQL TransactionBegin(), TransactionRollback
and TransactionCommit() have been added to aid
readability of SQL related transactions. The related SQL
commands will also still work as intended.
-
UserClient ChatRoomAdminMessage(), ChatRoomSay() and ChatRoomWhisper() all now accept user defined flags that can be used by the application.
-
BaseTransportServer::GetNumTotalSessions()
has been added.
-
UserClient::CallbackChatRoomMessage() the flags have changed from
size_t to be unsigned int.
-
UserServer now has the ability to lock user account details such as
email address and password.
-
Added RNSimpleScriptCompiler and RNSimpleScriptDebugger to allow
scripting to be used with the StatServer and StatClient. Example12 and Demo1
examples demonstrate persistent user data.
-
Added RNAdminTool be able to upload files to the StatServer.
Additions and changes to the
RNXPURL API
-
TransportConfig::SetExtraPacketSecurity() allows the packet security
to be enabled or disabled. Versions of RNXPURL prior to 6000 (ReplicaNet 6200,
RNLobby 0700) do not use this extra security. To allow later versions to connect
to earlier versions use SetExtraPacketSecurity(false). All old clients will
still be able to connect to new servers. Security will be disabled for those
connections.
Global changes
Release V6.1
Additions and changes to the
ReplicaNet API
-
The compression algorithm has been changed so it is slightly quicker than before, uses half as much memory and compresses slightly better with test data.
-
Example2 has been updated to show hExample2 has been updated to show how to pass variable length parameters with network function calls.
-
Added a virtual function
ReplicaNet::SetSessionIDCallback() to allow the session IDs to be calculated by the user instead of the code. For example, random session IDs.
Additions and changes to the
XPSession API
Additions and changes to the
RNLobby API
-
UserClient::CallbackUserLoginFailed() changed to add
a "const Reason reason".
-
Added the ability to kick and ban users
from the UserServer and created chat rooms with the
functions UserClient::ChatRoomKickUser(),
UserClient::GlobalKickUser(),
UserClient::CallbackGlobalKicked(), UserClient::CallbackChatRoomKicked().
-
Whispering and friend messages added to
RLHub.
-
Added RLCOMUser which is a helper object that can be used with ASP pages to reset passwords.
-
Added the ability to change password and
email address using the functions
UserClient::ChangePassword(), UserClient::ChangeEmail().
-
Added a user state option function
UserClient::PlayingAGame().
-
Statisics and tracking updates using StatServer and StatClient.
-
GameLobby and Demo1 game demonstration with integrated user and statistics tracking using ASP web hosting. The full source is included as part of the Developer Premier SDK. The page for player ranking information is available at this report page
Release V6.0
Additions and changes to the
ReplicaNet API
-
A new object migration option ReplicaNet::kMigrateObjectsToNewMaster
has been added to SetOnSessionError()
-
DataBlock_Predict_Float has been updated
to include a 16 bit short floating point value or delta.
This can reduce bandwidth for frequently updated
floating point numbers using this DataBlock type. See SetValueShortFloat()
and SetDeltaShortFloat()
-
Added ReplicaNet::CallbackMasterSessionIDChanged()
-
Added GetLatencyToSessionID() for ReplicaNet and XPSession.
-
Added SetBand() to the ReplicaObject and
DataBlock updates. The band parameter allows the
object to send reliable updates and ensure they are in original order grouped by band.
Additions and changes to the
XPSession API
-
Added GetLatencyToSessionID() for ReplicaNet and XPSession.
-
DataSendToSession() and DataSendToSessionReliable()
now have an extra band parameter. This allows the user to send reliable packets and ensure they are in original order grouped by band.
Additions and changes to the
RNLobby API
Bug fixes
-
After session migration sessions would receive the same data packets from the new host twice if the packet was sent with
kXPSessionBroadcastID, data packets are now only sent
once.
-
After session migration the new host would not calculate ping to the remaining peers.
The ping to peers is now calculated by the new host.
Release V5.9
Additions and changes to the
ReplicaNet API
-
Added TransportConfig::SetExternalIP() and TransportConfig::GetExternalIP()
-
Speed optimised pending connections for
TransportUDP.
-
Added DataBlock_Predict_Float::SetSnapToDifference()
allows this replica DataBlock to snap to the extrapolated value if the difference is greater than the configured difference.
-
Added DataBlock_Predict_Float BoundaryEnable(), BoundaryDisable(), BoundaryWrapAround(), BoundaryCapped(), BoundaryLowerUpper(), BoundaryApplyToMaster() to allow values that wrap around or are clamped.
-
The documentation for all components is
now included as one file with all classes
cross-referenced.
Bug fixes
-
Xbox360: When calling PlatformHeap::ForceFree()
the Live registered transport is now de-allocated at the
correct time.
-
Transport::GetPeerURL() now returns
std::string("") when there is no peer.
-
ReplicaNet::GetTime() and GetLocalTime()
are now called during PlaybackAdvanceTo()
-
When using manual ReplicaNet polling and
the poll rate is less than one call per second the DataBlock_Predict_Float
simulation has been improved.
Breaking changes
Release V5.8
Additions and changes to the
ReplicaNet API
-
ReplicaObject::FindDataBlock() now registers all DataBlocks before trying to find attached blocks.
-
Added DataBlock_Predict_Float::SetLagged() which allows this DataBlock to use interpolation and permanently lag the changes made to the variable attached to this DataBlock.
SetLagged() has also been added to the Predict_Float ROL
language file.
-
All library DataBlocks now have protected member variables to allow user extensions to have access.
-
Added a delaySeconds parameter to
ReplicaObject::DelayedDelete() to allow the object to be delay deleted in delaySeconds amount of time.
-
The documentation regarding
ReplicaNet_MemoryTotalsEnable() and REPLICANET_ALWAYSDOMEMORYTRACKING has been updated.
-
To allow ReplicaObjects to
become dormant or active after a specified time period
added ReplicaObject::
UpdateSendDormantDelay()
UpdateSendDormantDelayCancel()
GetUpdateSendDormantDelay()
UpdateSendDormantDelayStateChange()
Release V5.7
Additions and changes to the
ReplicaNet API
-
Added the ROL command "namespace" to allow C++ classes from different namespaces to be defined.
-
Added
PlatformInfo::SetProcessorReplicaNet()/SetProcessorXPSession()/SetProcessorXPURL() to allow the preferred processor for each of the components.
-
Added Thread::SetPreferredProcessor() to allow the preferred processor to be set for the thread.
Calling PlatformHeap::ForceFree() will call XPSock_Quit() if
XPSock_Init() was previously called.
-
Added ReplicaObject::GetProcessingDataBlocksFromSessionID() to return the originator sessionID while processing DataBlock updates.
-
Added ReplicaObject::Unpublish() with the supporting callbacks CallbackObjectUnpublishPre() and
CallbackObjectUnpublishPost()
-
Added delayed deletion of ReplicaObjects
with ReplicaObject::DelayedDelete(), DelayedDeleteCancel()
and GetDelayedDelete().
-
Added ReplicaNet::ObjectListFind() to find a ReplicaObject from its sessionID and
uniqueID.
-
Changed the internals of the MutexClass to use critical sections on Windows and Xbox/Xbox360 builds.
-
Added ReplicaObject::IsPublished().
-
Added ReplicaObject::UpdateSendDormant() and
ReplicaObject::GetUpdateSendDormant() to set a ReplicaObject as dormant and not
send any DataBlock updates. Dormant objects use less
processor time because DataBlocks are not checked.
-
Xbox360: Updated the samples to use VC2005
-
Xbox360: Added the option to use VisualDebugger connections
with Test2, currently enabled in the Debug build.
Additions and changes to the
RNLobby API
-
RNMakePatches: When uploading files using FTP and the patch index has been done then use FtpDeleteFile to delete old patches that are not used in the live index.
-
Removed the RNSQLite database library and
replaced it with an RNODBC interface.
-
RNLobby now uses MySQL via ODBC.
-
The RLSrv services are now dependant on
the database service.
-
AdvertiseClient queries can now use
complex filters based on the rules supplied for each
entry.
-
UserClient::AddUserInfo() allows
UserInfo from a loginID to be requested and watched in a
similar manner to the friends list.
-
Added UserClient::
CreateChatRoom()
LeaveChatRoom()
EnterChatRoom()
GetCurrentRoom()
ChatRoomAdminMessage()
ChatRoomSay()
ChatRoomWhisper()
-
The Backend now does not need to be
allocated before other RNLobby classes. However the
Backend class must still successfully complete before
other RNLobby classes are started or connected to the
servers.
-
RLHub is an example of a win32 MFC
application using the RNLobby API to provide a user,
friend, chat and game listings services.
Bug fixes
-
Fixed the linking problem static MFC
static libraries.
-
Xbox360: Fixed an assert complaining about an invalid handle when calling
ShutdownNetwork(true)
-
Changed the AdvertiseServer rule and user update to be atomic.
-
Fixed an issue when trying to call
networked ReplicaObject functions before the object has
been published.
-
Vastly improved performance with more than 100 connections.
Release V5.6
Additions and changes to the
ReplicaNet API
-
Protocol "NATUDP@" with
RNLobby can be used by XPURL, XPSession and ReplicaNet
to provide NAT/firewall defeating.
-
Example11 has been added to show how to
use RNLobby services with ReplicaNet.
-
Added templated operator<< and operator>> to DynamicMessageHelper
-
Removed compiler warnings for GCC 4.x in -pedantic
mode. Rebuilding RNROLCompiler generated files will also
help.
-
There is now no limit to the number of parameters for ReplicaObject networked function calls using
DataBlock_Function.
-
Example1 has been updated to include a simple DataBlock_Function example.
-
Example10 has been added to show example use of RNReplicaNet::RNLobby::ProductPatcher
-
XPSock_UrgentSetRawMode(),
XPSocketUrgent::SetRawMode() and
XPSockUrgent::ProcessACKS(), XPSockUrgent::SendWithACK(),
XPSock_UrgentListen() have been removed because they are
obsolete.
-
XPSock_GetAddress() will no longer return 0.0.0.0 as the address of a listening TCP or UDP socket. The IP address of the host will be used. This matches the
Transport::GetAddress() behaviour.
-
XPSock_UrgentCreate(), XPSock_Listen(),
XPSocketUrgent::Create() and XPSocket::Listen() have been updated to include an address
to bind to for the socket. This is useful for multihomed machines.
-
Added ReplicaNet::FindSession(const std::string protocols)
-
Using a debug ReplicaNet DLL library and forgetting to call
REPLICANET_DLLPREREGISTER() will trigger an assert.
-
Added -P option to the RNROLCompiler to allow pre-compiled header files to be added to the output cpp file.
-
Added XPAddress:Import() to import a
string in x.x.x.x:x format.
-
MessageHelper::SetGuardSize() can be
used to throw a C++ exception of type
MessageHelper::Exception()
when the data is read from beyond the end of a message.
-
Added: XPSock_ICMPCreate(),
XPSock_ICMPSendPing(), XPSock_ICMPRecvPing(),
XPSock_ICMPWaitForPing()
-
TransportUDP has been optimised for
processor time and memory use.
Additions and changes to the
RNLobby API
-
This version of RNLobby is in the alpha stage of development and as such may be subject to substantial changes until beta.
-
Binary difference patch creation and delivery.
(RNMakePatches tool/Patcher)
-
Backend availability and TitleID verification.
(BackendServer/BackendClient)
-
Internet CD/License key verification. (CodeServer /
CodeClient)
-
NAT Detection. (NATDetectServer /
NATDetectClient)
-
NAT Resolving. (NATResolver) TransportNATUDP for use with XPURL/XPSession/ReplicaNet uses
NATResolver.
-
Advertising and querying of sessions
player list and rule list. (AdvertiseServer /
AdvertiseClient)
-
Added LAN only operation for
AdvertiseClient.
-
User account create/authenticate, friends list, game invites and
persistent data storage. (UserServer / UserClient)
-
All servers now have service modules.
For Win32 these are be configured to start with the
system and restart on error.
-
RLSrvMonitor can be used to produce an
HTML report to a file which is useful for producing web
based reports. ( http://www.rnlobby.com/RLSrvMonitor.html
)
-
RLServerMonitor is a Win32 GUI
application to display the status like RLSrvMonitor.
Bug fixes
-
Calling PlatformHeap::ForceFree() will call
XPSock_Quit() if XPSock_Init() was previously called.
-
Fixed a bug in MutexClass::~MutexClass() where a mutex handle was being closed before it was
released on Win32 platforms.
-
Fixed a deadlock issue with the database
when many threads and processes were accessing it at the
same time.
Proposed deprecation
The next version of ReplicaNet is planned to deprecate
the includes (and classes included in) DatabaseManager.h and
Database.h
Please email techsupport@replicanet.com
if you wish to discuss or find out more about this
particular change.
Release V5.5
Additions and changes to the API
-
A quick view of functions added:
ReplicaNet::CallbackPlaybackAdvanceToFinished()
[ReplicaNet/XPSession]::DataReceivePeek()
-
Packets larger than 512 bytes can now be
sent through XPsession::DataSendToSession[Unreliable/Certain/Reliable]
and ReplicaNet::DataSend().
-
ReplicaObject updates can now be any
size, memory permitting.
-
The version of the ReplicaNet recording files has been increased. Previous versions will not playback with this version of ReplicaNet.
-
ReplicaNet::CallbackPlaybackAdvanceToFinished()
has been added as a callback to signal when the last
requested ReplicaNet::PlaybackAdvanceTo() finishes.
-
A DataBlock reason event called kDataBlockReason_AfterDataBlocksReceived
has been added to provide better flexibility for the
ReplicaObject::PostObjectCreate() event.
-
Processing DataBlock updates has been
optimised.
-
ReplicaObject::DataSend() and
ReplicaObject::CallBackDataReceive()
have been added to allow ReplicaObject derived classes
to send and receive raw data.
-
XPsocket::Send(), XPSocket::Recv(),
XPSock_Send() and XPSock_Recv() now propagate XPSOCK_ECLOSED to the last
xoscket error when a connection failed to connect.
-
RNReplicaNet::StrDup() has been added
to RNPlatform/Inc/StrDup.h to avoid problems with
dotNET2005 warning _strdup has been deprecated.
-
Code changes have been made to remove
warnings when compiling with Linux Suse 9.3
-
TransportConfig::SetPacketMTU() has
been added to allow the the MTU of packets to be set when using packet buffering.
Bug fixes
-
When network packet loss emulation is
enabled some memory was allocated after calling
PlatformHeap::ForceFree().
-
After deleting an XPSession instance
and allocating a new instance to connect to the same
server within thirty seconds some Certain packets were
lost.
-
XPCompression now uses the DLL export
API to avoid having to statically link this library.
-
XPAddress operator == and != tests the
port number with the IP address.
-
ReplicaObject::PostObjectCreate() was not being called when in playback
mode.
-
RNXPURL.DLL DebugMTDLL/ReleaseMTDLL builds were not using the correct code generation options.
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.
|