我正在使用 Spring 和 MongoDB 为游戏制作 Web 服务。其中一项功能是,每天,玩家都可以投票给其他玩家杀死。在一天结束时,投票被统计,得票最多的玩家被杀死。这是杀死投票最多的玩家的代码(在一个更大的方法中endDay()
):
//mostVotes is the player's id in the database.
//Player is just a transient domain object
//playerDAO is a custom DAO that interfaces with MongoDB (see below)
Player accused = playerDAO.getPlayerByID(mostVotes);
logger.info(accused.getIsDead()); //This is false
doKill(accused);
logger.info(playerDAO.getPlayerByID(mostVotes).getIsDead()); //This is true
这是 getPlayerByID():
//mongoTemplate is a MongoOperations object
public Player getPlayerByID(String id) throws NoPlayerFoundException {
Player p = mongoTemplate.findById(id, Player.class);
if (p == null) {
throw new NoPlayerFoundException(id);
}
return p;
}
和doKill():
private void doKill(Player p) {
p.setIsDead(true);
playerDAO.updatePlayer(p);
}
和更新播放器():
public void updatePlayer(Player p) {
mongoTemplate.save(p);
}
如您所见,当我在杀死玩家后(在图中endDay()
)询问玩家的状态时,他似乎已经死了,这正是我们想要的。
现在我向 发出请求/player/id
,id
玩家的 id 在哪里。这让我返回了结果 Player 对象的 JSON 编码(使用与getPlayerByID()
上面相同的方法)。如果我用死去的玩家的 id 提出这个请求,他就会活着回来。
更复杂的是,其他更新可以跨请求进行。例如,某些玩家可以在没有投票的情况下杀死其他玩家。这种杀戮使用完全相同的Player
, getPlayerByID()
,doKill()
和updatePlayer()
,并且受害者的死亡持续存在。
我目前正在本地主机上的 Tomcat v7.0 服务器上运行它。