Goal of this project is to develop a c++ library for synchronizing objects of one server with n-clients over network which provides following features:

  • able to handle massive count of clients and objects
  • linear scalability with the count of cpus/cores
  • threadsafe interface to provide multithreading support for the apps
  • keeping overhead and complexity small to provide good performance

=> SyncSys goal is to be a network solution (c++ - under zlib license - Win/Linux/Unix) which is really MMO ready!

This results in some design decisions which may be a bit strange at first glance:
  • serialized data are seperated from game objects (NetEntity) with thread safe access and shared ptr implementation
  • changes of data and visibility have to be indicated manually (NetEntity::SignalizeDataChange / NetEntity::SignalizeVisibilityChange both are thread safe) => avoids waste of cpu cycles and traffic due to frequent memory observation and premature update sending
  • the changes will only take effect when NetEntity::PerformNeededUpdates is called => allows to change data and visibility across thread bounderies while keeping update logic within a specific thread context
  • a tree like object hierarchy and visbility is encouraged(visbility is handed down from higher to subordinated objects) => can reduce taffic and update time considerably and make "wallhacks" less effective (nescient clients are nice clients)
  • On client side objects are not generated automatically by the system via callback but manually by SyncClient::GetReceivedElement / SyncClient::GetReceivedElementByFactory => control is up to the developer

Of couse some decisions have drawbacks but e.g. the client side object generation can be done mostly automatic (if Deserialize of a parent/superior object is called and a serialized ID list of its clients is received it can deserialize its children via DeserializeChildren).

The library is composed of three parts:
  • objectlayer - concern with the unique-ids + updating + de/serialisation + versioning + visibility
  • abstract transportlayer - collects data, packs and and sends them
  • networklayer - a tcp class-set which can be replaced easily by another lib of your choice

A rough and uncomplete overview over the main classes of sync system:
If you have questions or an idea for improvements just contact me Nox@7bitfaster.de or post in the forum.
You want a comparison to other solutions like i.e. RakNet or enet? Take a look at this.
Looking for the newest code? http://syncsys.svn.sourceforge.net/svnroot/syncsys/
Or do you need an example? usage example 1, usage example 2, usage example 3
This library is licensed under zlib.