Version 3.4 of Snipe server core released

The largest release to date of Snipe server is now available for download from Github repository. This release brings the following additions and changes to the Snipe server platform:

New packages:

  • Room manager package. Used for creation and management of the player rooms on slave servers. Persistent rooms are supported.
  • Leaderboards package. Manages the leaderboards updated in real-time.
  • Basic user matchmaking package. Provides your project with server-side 1v1 matchmaking.
  • Extended user matchmaking package. Further customization of basic matchmaking that supports any number of users matched against each another.
  • Test messages package. Gives access to various client requests that allow measuring server performance and profiling important APIs.
  • Kongregate login package. Kongregate network login API was moved into a separate package from the core.
  • User session length stats package. Allows the collection and display of average user session length stats.


  • Large amount of server optimizations. In particular, user login and registration were rewritten to support much heavier load (with minor breaking changes detailed below).
  • Asynchronous database connections manager and API for asynchronous database queries. Used in the new user login and registration code.
  • Live client migration between slave server threads with support for automatic migration on client login.
  • Editor and server support for static tables.
  • Various clan module additions and fixes.
  • Macros for automating access to user attributes and variables.
  • Ingame shop module item purchases stats collection and display.
  • Editor support for stats dashboard.
  • Debug server compilation flags.

New cache server configuration variables:

  • “asyncDatabase.threads” - Sets the amount of async database manager threads (default: 1)
  • “asyncDatabase.connectionsPerThread” - Sets the amount of database connections per thread (default: 1)

New slave server configuration variables:

  • “server.compressionMinSize” - Sets the minimum message size for compression to work (default: 512 bytes)

Breaking changes:

  • cache: ModuleCache.loginPost(), ModuleCache.registerPost() now have additional parameter - SQL query function and run from the asynchronous worker thread
  • slave: Module hook renamed: “core/user.register” -> “core/user.registerPost”, Module.register() -> Module.registerPost()

  • All editor templates renamed with “core/” prefix in front. For example, “form.header” -> “core/form.header”, etc. To fix editor compilation, open “index.hxml” and add “core/” prefix after @ symbol on each line.

Example (before):

--resource ../../../snipe/edit/www/tpl/form.header.htpl@form.header

--resource ../../../snipe/edit/www/tpl/form.footer.htpl@form.footer


--resource ../../../snipe/edit/www/tpl/form.header.htpl@core/form.header

--resource ../../../snipe/edit/www/tpl/form.footer.htpl@core/form.footer

Important note:

You may see the following error message during server start:

Called from sys/db/Postgresql.hx line 405 Uncaught exception - load.c(357) : Primitive not found : npostgres@np_set_non_blocking(2)

It means that you need to replace your old “npostgres.ndll” file with the new one from the core containing new functions for asynchronous database calls.

Published: March 22 2017