v1.0
Overview
After three years since the initial release, Diarkis has finally released v1.0!
Major Updates
Field has been updated
Now synchronizes across Grids within the Field of Vision.
Optimized to reduce server load.
Fixed various bugs.
Deprecated
IDiarkisField::SyncInit()
and addedIDiarkisField::Join()
.Added
DiarkisField::Leave()
command.
Added a new Session module.
Server
Compared to v0.9, internal communication efficiency has been improved, internal code refactored, and test scenarios strengthened, resulting in enhanced performance.
Core
Added
DiarkisExec
package to simplify server setup.Added a mechanism to cache MARS addresses in the mesh module for a certain period.
Changed package names of
roomSupport
andgroupSupport
to camel case.Added an echo handler.
If provided structures for logging functions implement the
String()
interface, output the return value ofString()
.Diarkis server disables dual-stack when obtaining its own IP address.
Locked mesh transmission callbacks to prevent critical issues.
Fixed concurrent iteration and writing to vault maps to prevent critical issues.
Added context notification for timeouts on
OnStop
andOnTerminate
.
Direct Message
Fixed disconnection of DM users to send disconnect messages with the correct version and command.
Dive
Added
IncrBy
andIncrByEx
.Added
OnReady
.Changed Dive data type from
interface{}
to[]byte
.Fixed issue where Dive byte fixed size was too small.
Fixed issue preventing Dive module shutdown.
Field
Improved performance and availability by changing Field algorithms.
Fixed Field custom filters to execute on front servers instead of storage servers.
Improved Field module performance.
Fixed issue where
Leave
command ID used the same command ID as room chat.Added
Join
command, enablingSync
,Disappear
, andLeave
to function afterJoin
.
Group
Fixed issues related to
Join
.
MatchMaker
Added
onMatchedTicketTimeout
to handle member ticket timeout.Updated ticket properties.
Mesh
Fixed issue with
sharedData
updates when keys are full.Configured announcer to stop after termination tasks.
Metrics
Fixed packet count metrics and added packet size metrics.
Puffer
Added support for property comments and case sensitivity to improve JSON parsing.
Ensured protocol names are unique within each package.
Added constants
Ver
andCmd
to protocol code.Changed file permissions from 755 to 644 for generated files.
Room
Fixed issue where a room wouldn't empty upon unexpected user disconnection and reconnection with the same user ID.
Prevented room ID duplication.
Changed
UpdateProperties
andIncrProperty
to not update room TTL.Fixed lock leak issue with
mutex
.Changed log level for
room message/announce
.Fixed parameter names in
SetOnMigrated
callback.
Session
Prevented sessions from retaining invite data per user.
Added session command to get member ID and member count when specifying
SessionType
.Prevented race conditions with
setTypeByUser
andremoveTypeByUser
.
Go Client
Added
Debug
command.
Client
Diarkis Runtime
General
Fixed issue where
Fin
packets were not sent upon disconnection from UDP servers.Removed
OnReset()
functions and modifiedDistroy()
functions to call internally during destructor.Removed
Reset
events for UDP/TCP accordingly.
Added error codes and error messages to callback arguments of each module for error handling. Error information can be obtained via
GetErrorCode
andGetErrorMessage
of the instance passed as an argument.Added
Trace
log level.Added library builds for development.
debug
Debug build
develop
Release build with log output enabled
release
Release build with log output disabled, reduced text data such as error messages
Changed library file paths
Stopped using
std::cout
within the runtime.Fixed code flagged by Address Sanitizer in Visual Studio for container overflow exception.
Added Privacy Manifests file for iOS environment.
Located at
platforms/ios/PrivacyInfo.xcprivacy
Fixed issue with deleting events within callback events.
UDP
Addressed issue where some reliable transmission methods allowed sending data exceeding 10,000 bytes as an error.
Changed RUDP retransmission intervals to incrementally increase per retry attempts.
Fixed issue where RUDP retransmission process lagged behind
IDiarkisUdp::SetSendRetryInterval
.Corrected
DiarkisConnectionEventArgs::GetRecconect
typo.Changed to re-create socket before executing disconnect procedure if send retry times out while socket re-creation feature is enabled.
MatchMaker
Deprecated
DiarkisMMHostEventArgs::GetPayload
.
P2P
Fixed issues related to disconnection judgments.
Improved hole-punching procedures.
Changed communication intervals for hole-punching to incrementally increase per retry attempts.
Changed default P2P connection timeout from 10 seconds to 5 seconds.
Added explicit disconnect feature for P2P module.
Execute disconnect with
IDiarkisP2P::Disconnect
and receive event notification withIDiarkisP2P::GetDisconnectEvent
.
Added feature to get the UID of the connection partner upon successful or failed P2P connection.
Fixed bug where larger packets than the sent payload were transmitted during P2P connect when
bBuffering=false
and no encryption.Fixed crash issue when logger is not specified in P2P connection.
Group
Deprecated
DiarkisGroupEventArgs::GetPayload
.
Field
Deprecated
DiarkisField::SyncInit
and addedDiarkisField::Join
.Added
Field::Leave()
command.
DirectMessage
Deprecated
OnConnect
event.Fixed incorrect command sent by DirectMessage Disconnect.
Session
Added event for when kicked from session.
Use
DiarkisSession::GetKickEvent
to set event.
Retrieve information of current sessions by specifying sessionType with
Session::SendGetSessionInfoBySessionType()
sending request to server, and receiving result withSession::GetSessionInfoEvent
.Retrieve information of non-participated sessions by specifying sessionID with
Session::SendGetSessionInfoBySessionID()
send request to server, and receiving result withSession::GetSessionInfoEvent
.Deprecated
Session::SendGetMemberIDs()
andSession::SendGetNumberOfMembers()
.Changed Invite/Accept specifications. When a user receives an Invite, the session ID can be obtained through the event callback. Previously, joining followed by Accept was the flow, but the recommended method is to join the session by specifying the session ID with
Session::SendJoin
. Due to this change, the callback arguments of the Invite event have been changed, andSession::SendAcceptInvite
is scheduled for deprecation.Added functionality to send arbitrary messages simultaneously with invites to
Session::SendInvite
.Added functionality to retrieve participating session members. Send request to server with
Session::SendGetMemberIDs
and receive results withSession::GetMemberIDSEvent
.Added functionality to retrieve the number of participating session members. Send request to server with
Session::SendGetNumberOfMembers
and receive results withSession::GetNumberOfMembersEvent
.Added API to obtain execution results of session-related commands on the server. Execution results can be received via
On...Response
type callbacks, allowing detection of errors like reaching session participation limits.Fixed issue where UID was returned instead of session ID with
Session::GetSessionIDByType()
afterOnJoin
event.
Diarkis Module
General
Added
DiarkisInit/DiarkisDestroy
functions to the Base class to initialize the logger inDiarkisInit
.Separated the logger from
DiarkisInterfaceBase
and modified to manage multiple instances ofDiarkisInterfaceBase
.Made client version visible in logs.
Added mode to output log files to any desired location in
DiarkisInterfaceBase
.Changed to a single event processing thread across all instances of
DiarkisInterfaceBase
.Added custom allocator types for the std library used within Diarkis.
Includes types like
Diarkis::StdString
andDiarkis::StdVector
, used internally within Diarkis.These types are generally meant for internal use within the library but can be visible to the application where necessary.
Added feature to set a custom allocator to replace memory allocation processes in Diarkis runtime.
Implement a custom allocator by inheriting
ICustomAllocator
and replace it withDiarkis::SetCustomAllocator()
.Provided a sample implementation in
main.cpp
of theroom_broadcast
sample.
Fixed issue where events from
DiarkisTcp/Udp/P2P
were not immediately notified to the event processing thread when multipleDiarkisInterfaceBase
instances exist.Addressed this by changing
GetSchedulerAddNotifyEvent
inIDiarkisTcp/Udp/P2P
to detect event addition, allowing application control over thread behavior.Refer to the implementation around
DiarkisInterfaceBase::RuntimeLoop
for details.
Unified endpoint retrieval function to
GetEndpoint
, allowing server endpoint retrieval by passingserverType
.Enabled UDP server connection using connection information obtained via external server.
Fixed issue where encryption-enabled communication was attempted despite encryption being disabled on the server.
Changed to reuse encryption/decryption instances created in the constructor.
Fixed issue where event processing added during event processing threads could be delayed.
Moved the code in
diarkis-module/Extension
to a new location.Clarified sample implementation by relocating
diarkis-module/Extension
code underdiarkis-module-extension
in the sample.
Changed to use
DIARKIS_DEBUG_FEATURES
macro for enabling/disabling debug features provided by Diarkis Module during build.Since Diarkis Module is built together with the application,
DIARKIS_DEBUG_FEATURES
should be defined during application build if debug features are desired.
Added NAT type judgment feature.
Result of executing
DiarkisUdpBase::SendCheckNATType
can be obtained viaDiarkisUdpBase::OnCheckNATType
.
Organized coding style of Diarkis modules.
Changed to append an underscore (
_
) at the end of protected variable names in Diarkis Module. Update variable names per coding style if a build error occurs.
Fixed unintended log folder creation with
LogOutType::FILE_OUT_TO_SPECIFIC_PATH
inDiarkisInterfaceBase
.Unified source code text format to UTF-8 with BOM(LF).
Eliminated
std::cout
usage in Diarkis module.Fixed several codes calling new.
Note that
new
is called insidehttplib
used for HTTP access in the sample implementation, which does not support allocator replacement.
Changed macOS deployment target to 10.13.
Organized HTTP access implementation for iOS and Android.
Streamlined implementation by organizing duplicate code.
Room
Fixed issue where arguments passed to
Room::Relay
inSendRelay()
were incorrect, preventing proper replay function.Removed
SyncProperties
andObjectSync
.
P2P
Added a debug feature to force hole-punch failure.
Modified
DiarkisP2PBase::ConnectClient
to do nothing if called on auid
for which connection processing has already started.Added arguments to specify P2P timeout and buffering settings in
DiarkisP2PBase::ConnectClient
.
Session
Added
DiarkisSessionBase::OnSessionCreateResponse
, replacingDiarkisSessionBase::OnSessionCreate
.Can check whether a session was successfully created by checking arguments of
DiarkisSessionBase::OnSessionCreateResponse
.
Added support for session kick events.
Processable with
DiarkisSessionBase::OnSessionKick
.
Supported TCP protocol.
Group
Added a function to leave all groups.
Added a function to send broadcasts specifying GroupID.
Field
Fixed issue of duplicate sync() call when
SendFieldSync()
is called initially.Changed to not call
Field::SyncInit
withinDiarkisFieldBase
as its call is no longer necessary.
MatchMaker
Supported issue ticket response in
OnIssueTicketResponse()
.Added
SendKick()
function.Added event to handle
TicketBroadcast
response.After executing
DiarkisMatchMakerBase::SendTicketBroadcast
, confirm proper handling of the send command by receivingDiarkisMatchMakerBase::OnTicketBroadcastResponse
.
DiarkisMatchMakerBase::OnTicketCancelResponse
is called if matching onIssueTicket
and the ticket is discarded due to server scale-in.DiarkisMatchMaker::OnCustomCommandTicketMemberLeave
is called if a user matched onIssueTicket
leaves the ticket due to server scale-in.This is implemented on the Diarkis Module Extension side, so the same implementation needs to be added to the application side if used.
Removed
CatchOnReconnect
function as timing for joining the room after Host/Search has changed for server reconnect timing.
RPC
Changed
RPCAll() / RPCMany() / RPCOne()
to virtual functions.
Sample
Added
session_simple
sample.Fixed to wait for 4444 clients to join before broadcasting in
session_simple
sample where 3333 clients failed to broadcast before 4444 clients joined.
Added
directmessage_simple
sample.Provided sample code in
directmessage_simple
sample to set connection information to UDP server obtained via external server.
Added Android sample.
Added iOS sample.
最終更新