CHANGELOG of Diarkis Server

v0.2.13 からv0.8.1 の CHANGELOG

最新版のサーバドキュメントは こちら です。

NOTE: 別のバージョンのサーバドキュメントを参照される場合は URL の "current" の部分を対象のサーバのバージョンに置き換えることで参照をしていただけます。例:"v0.6.1"

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

v0.4.0 Document

  • (Fix) MatchMaker IssueTicket added SearchTries parameter to control when to give up search when finding 0 results

  • (Update) Util added StringArray and StringMap for concurent 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 writee 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... aadded

  • (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

v0.3.2 Document

  • (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

v0.2.28 Document

  • (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

v0.2.27 Document

  • (Update) Room CancelReservtionRemote added and the built-in command now usees 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 arrarys 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

v0.2.26 Document

  • (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

v0.2.25 Document

  • (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

v0.2.24 Document

  • (NEW) MatchMaker and TeamMatchMaker built-in command implemenented

  • (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

v0.2.23 - Changelog

v0.2.23 Document

  • 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

v0.2.22 Document

  • 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


  • Matching TTL check corrected for deletion fixed

v0.2.21 - Changelog

v0.2.21 Document

  • 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 untill 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

v0.2.20 Document

  • 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

v0.2.19 Document

  • 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


  • Connector added GetOpenPort

  • WebSocket server added optional packet encryoption 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 entry in boilerplae 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 moodule 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-srearch port

  • MARS stats tool added - ./bin/tools/ms :

  • 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)