Marauroa Chat Tutorial/Server: Difference between revisions

Jump to navigation Jump to search
Content deleted Content added
imported>Hendrik Brummermann
imported>Hendrik Brummermann
added missing call to world.initialize() as reported by maxgmer
 
(22 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Navigation for Marauroa Top|Using}}
{{Navigation for Marauroa Top|Using}}
{{Navigation for Marauroa Users}}
{{Navigation for Marauroa Users}}
{{Marauroa Tutorial}}
{{Marauroa Chat Tutorial}}




Line 18: Line 18:
if (instance == null) {
if (instance == null) {
instance = new World();
instance = new World();
instance.initialize();
}
}
return instance;
return instance;
}
}
@Override
public void onInit() {
public void onInit() {
super.onInit();
super.onInit();
Line 38: Line 40:
<!-- Please, see details here http://stendhal.game-host.org/wiki/index.php/Refactoring_Database_Access_in_Marauroa. -->
<!-- Please, see details here http://stendhal.game-host.org/wiki/index.php/Refactoring_Database_Access_in_Marauroa. -->
<source lang="java">
<source lang="java">
import java.util.List;
import java.sql.SQLException;
import java.sql.SQLException;


Line 71: Line 72:
}
}


@Override
public void setContext(RPServerManager rpman) {
public void setContext(RPServerManager rpman) {
manager = rpman;
manager = rpman;
}
}


@Override
public boolean checkGameVersion(String game, String version) {
public boolean checkGameVersion(String game, String version) {
return game.equals("Chat");
return game.equals("Chat");
}
}


@Override
public synchronized void onTimeout(RPObject object) {
public synchronized void onTimeout(RPObject character) {
onExit(object);
onExit(character);
}
}


@Override
public synchronized boolean onExit(RPObject object) {
public synchronized boolean onExit(RPObject character) {
world.remove(object.getID());
world.remove(character.getID());
return true;
return true;
}
}


@Override
public synchronized boolean onInit(RPObject object) {
public synchronized boolean onInit(RPObject character) {
IRPZone zone = world.getRPZone(new IRPZone.ID("lobby"));
IRPZone zone = world.getRPZone(new IRPZone.ID("lobby"));
zone.add(object);
zone.add(character);
return true;
return true;
}
}


@Override
public synchronized void beginTurn() {
public synchronized void beginTurn() {
}
}


@Override
public boolean onActionAdd(RPObject caster, RPAction action, List<RPAction> actionList) {
public boolean onActionAdd(RPObject caster, RPAction action, List<RPAction> actionList) {
return true;
return true;
}
}


@Override
public synchronized void endTurn() {
public synchronized void endTurn() {
}
}


@Override
public void execute(RPObject caster, RPAction action) {
public void execute(RPObject caster, RPAction action) {
if (action.get("type").equals("chat")) {
if (action.get("type").equals("chat")) {
RPObject chat_entry = new RPObject();
RPObject chatEntry = new RPObject();
chat_entry.put("text", action.get("text"));
chatEntry.put("text", action.get("text"));
chat_entry.put("from", caster.get("nick"));
chatEntry.put("from", caster.get("nick"));
chat_entry.put("turn", manager.getTurn());
chatEntry.put("turn", manager.getTurn());
IRPZone zone = world.getRPZone(new IRPZone.ID(caster.getID().getZoneID()));
IRPZone zone = world.getRPZone(new IRPZone.ID(caster.getID().getZoneID()));
zone.assignRPObjectID(chat_entry);
zone.assignRPObjectID(chatEntry);
zone.add(chat_entry);
zone.add(chatEntry);
}
}
}
}


@Override
public AccountResult createAccount(String username, String password, String email) {
public AccountResult createAccount(String username, String password, String email) {
TransactionPool transactionPool = TransactionPool.get();
TransactionPool transactionPool = TransactionPool.get();
Line 134: Line 145:
}
}


@Override
public CharacterResult createCharacter(String username, String character, RPObject template) {
public CharacterResult createCharacter(String username, String characterName, RPObject template) {
TransactionPool transactionPool = TransactionPool.get();
TransactionPool transactionPool = TransactionPool.get();
DBTransaction trans = transactionPool.beginWork();
DBTransaction trans = transactionPool.beginWork();
CharacterDAO characterDAO = DAORegister.get().get(CharacterDAO.class);
CharacterDAO characterDAO = DAORegister.get().get(CharacterDAO.class);
try {
try {
if (characterDAO.hasCharacter(trans, username, character)) {
if (characterDAO.hasCharacter(trans, username, characterName)) {
return new CharacterResult(Result.FAILED_PLAYER_EXISTS, character, template);
return new CharacterResult(Result.FAILED_CHARACTER_EXISTS, characterName, template);
}
}
IRPZone zone = world.getRPZone(new IRPZone.ID("lobby"));
IRPZone zone = world.getRPZone(new IRPZone.ID("lobby"));
RPObject object = new RPObject(template);
RPObject character = new RPObject(template);
object.put("nick", character);
character.put("nick", characterName);
zone.assignRPObjectID(object);
zone.assignRPObjectID(character);
characterDAO.addCharacter(trans, username, character, object);
characterDAO.addCharacter(trans, username, characterName, character);
transactionPool.commit(trans);
transactionPool.commit(trans);
return new CharacterResult(Result.OK_CREATED, character, object);
return new CharacterResult(Result.OK_CREATED, characterName, character);
} catch (Exception e1) {
} catch (Exception e1) {
transactionPool.rollback(trans);
transactionPool.rollback(trans);


return new CharacterResult(Result.FAILED_EXCEPTION, character, template);
return new CharacterResult(Result.FAILED_EXCEPTION, characterName, template);
}
}
}
}
Line 171: Line 183:


== Deployment ==
== Deployment ==
So, we have two files, World.java and Rule.java, which contain the classes mentioned above.
So, we have two files, World.java and Rule.java, which contain the classes mentioned above.


You can compile them using command
On Windows, you can compile them using command
<pre>
<pre>
javac -cp marauroa.jar;log4j.jar;. *.java
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>
</pre>


Line 206: Line 222:
<pre>
<pre>
java -cp marauroa.jar;h2.jar;log4j.jar;. marauroa.server.marauroad -c server.ini
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>
</pre>


Line 212: Line 232:
== Next Steps ==
== Next Steps ==


In the next section of this tutorial, we will write the '''[[Marauroa Tutorial/Text Client|client]]''' which will connect to our server.
In the next section of this tutorial, we will write the '''[[Marauroa Chat Tutorial/Text Client|client]]''' which will connect to our server.


[[Category:Marauroa]]
[[Category:Marauroa]]
{{#breadcrumbs: [[Marauroa]] | [[Navigation for Marauroa Users|Using]] | [[Marauroa Tutorial|Tutorial]] | [[Marauroa Tutorial/Server|Server]]}}
{{#breadcrumbs: [[Marauroa]] | [[Navigation for Marauroa Users|Using]] | [[Marauroa Chat Tutorial|Tutorial]] | [[Marauroa Chat Tutorial/Server|Server]]}}