[Build System]
- Integrate 'sqlite3' and 'sqlite_modern_cpp' using FetchContent.
- Enabled 'C' language to allow compilation of 'sqlite3' lib.
[Persistance]
- Adds a 'DatabaseManager' class to handle all SQLite operations.
- Creates a 'players' table on server startup.
- Server uses separate database for single-player 'bettola_sp.db' and
'bettola.db'
[UI]
- Adds a new 'LoginScreen' UI.
- Game flow is now MainMenu -> LoginScreen -> bootSequence -> Desktop.
- 'LoginScreen' has interactive tabs to switch between "Login" and
"Create Account" 'modes'.
- Full client-server communication for creating accounts and
authentication.
[Server]
- Refactor 'NetworkManager' to handle an 'AUTHENTICATING' state for new
connectiosn.
- Player state is only set to 'ACTIVE' after a successful login
Old vfs_node was getting a bit big for its boots, trying to be a
filesystem, network interface and the whole damn computer all at once.
This server-side refactor introduces a 'Machine' class that rightfully
owns the VFS, network services and other machine-state sh.t.
the SDL3_net implementation was causing blocking behaviour and was
difficult to debug and has bad docs due to not being released. Caused
crashes all over. so moved to Asio. This thing took so damn long as this
also had it's issues!
- All networking now uses Asio's async callback model.
- TcpConnection class encapsulates logic for a single client-server
connection, managing socket and message framing.
- Implmented thread-safe queues for handling incoming and outgoing
messages between the network thread and the main application.
- Refactored ClientNetwork and NetworkManager, the primary client and
server networking classes have been rewritten to use the new
asio-based architecture.
- Player objects on the server are not managed by std::unique_ptr to
ensure proper lifetime management and prevent memleaks.
- VFSManager is now a single instance on the server, passed by reference
to new players, avoding redundant script loading for every connection.
- Resolved server crash that occured immediately upon client connection.
This was traced to an object lifetime issue within Asio's async
handlers which was fixed by simplifying the send operation.
Client architecture has been refactored to be fully
server-authoritative, remove the previous "hybrid" model that supported
both local and remote command execution, that was a stupid idea.
- Client now connects to server on startup.
- The local command processor and VFS have been removed from the
Terminal class.
- All command processing is now handled by the server.
- The client is now just a thin client essentially
I'll in the future enable single player mode by running the server on
the local machine in a separate thread.
This is the beginning of the remote session functionality. It allows
players to connect to different NPC systems via an 'ssh' command.
*Server*
- Can now manage a world of multiple NPC file systems that are
identified by IP addresses.
- Implemented SSH command to allow connection to remote NPC systems.
Each remote session is managed via a 'CommandProcessor'.
- 'exit' command causes the remote server to terminate the client
connection
*Client*
- Terminal can enter a 'remote' state via the SSH command which sends
subsequent commands to the server.
- the local 'exit' command will close the terminal window.
- Refactored UI object ownership to prevent memory leaks and ensure
proper cleanup when a window is closed or the terminal application.