Marauroa
© 2005 (See Authors list). Released under GNU/GPL license.
Rate us at:
What is marauroa?
Marauroa is Arianne's Multiplayer Online Engine Server, that you can use to build you own online games using Marauroa as a Content Management system. Marauroa is completely written in Java using a multithreaded server architecture with a TCP oriented network protocol, a mySQL based persistence engine and a flexible game system based on open systems totally expandible and modifiable by developers and that is able to run scripts on Python for the game's rules. Marauroa is based on a philosophy we call Action/Perception, on each turn a perception is sent to clients explaining them what they percieve and clients can ask server to do any action in their names using actions. Marauroa is totally game agnostic and makes very little assumptions about what are you trying to do, allowing a great freedom to create whatever type of game you want.Marauroa is based on very simple principles:
- Clients communicate with the server, and vice-versa, using a TCP portable network protocol with reliability in mind to allow a stabler experience when online game lag occurs.
- You can develop an arianne client, using the arianne client framework, on any system that is able to compile C code.
- To play a game every player needs an account on the server that is identified by an username and a password.
- Players use their account to login into the server and then choose a 'player' stored under their account to play with. The server then checks the login information using the mySQL backend and loads the player into the game using the persistence engine.
- Players send actions to the server. The action system is totally open and has nothing hard-coded so you can edit it totally to your game style. The server sends at regular intervals, called turns, a perception to each player to inform them about the state of the game and any relevant state modifications. Marauroa's perception system is based on the Delta^2 ideology: simply send what has changed.
- The server executes some code each turn in order to move the game status on. Using this hook it is simple to code triggers, timeouts, conditions and whatever kind of behavior you need.
- The server transparently and automatically stores players and game status modifications on the persistence engine, and also information decided by the game developer using their game definition scripts.
- The server side game rules can be written in Python to allow simple and rapid development without needing to recompile the rules engine and without having to know anything about Marauroa's internals. Games rules can also be coded in Java.
- The server generates statistics of usage which are stored in a mySQL database (so you can later generate fancy statistics from them). Or in case you don't require them, they can be disabled to save CPU cycles and disk space. Marauroa features a modular structure that means modules can be changed and disabled without affecting the operation of other modules.
- Both the server and clients are fully and wisely documented, with documentation about specification and design and not just API documentation.
Features
Marauroa features state-of-art technologies as:- Java 1.5 compatible
- Persistent objects
- Transactional relational database support
- Delta and Delta2 Perceptions to reduce bandwidth usage
- Multiple independent zones of gameplay
- Server content streaming
- Turn based gameplay
- Nicely documented: Design and specifications available
- Based on a XP development model
- Follows KISS principle: Keep it simply stupid
- True Open Source Software: GNU/GPL
Instructions
You should read HOWTO build Marauroa and Initial steps with Marauroa for detailed, simple instructions about how to build and use marauroa. Remember that Marauroa is just a server middleware and so you need a game to do anything with Marauroa.Download
Change Log
3.3
- games can now check the structure of the database using doesTableExist and doesColumnExist in order to update it automatically
- RPEvents can now have RPSlots
- RPObject.getContainer() and RPObject.getContainerBase() continue to return an RPObject, use the new getContainerOwner() and getContainerOwnerBase() method to get a SlotOwner object
- properly free transactions in case of exceptions
- fixed a problem which caused parts of messages to be dropped when the size field was split across two tcp-packets
3.2.1
- fixed a deadlock when temporarily running out of database connections
- fixed error message in case the pool runs out of connections (the list contained connections that were kicked because of an exception)
3.2
- removed dependency on com.sun.*-classes
- automatically add new columns in existing database tables
- improved logging
3.1
- always hash the password based on UTF-8 instead of the plattform default encoding on login (on account creation UTF-8 was used, so the first login was not possible if the default encoding was not UTF-8 and the password contained special characters)
- made method dumpOpenTransactions public so that games can use it for debugging and monitoring
- moved periodic saving of players out of buildPerceptions so that it gets it on performance profiling index
- now all tables are created with TYPE=InnoDB
- improved error messages
- on serious errors which kill once of the background threads the complete server is now shutted down
- fixed a NoSuchElementException in TransactionPool.beginWork();
3.0
- split JDBCDatabase into several small ...DAO classes
- added a new package marauroa.server.db for low level database stuff
- started to work on supporting other database systems beside mysql
- for help on how to port your application see Refactoring database access in Marauroa
- fixed some compiler and javadoc warnings
2.6.3
- fixed a NullPointerException in modify() when the zone does not exist (anymore)
- improved error messages in exception
2.6.2
- changed zones to ConcurrentHashmap to accomodate the needs of multi threading and changing number of zones
2.6.1
- fixed a bug in deserialization, that made objects in slots uncontained, provided regression test
- added checks for same to equals in some RP*
2.6
- Attributes.clone() and RPSlot.clone() now conform to the contract of Object.clone()
- Pair implements toString() to help debugging
- Fixed some compiler warnings
2.5
- Added timeout value so players get disconnected after 30 seconds if their connection is lost.
- Updated protocol version.
- Fixed problem with player left in game.
Older
- Fixed problem with bogus network message.
- Added additional results to enum Result (for account/character creation)
- Added UnicodeSupportingInputStream and -Reader which automatically detect unicode type (and even support UTF-8Y)




