Simplified System Diagram
Putting it Simply
As far as the application is concerned, the system is primarily just a local scenery and object database with attached virtual machine. There are no other computers to communicate with. There may be information on other players, but as far as the application's concerned there's just a single computer.
Behind the scenes, this database synchronises with every other one. That's where the magic comes in. That's the real focus of this project, to figure out how to modularise a system that performs this behind the scenes reconciliation.
Where to Start?
We need to both identify the kind of platform services we need (that haven't necessarily been designed for cyberspace), and the abstractions of the modules that our system will be comprised of.
So on one hand we have a set of rather basic service interfaces, e.g. messaging, storage, processing, Console IO. And on the other hand we have to think hard about how to modularise our system. The system modules will make whatever use is necessary of the platform's services.
Choose and/or figure out the kind of system we'll be dealing with, i.e. what's our platform?
2) Components to Re-Use
Next we figure out if there are any other major system components that we can incorporate. The database engine immediate springs to mind and we can consider something like Berkley DB.
3) Components to Design
4) Design Those Components
5) Create a Reference Implementation