Current modernization
- Complete the
include/ark/,src/andsrc/plugins/<name>/layout and snake_case API migration, including Protobuf source naming. - Release native single-node MySQL and Redis clients in arknet 0.2.0.
- Replace ark database plugins’ legacy drivers, with Asio coroutine entry points, native arknet owning results and module-thread completion.
- Integrate the remaining independent official plugins with optional builds and tests.
- Review Nimbus documentation locally while preserving existing articles and entry points.
Hot-update discussions and implementation are deferred. The original planning list below retains its historical checkbox state; it is not a current API or capability list. Use the current items above, source code and acceptance records to determine implementation status.
High priority
- Put all schemas in one Excel workbook and keep other configuration tables separate, while remaining compatible with the existing format.
- Unify code style.
- Connect to logserver before process startup and fail startup if the connection cannot be established, so logging is available from the beginning.
- Upgrade spdlog.
- Add a dirty data layer that batches changed data after each client request, instead of sending every change separately in small packets with repeated protocol headers.
- Complete documentation for concepts, design principles, server architecture and usage examples.
- Align all basic data structures with C++ containers.
- Add service registry support, considering etcd or consul.
- Use timers for periodic logs and heartbeats instead of update and HeartBeat.
- Update configuration packaging: edit in Excel and generate
csvfiles for the project to read. Use contributor-specific suffixes such as Item.A.xlsx and Item.B.xlsx to reduce collaboration conflicts. -
Control plugin loading order through configuration fields or configuration order. - Use the AFXml wrapper instead of accessing rapidxml directly.
- Simplify interface class design.
- Generate repetitive code (plugin and module classes).
Low priority
- Update protocol and client handling for Map and Layer (the concepts have changed; client integration is pending).
- Use a different approach to sorting and swapping entries in inventory tables.
- Reduce data synchronization traffic: remove repeated strings such as
NodeNameandTableName, send index-to-name mappings at login, then use indices for updates and names for persistence. - Extend DataTable to support more complex structures, such as items containing gems with experience and enchantments, or weapons with random attributes. The existing fixed two-dimensional structure is difficult to extend.
- Add network library and performance benchmarks under benchmark/unittest.
- Add kcp.
- Use SWIG for the scripting module.
- Evaluate ECS: represent all objects as entities and use GUIDs to identify their group and position for fast lookup. Research references include Overwatch, ET and ECS-unity.
- Add coroutines, referring to libgo.
- Introduce tcmalloc.
- Add a monitoring web page using vue-admin.
- Add a Deployment web tool.
- Add message queue processing.
- Add operations tools (tcm & deploy).
- Use multiple threads for selected CPU-intensive work.
Partially finished
- Add spdlog sinks that organize files by directory and rotate by size or hour (partially changed; further changes are needed for the tlog format, /data/binlog/1001/20180627/game1_hour.log).
- Add consistent_hash_map (added, not yet enabled).
Finished
- Implement the new architecture.
- Configure connection relationships instead of setting them manually in code (bus_relation, server_settting). Detect IP addresses and generate ports dynamically instead of specifying them, and express network addresses as URLs such as tcp://0.0.0.0:9001 and wss://0.0.0.0:9001.
- Place Debug and Release binaries together under bin, with separate Debug and Release settings so they can share one configuration set.
- Change guid to an internal pointer type to reduce memory use for other non-guid types. Changed to int64_t; the memory concern no longer applies.
- Add a network plugin to separate network modules from application logic (NetClient and NetServer are still too closely coupled to application logic).
- Add endpoint to the net plugin.
- Merge the kernel and config plugins because kernel depends heavily on config.
Bugs
- ClearRow shifts subsequent row indices. Either preserve the indices and clear only the row contents, or have the client update subsequent indices when it receives DeleteRow.
- Fix ConfigPlugin data loading.
- Fix the return values of AFMapEx First and Next.