private void performMove(EntityManager manager,HttpServletRequest request,
			String mobileHash, Game game, String move) throws Exception {
		EntityTransaction transaction=manager.getTransaction();
		if (!game.getCurrentPlayer().equals(mobileHash)) {
			throw new Exception("It is not your turn to move, Please wait for "
					+ (game.getMovesCount() % 2 == 0 ? "White" : "Black")
					+ " Move");
		}
		ChessBoard board = game.reCreateBoard();
		board.performMove(Move.getMove(board, move));
		game.init(board);
		Result result = board.getResult();
		switch (result.getStatus()) {
		case PROGRESS: {
			if (!TxtChessUtil.isAI_Game(game)) {
				TxtChessUtil.pushMessage(manager, game.getCurrentPlayer(),
						mobileHash, game);
			}
			try{
			transaction.begin();
			manager.merge(game);
			transaction.commit();
			}
			catch (Exception e) {
				try {
					transaction.rollback();
				} catch (Exception ex) {
					ex.printStackTrace();
				}
				throw new Exception("Unable to perform your move (Internal Error)",e);
			}
			request.setAttribute("__message",
					"Your Opponent notified of your Move ");
			setJspPath("/jsp/common/MessageHandler.jsp");
			break;
		}
		default: {
			gamesEnded(manager, request, game, result, mobileHash);
			break;
		}
		}
		
	}