5.5 KiB
Hosting Continuum-Servatrice
Continuum-Servatrice is Continuumatrice's dedicated multiplayer server. It is built from the existing Servatrice C++ implementation, including accounts, lobbies, rooms, replays, game synchronization, TCP and WebSocket networking, and MySQL support. It also registers the three additional public pile zones: Limbo, Refuge, and Oblivion.
You may run it alongside upstream Servatrice, but never reuse the MTG server's database, schema, account tables, process name, or service configuration.
Build client and server together
On Linux with the existing development dependencies, from the repository root:
cmake -S . -B build --fresh -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DWITH_CLIENT=ON -DWITH_SERVER=ON -DWITH_ORACLE=OFF
cmake --build build --target continuumatrice continuum-servatrice --parallel 16
Executable paths:
- Client:
build/continuumatrice/continuumatrice - Dedicated server:
build/continuum-servatrice/continuum-servatrice
The inherited source directories cockatrice/ and servatrice/ remain for source compatibility. The binary build directories and targets are distinct.
WITH_SERVER is ON by default; use -DWITH_CLIENT=OFF -DWITH_SERVER=ON for a dedicated server-only build (e.g., on a Linux host). This project deliberately excludes the upstream Magic Oracle importer.
New independent MySQL schema
The repository includes servatrice/continuum-servatrice.sql. This is not the old servatrice.sql: its table identifiers use the continuum_servatrice_ prefix matching the fork server configuration. Do not apply these SQL scripts to a production MTG Servatrice database.
Create a separate database and limited account using MySQL. The following is an example for local MySQL (choose a real, strong password and do not commit it):
CREATE DATABASE continuum_servatrice CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'continuum_servatrice'@'localhost' IDENTIFIED BY 'REPLACE_WITH_A_STRONG_PASSWORD';
GRANT ALL PRIVILEGES ON continuum_servatrice.* TO 'continuum_servatrice'@'localhost';
Execute those statements as a MySQL administrator, for example mysql -u root -p. Then initialize the empty database:
mysql -u root -p continuum_servatrice < servatrice/continuum-servatrice.sql
This schema contains user and room tables; it is not the card catalogue. Card XML and images live on the client, and users joining the same game should use compatible Continuumatrice card databases.
Schema lifecycle: The fork's new base SQL is isolated. Upstream schema migration scripts under servatrice/migrations/ have not all been converted to the new prefix. Review/adapt each future migration against a backup of the fork database; never run the upstream migration scripts blindly on either product.
Configure server
mkdir -p ~/.config/continuum-servatrice
cp servatrice/continuum-servatrice.ini.example ~/.config/continuum-servatrice/continuum-servatrice.ini
chmod 600 ~/.config/continuum-servatrice/continuum-servatrice.ini
Edit the private INI file, at least:
[server]
name=Continuum-Servatrice
host=any
port=4757
websocket_host=any
websocket_port=4758
[database]
type=mysql
prefix=continuum_servatrice
hostname=localhost
database=continuum_servatrice
user=continuum_servatrice
password=REPLACE_WITH_YOUR_MYSQL_PASSWORD
Those are the fork's example ports (TCP 4757, WebSocket 4758), separate from the usual upstream 4747/4748. The server supports other ports. If you run multiple game servers on the same host, explicitly choose distinct bound ports and independently configured databases.
To start in the terminal:
./build/continuum-servatrice/continuum-servatrice \
--config "$HOME/.config/continuum-servatrice/continuum-servatrice.ini" \
--log-to-console
A successful start requires database connectivity, a compatible schema, and available ports. Check the server's diagnostics rather than assuming a process that exits is running correctly.
For Internet hosting, use firewall rules scoped to the ports you intend to expose, configure TLS / a secure reverse proxy for WebSockets, and avoid exposing MySQL directly to the Internet. The sample file has inherited settings for authentication, room permissions, email, and moderation; review them before public launch.
Client/server compatibility
Continuumatrice supports standalone local games without a dedicated server. For remote games, use a matching Continuum-Servatrice build. Ordinary upstream Cockatrice servers don't define the limbo, refuge, or oblivion zone IDs.
Production verification
- Client and server both compile from the same Git commit.
- They create
build/continuumatriceandbuild/continuum-servatricewith correct filenames. - Server starts with
--configand can connect to the independent MySQL schema. - Account registration/authentication, room joining, game creation and reconnect work.
- Cards move correctly into Limbo, Refuge and Oblivion for both players and after reconnect.
- TCP and WebSocket connect on the configured ports.
- No accesses to upstream MTG databases, profile directories, sockets, or HTTP update services.
- No migration script alters a production database without backup/review.
- Service hardening, logging, TLS and restart management are in place before public launch.
Status: Committed source changes; dedicated server compilation, MySQL initialization, and runtime validation still need to be performed on the deployment system.