In my spare time I am currently implementing a virtual items management system for the OVW project. During October/November 2009, I programmed a rudimentary item inventory as a Web portal in C#. I am developing on Windows/.NET and run the production server with Linux/mono. (BTW: mono is really great).
Since I had no item server, I implemented a quick web service, which simulated an item server to populate my inventory with dummy items from a dummy web service. This is a view of the inventory as a web page.
The simulator worked directly on the database with lots of SELECTs each time you accessed the inventory page, which shows all items. As we all know, caching helps to take load off the database, but in the case of virtual items, caching is not enough. Virtual items are active. They live. They have timers. They interact, and they change over time. Every single activity invalidates the cache. What virtual items need is an active cache.
That's what I programmed in the last 3 weeks: a specialized cache only for virtual items which can be accessed like a web service via HTTP. The protocol could be SOAP (too heavy) or REST (too unstructured). As you might have guessed, the protocol actually is SRPC.
So, now I have an item server that
- populates the inventory and
- serves as an active cache for the database, and
- has a web service interface.
The inventory web page above is for users. Developers can also see items in the item server, but they are much more bare bone there. Neptun has a web user interface. There is a list of item numbers and item properties. Not much for the user, but informative for developers.
Neptun has been developed with lots of unit tests and integration tests (as usual). And here is another proof, that unit-testing is king: when I replaced my dummy item service with the real item server by exchanging just one web service URL, the thing just worked.
Thanks to Ingo for consulting at the Silpion party.