/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package web.servlets;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.scotlandyard.engine.Game;
import org.scotlandyard.engine.GameException;
import org.scotlandyard.engine.Player;
import org.scotlandyard.engine.User;
import org.scotlandyard.engine.constants.PlayerRole;
import org.scotlandyard.engine.json.JsonFactory;
import org.scotlandyard.impl.engine.Detective;
import org.scotlandyard.impl.engine.GameEngine;
import org.scotlandyard.impl.engine.MrX;
import org.scotlandyard.impl.engine.PlayerPositionImpl;
/**
* TODO add a description for this class
*
*
* @author Hussain Al-Mutawa
* @version 2.0
* @since Sun Sep 23, 2011
*/
public class JoinGame extends AbstractServlet implements IRequestProcessor{
private /*transient*/ User user;
private /*transient*/ Game game;
private /*transient*/ PlayerRole playerRole;
//TODO add documentation about the action performed by getting the output of this servlet
@Override
public Object getOutput(
final HttpServletRequest request,
final GameEngine engine) throws GameException {
try{
playerRole = PlayerRole.valueOf(request.getParameter("role"));
}catch(Exception ex){
throw new GameException("playing role is not recognized");
}
String gameId = request.getParameter("gameId");
if(gameId==null){
throw new GameException("gameId is null");
}
game = engine.getLobby().getGame(gameId);
if(game==null){
throw new GameException("game is not found");
}
user = (User)engine.getUsers().get(getSessionId());
if(user==null){
throw new GameException("user is null");
}
if(game.hasPlayer(user.getEmail()))
{
throw new GameException("you are already playing a game");
}
if(playerRole==PlayerRole.MrX && game.getMrX()!=null){
throw new GameException("MrX player has been taken by someone else");
}
else if(playerRole==PlayerRole.Detective && game.getDetectives().size()>=GameEngine.MIXIMUM_NUMBER_OF_DETECTIVES){
throw new GameException("Sorry, this game is full. try to create another game and play with someone else");
}
final Player player;
if(playerRole==PlayerRole.MrX){
player = new MrX(user);
game.setMrX(player);
}else{ // if(playerRole==PlayerRole.Detective){
player = new Detective(user);
game.addDetective((Detective)player);
}
game.setPlayerPosition(player.getEmail(), game.getEmptyPositionLabel());
return ( JsonFactory.toJson( user.getName() ) );
}
@Override
public void validateRequest(
final HttpServletRequest request,
final GameEngine engine) throws GameException {
}
}