Marauroa Chat Tutorial/Server: Difference between revisions

Content deleted Content added
imported>Hendrik Brummermann
No edit summary
imported>Hendrik Brummermann
added missing call to world.initialize() as reported by maxgmer
 
(16 intermediate revisions by 2 users not shown)
Line 18:
if (instance == null) {
instance = new World();
instance.initialize();
}
return instance;
}
@Override
public void onInit() {
super.onInit();
Line 38 ⟶ 40:
<!-- Please, see details here http://stendhal.game-host.org/wiki/index.php/Refactoring_Database_Access_in_Marauroa. -->
<source lang="java">
import java.util.List;
import java.sql.SQLException;
 
Line 71 ⟶ 72:
}
 
@Override
public void setContext(RPServerManager rpman) {
manager = rpman;
}
 
@Override
public boolean checkGameVersion(String game, String version) {
return game.equals("Chat");
}
 
@Override
public synchronized void onTimeout(RPObject objectcharacter) {
onExit(objectcharacter);
}
 
@Override
public synchronized boolean onExit(RPObject objectcharacter) {
world.remove(objectcharacter.getID());
return true;
}
 
@Override
public synchronized boolean onInit(RPObject objectcharacter) {
IRPZone zone = world.getRPZone(new IRPZone.ID("lobby"));
zone.add(objectcharacter);
return true;
}
 
@Override
public synchronized void beginTurn() {
}
 
@Override
public boolean onActionAdd(RPObject caster, RPAction action, List<RPAction> actionList) {
return true;
}
 
@Override
public synchronized void endTurn() {
}
 
@Override
public void execute(RPObject caster, RPAction action) {
if (action.get("type").equals("chat")) {
RPObject chat_entrychatEntry = new RPObject();
chat_entrychatEntry.put("text", action.get("text"));
chat_entrychatEntry.put("from", caster.get("nick"));
chat_entrychatEntry.put("turn", manager.getTurn());
IRPZone zone = world.getRPZone(new IRPZone.ID(caster.getID().getZoneID()));
zone.assignRPObjectID(chat_entrychatEntry);
zone.add(chat_entrychatEntry);
}
}
 
@Override
public AccountResult createAccount(String username, String password, String email) {
TransactionPool transactionPool = TransactionPool.get();
Line 134 ⟶ 145:
}
 
@Override
public CharacterResult createCharacter(String username, String charactercharacterName, RPObject template) {
TransactionPool transactionPool = TransactionPool.get();
DBTransaction trans = transactionPool.beginWork();
CharacterDAO characterDAO = DAORegister.get().get(CharacterDAO.class);
try {
if (characterDAO.hasCharacter(trans, username, charactercharacterName)) {
return new CharacterResult(Result.FAILED_PLAYER_EXISTSFAILED_CHARACTER_EXISTS, charactercharacterName, template);
}
IRPZone zone = world.getRPZone(new IRPZone.ID("lobby"));
RPObject objectcharacter = new RPObject(template);
objectcharacter.put("nick", charactercharacterName);
zone.assignRPObjectID(objectcharacter);
characterDAO.addCharacter(trans, username, charactercharacterName, objectcharacter);
transactionPool.commit(trans);
return new CharacterResult(Result.OK_CREATED, charactercharacterName, objectcharacter);
} catch (Exception e1) {
transactionPool.rollback(trans);
 
return new CharacterResult(Result.FAILED_EXCEPTION, charactercharacterName, template);
}
}
Line 171 ⟶ 183:
 
== Deployment ==
So, we have two files, World.java and Rule.java, which contain the classes mentioned above.
 
YouOn Windows, you can compile them using command
<pre>
javac -cp marauroa.jar;log4j.jar;. *.java
</pre>
On Linux and MacOSX, you have to replace the ";" with ":".
<pre>
javac -cp marauroa.jar:log4j.jar:. *.java
</pre>
 
Line 206 ⟶ 222:
<pre>
java -cp marauroa.jar;h2.jar;log4j.jar;. marauroa.server.marauroad -c server.ini
</pre>
Again, on Linux and MacOSX, you have to replace the ";" with ":".
<pre>
java -cp marauroa.jar:h2.jar:log4j.jar:. marauroa.server.marauroad -c server.ini
</pre>