Latest document is this.
NOTE: For older version API reference, replace "current" with the version you want to read with the format as "vx.x.x" e.i. "v0.6.1".
Latest Changelog is here
v0.8.1 - Changelog
- (UPDATE) UDP server outbound packet count excludes health check echo
v0.8.0 - Changelog
- (BREAKING) Notifier is now part of server package
- (UPDATE) MatchMaker ticket added a callback on matched member leave and new callbacks
- (NEW) Error log now prints file location and function name
- (NEW) POST /endpoint/type/:serverType/user/:userID added that stores request body parameters as user data
- (BREAKING) Structured error code has changed from uint32 to uint16
- (FIX) Code reference generator fixed
- (NEW) Mesh added SharedData
v0.6.14 - Changelog
- (UPDATE) SIGUSR1 controls debug mode including pprof enable/disable
v0.6.13 - Changelog
- (UPDATE) Group added remoteJoinTries configuration
v0.6.12 - Changelog
- (UPDATE) User package added panic catch
v0.6.11 - Changelog
- (UPDATE) User package checks user struct instance for nil to avoid panic
v0.6.10 - Changelog
- (FIX) Group leave bug with on mutex that was crashing the server process
v0.6.9 - Changelog
- (FIX) Group fixed removal of the group ID from user data list when leaving a group
v0.6.4 - Changelog
- (UPDATE) Static group member node management improved
- (FIX) Group panic fixed on join and leave when server stress is very high
- (UPDATE) Mesh reliable local command error log is now debug
v0.6.3 - Changelog
- (FIX) UDP server outbound packet count excludes health check
v0.6.2 - Changelog
- (UPDATE) MAXPROC removed
v0.6.0 - Changelog
- (UPDATE) Mesh send and receive loop are now goroutines that match the number of CPU available
- (UPDATE) WebSocket server added a new config useCustomPort bool
- (FIX) Field and DM bug fix - Correct server type is now used
- (NEW) Notifier module added
- (UPDATE) Util added GetAsBytesArray, GetAsFloat32Array, ToBytesArray, and ToFloat32Array
- (FIX) Bug fix - Room GetRoomID added nil check
- (UPDATE) MARS added a verbose log on each announcement
- (UPDATE) Room send and leave uses server-side roomID if necessary
- (UPDATE) MARS-stats added timeout
- (FIX) DM fixed blank cache when message is attempted to send to a non-existing user
- (FIX) Field grid calculation corrected
- (UPDATE) Field sync is now tick loop based
- (UPDATE) Field disabled nearby grid sync
- (UPDATE) HTTP GET /field/endpoint/type/:serverType/user/:uid/position/:x/:y/:z added for Field module
- (NEW) SyncMap added
v0.5.1 - Changelog
- (FIX) Room random join makes sure createdTime is sent to the client
- (UPDATE) Debug commands added
- (UPDATE) MARS stats no longer require a config file + log added log level set functions
- (UPDATE) MARS mars-stats = ms is now exposed for diarkis-server-template
- (UPDATE) MatchMaker added a check to make sure host userData.ID and client given UID match
- (FIX) User added network protocol type retrieval functions and RandomJoin no longer mixes different network protocol types
- (FIX) UDP server RUDP outbound buffer corrected when large number of outbound packets are queued
- (FIX) Mesh reliable retry corrected
- (UPDATE) Go client added Field module
- (UPDATE) MARS default config log level is now info
- (UPDATE) MARS stats tool can now be build with diarkis-cli
v0.5.0 - Changelog
- (UPDATE) Room property sync added
- (BREAKING) MARS CPU performance improvement and stability improvement with large number of servers
- MARS data sent over mesh network message is compressed
- MARS no longer creates response data on each message
- MARS no longer sends retries as it is uncessary
- (UPDATE) Mesh network reliable message retry adds counter to interval to avoid unecessary CPU stress
- (UPDATE) WebSocket commands fixed and updated
- (FIX) Static group no longer synchronize with remote servers and improved broadcast stability
- (UPDATE) MARS added a configuration to change MARS sync mode: server roles to sync all mesh data
- (UPDATE) HTTP added an endpoint to handle prelight for AJAX calls
- (UPDATE) UDP server RUDP outbound buffer stability improved with large number of outboud packets
- (UPDATE) UPD server and mesh network memory usage improved
- (UPDATE) Room RandomJoin no longer mixes different network protocols
- (UPDATE) User added functions to determin which network protool type each user client uses
v0.4.7 - Changelog
- (Fix) Fixed room reservation incorrectly creates an extra reservation with empty user ID
v0.4.6 - Changelog
- (Update) MARS improved the way it updates internal storage and manually invokes garbage collection to avoid unexpected CPU spike when large number of servers have been updated
- (Fix) Mesh reliable retries are now individual goroutines instead of a single goroutine for improved performance
v0.4.5 - Changelog
-
(Fix) DirectMessage corrected the internal hashmap to manage direct message channels
-
(Update) DirectMessage now supports clients that re-connect to different servers
v0.4.4 - Changelog
- (Fix) Room update get property command was broken after the room property update in v0.4.0
- (Fix) Team matchmaking was broken after the room property update in v0.4.0
- (Update) Internal mesh network now handles commands locally if the commands are issued from the same server process
- (Update) Room logging improved
v0.4.3 - Changelog
- (Update) Vault Peek now deletes expired item and invokes delete callback
- (Update) Util added To...Array and added more unit tests
- (Update) Field Sync bug fixed where there is no near grid reconnection the command next function is not called and combined packets maybe ignored
- (Update) MatchMaker Add - adds timestamp in the remote node + Search - simplified result check loop and added debug logs
v0.4.2 - Changelog
- (Update) Room TTL update is no longer controlled by member users, but mesh update
- (Update) Server added MarkServerAsTakenIf to control the state of the server
v0.4.1 - Changelog
- (Breaking) `room.SetOnRoomChange` added event flag to identify what changed using enums `room.MemberAdded`, `room.MemberRemoved`, and `room.PropertyChanged
- (Fix) Room property (increment) update to trigger the callback of `room.SetOnRoomChange` fixed
- (Fix) Mesh handleResponse checks `Callbacked` flag
- (Update) MatchMaker team mesh command no longer uses deprecated mesh.Command
- (Update) Room added SetOnRoomChangeByID
v0.4.0 - Changelog
-
(Fix) MatchMaker IssueTicket added SearchTries parameter to control when to give up search when finding 0 results
-
(Update) Util added StringArray and StringMap for concurrent array and map operations without mutex lock
-
(Update) Util added StringArray and StringMap and MatchMaker seen uses util.StringArray
-
(Fix) Group Members is no longer an array to avoid potential concurrent map read and write errors
-
(Fix) Room properties are no longer a map internally to avoid potential concurrent map read and write errors
-
(Update) Server added Taken() along with Online and Offline
-
(Update) Mesh pack added support for converting nil to an empty byte array
-
(Update) Util package added GetAsUint and ToInt... etc.
-
(Update) Util.GetAsUInt and util.To... added
-
(Update) Util package added generic GetAs... and GetAs...Array functions
-
(Update) User added GetAs...Array
-
(Update) Room added SetOnLeaveByID
-
(Update) HTTP file name renamed and changed the request timeout to be configurable
-
(Update) Room owner change event added
-
(Update Internal) Room no longer uses vault Static for allow empty
-
(Update) Room and User added Setup() for non UDP/TCP/WebSocket servers
v0.3.2 - Changelog
-
(Update) MatchMaker Ticket allows users that started their tickets at the same time to match right aways
-
(Update) MatchMaker IssueTicket checks for matching completion with OnMatch first instead of maxMembers
-
(Breaking) User removed SetAs... and GetAs... now returns two values (the second return value indicates the data validity)
-
(Update) Room TTL is no longer updated by accessing rooms and their data
v0.3.1 - Changelog
v0.3.1 Document-
(Update) User data GetAs... added for every data type
-
(Update) UDP server receives and stores client local address via echo
-
(Update) Support for Tencent Cloud added
v0.3.0 - Changelog
v0.3.0 Document-
(Fix) MatchMaker search with join flag false did not send a response with the correct command ID
-
(Update) HTTP added GET /endpoint/type/:serverType/user/:uid to target specific server type group to create a new user
-
(Update) Initial user data TTL is no longer connectionTTL * 3 but connectionTTL
-
(Update) Added SIGUSR1 debug vault data dump and SIGUSR2 debug log rotation
-
(Update) Room register adds the room immediately
-
(Deprecated) GET /auth/:uid deprecated
-
(Update) Group re-join sends a join event message now and user added SetOnNewConnection callback
v0.2.28 - Changelog
-
(Fix) Room Clock and Tick uses vault Peek to avoid unexpected update of room TTL internally
-
(Update) Random room join now creates a new room if search for random rooms fail
-
(Fix) Room reservation bug that incorrectly counts number of available slots to join fixed
-
(Update) Room added Chat features with chat logs (in memory storage only)
-
(Update) MatchMaker added IssueTicket
-
(Update) Group join no longer tolerates invalid group ID and terminates execution immediately
-
(Update) MatchMaker added host change event
-
(Update) Room added CancelReservationRemote added
-
(Update) Room reservation and cancelation commands can now be executed by non-owner clients
-
(Update) Room TTL min value is now 10 seconds
-
(Update) P2P metrics added
v0.2.27 - Changelog
-
(Update) Room CancelReservtionRemote added and the built-in command now uses it
-
(Fix) Room Reserve - bug fix owner user was added to reserve but never able to save the change
-
(Update) Room reservation and cancelation commands can now be executed by non-owner joined member users
-
(Update) MatchMaker IssueTicket implemented
-
(Breaking) Room added OnTickStop and all event callbacks are no longer arrays of callbacks
-
(Update) Room added StopTick
-
(Update) New module DirectMessage (dm) added and C# added a new class DirectMessage
-
(Update) Room create added min value for TTL => 10 seconds
-
(Update) P2P metrics added
-
(Update) Room added GetRemoteProperty and GetRemoteProperties on the server
-
(Update) MARS metrics logging added projectID read from envC# Group bag fix - error message string set as group ID
v0.2.26 - Changelog
-
(Breaking) Room join removed properties from the callback for improved stability
-
(Update) Mesh added HandleCommand to deprecate Command
-
(Update) UDP server command executions are now separate goroutines for better throughput
-
(Update) Room random join added payload length check
-
(Breaking) MatchMaker added tag
-
(Update) Room added Exclusive events
-
(Update) UDP server force disconnect log adjusted and server logging adjusted
-
(Update) Server logging level for room adjusted
v0.2.25 - Changelog
-
(Update) Golang version 1.16.7 and above
-
(UPDATE) Group TTL update is triggered on mesh update NOT user keep alive for better performance w/ large number of members
-
(UPDATE) Added more verbose logging
-
(UPDATE) Metrics can now be grouped by server types instead of server network protocol types
-
(FIX) UDP server packet combine for UDP messages bug fix
-
(UPDATE) Mesh clears a response callback immediately after executing it
-
(FIX) RUDP server corrected the size of outbound packet when buffered packet and next-in-line packet size exceeds MTU
-
(UPDATE) Room added API to get max members and improved logs
v0.2.24 - Changelog
-
(NEW) MatchMaker and TeamMatchMaker built-in command implemented
-
(Update) Internal update only: UDP server client state added P2P enabled flag
-
(Update) Room module added DeleteRoom
-
(Update) Metrics API for Prometheus added GET /metrics/v/3 to use gauge instead of counter
-
(FIX) Internal fix only: Mesh retry timeout - resend of retry fixed (no more delays)
-
(FIX) RUDP retry timeout configuration corrected
-
(FIX) Log level of Mesh module corrected
-
(FIX) Internal fix only: Field command fixed race condition that breaks the command call chain
-
(UPDATE) Internal update only: Room and Group send buffer add operation is no longer recursive
-
(UPDATE) Field module reconnection has less synchronization lag
-
(FIX) Field module corrected reconnect disappearance - Sync returns an empty array of users not in sight when reconnecting
-
(UPDATE) Field module no longer sends disappearance notifications on reconnect
-
(UPDATE) Alibaba Cloud support added
-
(FIX) Prometheus metrics fixed
-
(FIX) DIARKIS_SERVER_TYPE env fixed
v0.2.23 - Changelog
-
MARS stats tool added number of rooms per server node
-
Static Group added to Group module
-
Field module now sync with near by grids
-
Room module OnDiscardCustomMessage callback now receives SID as well
-
JSON Metrics format corrected
v0.2.22 - Changelog
-
Add UserEntity.GetCoordinates() to return X and Y of a UserEntity to Field module
-
All commands must call next w/ an error when we see an error
-
Added new env to control application name and node type w/o changing the server code
-
WebSocket Migrate support added
-
Added DIARKIS_USE_STRUCT_ERR to switch between plain error response and structured error
-
Room mapping added sync limit (same as Field module syncLimit)
-
Added a sanity check for the offset against the length of buffer
-
WebSocket Room Broadcast internally uses Message and removed 4 byte header for message buffering
-
DIARKIS_NODE_TYPE renamed to DIARKIS_SERVER_TYPE
-
Matching TTL check corrected for deletion fixed
v0.2.21 - Changelog
-
Field module NPC transport on auto-scale added
-
Structured error data added to the server and C# client
-
Field distance calculation now uses trigonometric formula for better accuracy
-
WebSocket server connection loop removed secondary loop to read message chunks in one go in order to avoid potential CPU stress
-
WebSocket server connection loop exists when state is discarded and FIN command does not update session TTL
-
User bug fix - WebSocket was not supporting userData.OnNewConnection
-
GetSidFromPayload now does not crush with invalid payload
-
Make the WebSocket read loop wait until all commands are handled and then resume
-
MatchMaker added more validations for invalid matching ID
-
Metrics API added MatchMaker Search Count
-
user.GetCCU() added
-
Field added ServerSync to synchronize server-controlled data and added Npc to manage server-controlled data struct
-
Field UserEntity added GetSID() GetID() and GetDistance()
v0.2.20 - Changelog
-
WebSocket server is now able to handle packets exceed 8000 bytes and handle fragmented packets
-
Auto-port-finding range increased from 100 to 1000
-
Group join is now possible without having the origin server node and this makes Group completely de-centralized
-
Field grid division and assignment fixed
v0.2.19 - Changelog
-
Update Golang version to 1.16.7
-
Room migrate bug fix: redundant reconnect of the owner user
-
WebSocket normal packets update session TTL
-
TCP normal packets update session TTL
-
Vault update mutex lock no longer fails to unlock when panic
-
WebSocket now supports Field disappear
v0.2.18 - Changelog
-
UDP/RUDP batch send and read added (configurable) for improved performance on Linux
-
HTTP auth response JSON malformed when there are MARS and HTTP only in the cluster - fixed
-
Mesh SendMany checks type of error to determine if it has to send the same message to the next node
-
DIARKIS_STACKDRIVER_LOG env added
-
Connector added GetOpenPort
-
WebSocket server added optional packet encryption and decryption
-
WebSocket server added Migrate function
v0.2.17 - Changelog
-
HTTP removed a configuration realtimeServers and now auto-detects available node types in the cluster
-
Mesh added mesh.GetNodeTypes
-
WebSocket server now handles EOF and no longer disconnects
-
WebSocket server added SetPublicEndPointWithPort added for setting up a pod with nginx
-
bin/tools/findport added for finding an available port for websocket + nginx
-
Connector server type added for deploying Diarkis with external server such as UE4 etc
-
DIARKIS_NODE_TYPE env option added to change node type
-
Room module added room migration
-
Random Join Room added polling to match maker to make sure random rooms are available for random search
-
WebSocket server added optional encryption and decryption by AES-256-CBC
v0.2.14 - Changelog
-
Room module - Join sends response before reconnect push packet (previously it was reconnect packet and then response packet)
-
User module - user.Get and user.Set no longer uses cached user object
-
Mesh module - Added a new function IsMyNodeOnline()
-
Config module - Added a new function ReadProperty()
-
HTTP server - Added a new configuration "realtimeServers" to dynamically manage real-time server nodes besides UDP, TCP, and WS
-
Removed UDP source address validation from RUDP SYN, ACK, and FIN handling operation to improve the handling of client address change
-
Added golang.org/x/net entry in boilerplate go.mod
-
Room join retrieves the node of the room's outbound endpoint BEFORE join operation and uses it for reconnect push AFTER the join operation for improved stability
-
Mesh module added GetMyNodeEndPoint()
-
MARS resets storage map when a database is deleted to avoid potential memory leak
-
Healthcheck added public UDP communication check for UDP server
-
UDP server manages RUDP connections by SID if SID is provided w/ SYN, ACK, and EACK
-
UDP server validates RUDP connection with SID if SID is provided w/ SYN to protect itself against SYN flood attacks
-
HTTP server added SetAllowOrigin(allowedOrigin string)
-
HTTP server added a new configuration useFixedPort to bind with fixed port instead of auto-search port
-
MARS stats tool added - ./bin/tools/ms <MARS address>:<MARS port>
-
HTTP server added HandleStaticFiles(uriRoot string, fsPath string) method
-
MARS stats tool added ./bin/tools/ms
-
Health check and MARS config path prefix is now of CWD
v0.2.13 - Changelog
-
Fixed metrics API for Prometheous: Metrics type counter was not correctly parsed in the latest version of Prometheus
-
src/ directory and symlinks from the server-side code removed
-
Mesh SendRequest local command is handled as remote command and remote command handlers are no longer go routines (all this to avoid concurrent map access)