Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package org.server.core.model.custom; import java.util.LinkedList; import java.util.List; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; import org.hibernate.Session; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.server.core.GameResource; import org.server.core.UserCenter; import org.server.core.data.DataSource; import org.server.core.model.Roominfo; import org.server.core.share.TransferModel2.DoubleRespose; import org.server.core.share.TransferModel2.GameResult; import org.server.core.share.TransferModel2.GetCardRespose; import org.server.core.share.TransferModel2.InsuranceRespose; import org.server.core.share.TransferModel2.PlayerChange; import org.server.core.share.TransferModel2.SplitCardRespose; import org.server.core.share.TransferModel2.StartGameRespose; import org.server.core.share.TransferModel2.StopRespose; import org.server.core.share.TransferModel2.SurrenderRespose; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * * @author Administrator */ public class RoomModel { private static final Logger _log = LoggerFactory.getLogger(RoomModel.class); private final int _roomid; private String _roomName; private double _gameCoin;// private double _requestCoin;// ????? private int _userLimit;// ?? private double _maxLimit;// ? private final CopyOnWriteArrayList<UserInfoModel> _userList; private ConcurrentHashMap<Integer, GameModel> _gameUserMap; // private List<UserInfoModel> _playerList;// private final int _gameInfoId;// ?id private final double _roomts;// TS private boolean _roomAndGameStatus; private Object object = new Object(); private int _roomGameStauts;// ??? public RoomModel(int _roomid, String _roomName, double _gameCoin, double _requestCoin, int _userLimit, int _gameInfoId, double _roomts, double _maxLimit) { this._roomid = _roomid; this._roomName = _roomName; this._gameCoin = _gameCoin; this._requestCoin = _requestCoin; this._userLimit = _userLimit; this._gameInfoId = _gameInfoId; this._roomts = _roomts; this._maxLimit = _maxLimit; _gameUserMap = new ConcurrentHashMap<Integer, GameModel>(); _userList = new CopyOnWriteArrayList<>(); updateRoomAndGameStatus(); _roomGameStauts = 0; } public int getRoomGameStauts() { return _roomGameStauts; } public int getRoomid() { return _roomid; } public String getRoomName() { return _roomName; } public double getGameCoin() { return _gameCoin; } public double getMaxLimit() { return _maxLimit; } public double getRequestCoin() { return _requestCoin; } public int getUserLimit() { return _userLimit; } public int getGameInfoId() { return _gameInfoId; } public double getRoomts() { return _roomts; } public List<UserInfoModel> getUserList() { return _userList; } public void setRoomName(String _roomName) { this._roomName = _roomName; } public void setGameCoin(double _gameCoin) { this._gameCoin = _gameCoin; } public void setRequestCoin(double _requestCoin) { this._requestCoin = _requestCoin; } public void setUserLimit(int _userLimit) { this._userLimit = _userLimit; } public String join(UserInfoModel user) { if (_userList.size() >= _userLimit) { return "0,?"; } // if (user.getUserDemond() < _requestCoin) { // return "0,???"; // } String result = "2"; for (UserInfoModel usertemp : _userList) { if (usertemp.getUserid() == user.getUserid()) { usertemp.setSeqidUpdate(user.getSepid()); usertemp.setOpTime(); usertemp.setIpValue(user.getIpValue()); usertemp.setIpValue(user.getIpValue()); usertemp.setParentFc(user.getParentFc()); result = "1"; } } if (result.equals("2")) { _userList.add(user); result = "1"; } return result; } // float a[] =new public int startGame(UserInfoModel user, int chip) { if (chip <= 0) { return -4; } if (user.getUserDemond() < chip) { return -1; } if (_maxLimit < chip) { return -3; } int result = 0; GameModel gameModel = _gameUserMap.get(user.getUserid()); if (gameModel != null && !gameModel.isGameOver()) { return -2; } else if (gameModel != null && gameModel.isGameOver()) { result = user.setUserOrder(chip, _roomid, _roomts, _gameCoin); if (result == 1) { gameModel.init(chip); gameModel.dealCard(); user.setStartGame(true); } } else { result = user.setUserOrder(chip, _roomid, _roomts, _gameCoin); if (result == 1) { gameModel = new GameModel(user.getUserid(), _roomid, chip, user.getTableid()); gameModel.bindDoubleEven(this::onDoubleEven); gameModel.bindGameResultEven(this::onGameResultEven); gameModel.bindGetCardEven(this::onGetCardEven); gameModel.bindInsuranceEven(this::onInsuranceEven); gameModel.bindPlayerChangeAndResult(this::onPlayerChangeAndResult); gameModel.bindSplitCardEven(this::onSplitCardEven); gameModel.bindStartGameEven(this::onStartGameEven); gameModel.bindStopCardEven(this::onStopCardEven); gameModel.bindSurrenderEven(this::onSurrenderEven); gameModel.dealCard(); user.setStartGame(true); } _gameUserMap.put(user.getUserid(), gameModel); } // result = user.setUserOrder(chip, _roomid, _roomts, _gameCoin); // if (result == 1) { // gameModel.dealCard(); // user.setStartGame(true); // } // double money, int roomid, double roomts, double gamecoin return result; } public int getCard(UserInfoModel user, String gameTimeid) { GameModel gameModel = _gameUserMap.get(user.getUserid()); if (gameModel != null) { if (!gameModel.getGameTimeid().equals(gameTimeid)) { return -2; } gameModel.playerGetCard(); return 1; } else { return -1; } } public GameModel getGameByUser(int userid) { return _gameUserMap.get(userid); } public int setDouble(UserInfoModel user, String gameTimeid) { GameModel gameModel = _gameUserMap.get(user.getUserid()); if (gameModel != null) { if (!gameModel.getGameTimeid().equals(gameTimeid)) { return -2; } if (user.getUserDemond() < gameModel.getChipCoin()) { return -1; } user.updateUserOrder(gameModel.getChipCoin()); gameModel.setDouble(); } return 1; } public int setTableID(UserInfoModel user, int tableid) { GameModel gameModel = _gameUserMap.get(user.getUserid()); if (gameModel != null) { if (!gameModel.isGameOver()) { return -2; } gameModel.setTableid(tableid); } else { user.setTableid(tableid); } return tableid; } public int setStop(UserInfoModel user, String gameTimeid) { GameModel gameModel = _gameUserMap.get(user.getUserid()); if (gameModel != null) { if (!gameModel.getGameTimeid().equals(gameTimeid)) { return -2; } gameModel.setStopCard(); } else { return -1; } return 1; } public int setInsurance(UserInfoModel user, boolean hasInsurance, String gameTimeid) { GameModel gameModel = _gameUserMap.get(user.getUserid()); if (gameModel != null) { if (!gameModel.getGameTimeid().equals(gameTimeid)) { return -2; } if (hasInsurance && user.getUserDemond() < gameModel.getChipCoin() / 2) { return -1; } if (hasInsurance) { user.updateUserOrder(gameModel.getChipCoin() / 2); } gameModel.setInsuranceEven(hasInsurance); } return 1; } public int setSplitCard(UserInfoModel user, String gameTimeid) { GameModel gameModel = _gameUserMap.get(user.getUserid()); if (gameModel != null) { if (!gameModel.getGameTimeid().equals(gameTimeid)) { return -2; } if (user.getUserDemond() < gameModel.getChipCoin()) { return -1; } user.updateUserOrder(gameModel.getChipCoin()); gameModel.setSplitCard(); } return 1; } public int setSurrender(UserInfoModel user, String gameTimeid) { GameModel gameModel = _gameUserMap.get(user.getUserid()); if (gameModel != null) { if (!gameModel.getGameTimeid().equals(gameTimeid)) { return -2; } gameModel.setSurrender(); } return 1; } public UserInfoModel getUser(int userid) { for (UserInfoModel user : _userList) { if (user.getUserid() == userid) { return user; } } return null; } public void cleanUser() { for (UserInfoModel user : _userList) { // System.out.println(""+user.getTimeSpan()); if (user.getTimeSpan() > 60) {// && !user.isStartGame()// // GameResource.getInstance().getGameLiveTime() if (user.isStartGame()) { GameModel gameModel = _gameUserMap.get(user.getUserid()); // System.out.println("?"+gameModel.getGameLiveTimeNow()); if (gameModel != null && gameModel.getGameLiveTimeNow() > GameResource.getInstance().getGameLiveTime()) { gameModel.autoSurrender(); _gameUserMap.remove(user.getUserid()); user.setStartGame(false); _userList.remove(user); GameResource.getInstance().deleteGame(user); _gameUserMap.remove(user.getUserid()); } } else { _userList.remove(user); _gameUserMap.remove(user.getUserid()); GameResource.getInstance().deleteGame(user); } } } } public boolean deleteUser(int userid) { for (UserInfoModel user : _userList) { if (user.getUserid() == userid) { GameModel gameModel = _gameUserMap.get(user.getUserid()); if (gameModel != null && !gameModel.isGameOver()) { user.setStartGame(false); gameModel.autoSurrender(); _gameUserMap.remove(user.getUserid()); } _userList.remove(user); GameResource.getInstance().deleteGame(user); return true; } } return false; } public boolean existUser(int userid) { for (UserInfoModel user : _userList) { if (user.getUserid() == userid) { return true; } } return false; } public boolean isRoomAndGameStatus() { return _roomAndGameStatus; } public final void updateRoomAndGameStatus() { Session session = DataSource.openSession(); int roomStatus = 0; int gameStatus = 0; try { roomStatus = (int) session.createCriteria(Roominfo.class) .setProjection(Projections.groupProperty("roomStatus")).add(Restrictions.eq("roomId", _roomid)) .uniqueResult(); gameStatus = Integer.parseInt(GameResource.bjGameModel.readStringValue("gameStatus")); } catch (Exception e) { _log.error("roomAndGameStatus:" + e.getMessage()); } session.close(); if (roomStatus == 1 && gameStatus == 1) { _roomAndGameStatus = true; return; } _roomAndGameStatus = false; } private void onDoubleEven(String gameid, int userid, String errorTip, int player, String newCard) { DoubleRespose.Builder builder = DoubleRespose.newBuilder(); builder.setErrorTip("0"); builder.setPlayer(0); builder.setNewCard("-1"); builder.setUserMoney("-1"); builder.setGameId(gameid); if (errorTip != null) { builder.setErrorTip(errorTip); } else { UserInfoModel user = getUser(userid); if (user == null) { builder.setErrorTip("0,??0011"); } else { builder.setPlayer(player); builder.setNewCard(newCard); builder.setUserMoney(String.valueOf(user.getUserDemond())); } } // System.out.println(userid+"??"+builder.getUserMoney()); UserCenter.getInstance().sendMessage(userid, builder.build()); } private void onGameResultEven(String gameid, int userid, int result1, int result2, int resultAi, List<String> aiCardList, PlayerInfoModel player1, PlayerInfoModel player2, boolean isSplit, double hasInsuranceEven, int tableid, String log) { GameResult.Builder builder = GameResult.newBuilder(); result1 = result1 == 0 ? 3 : result1; result2 = result2 == 0 ? 3 : result2; resultAi = resultAi == 0 ? 3 : resultAi; builder.setPlayerMainResult(result1); builder.setPlayerSubResult(result2); builder.setAiResult(resultAi); builder.setUserMoney("-1"); builder.setResultMoney("-1"); // ?AI??? List<String> aiNewCardList = new LinkedList<>(); for (int i = 2; i < aiCardList.size(); i++) { aiNewCardList.add(aiCardList.get(i)); } builder.addAllAiCardList(aiNewCardList); double EChip = 0;//? // ? UserInfoModel user = getUser(userid); if (user != null) { double chip = player1.getChipCoin(); double orderbargain = 0; double orderresult = 0; double orderbargain2 = 0; double orderresult2 = 0; boolean isTie1 = false; boolean isTie2 = false; if (hasInsuranceEven > 0) { orderbargain -= hasInsuranceEven; } if (result1 == 2) { orderbargain += chip; } else if (result1 == 3) { orderbargain = 0; orderbargain -= hasInsuranceEven; isTie1 = true; } else { orderbargain -= chip; } orderresult = orderbargain; if (orderbargain > 0) { orderresult = orderbargain * (1 - _roomts); } if (isTie1) { EChip += chip; } if (isSplit) { double chip2 = player2.getChipCoin(); if (result2 == 2) { orderbargain2 += chip2; } else if (result2 == 3) { orderbargain2 = 0; isTie2 = true; } else { orderbargain2 -= chip2; } orderresult2 = orderbargain2; if (orderbargain2 > 0) { orderresult2 = orderbargain2 * (1 - _roomts); } if (isTie2) { EChip += chip2; } } double orderResult = user.overOrder(orderbargain + orderbargain2, orderresult + orderresult2, tableid, EChip, log); user.setStartGame(false); builder.setResultMoney(String.valueOf(orderResult)); // System.out.println(userid+"?"+builder.getUserMoney()); // System.out.println("orderbargain111" + orderbargain // + ",orderresult111:" + orderresult); // System.out.println("orderbargain222" + orderbargain2 // + ",orderresult222:" + orderresult2); builder.setUserMoney(String.valueOf(user.getUserDemond())); } builder.setGameId(gameid); // System.out.println("?" + builder.getUserMoney()); // GameModel gameModel = _gameUserMap.get(user.getUserid()); // _gameUserMap.remove(user.getUserid()); UserCenter.getInstance().sendMessage(userid, builder.build()); } private void onGetCardEven(String gameid, int userid, String errorTip, int player, String newCard) { GetCardRespose.Builder builder = GetCardRespose.newBuilder(); builder.setErrorTip("0"); builder.setPlayer(-1); builder.setNewCard("-1"); builder.setGameId(gameid); if (errorTip != null) { builder.setErrorTip(errorTip); } else { builder.setPlayer(player); builder.setNewCard(newCard); } builder.setGameId(gameid); // System.out.println(userid+"???"); UserCenter.getInstance().sendMessage(userid, builder.build()); } private void onInsuranceEven(String gameid, int userid, String errorTip, double diamond, int result) { InsuranceRespose.Builder builder = InsuranceRespose.newBuilder(); builder.setErrorTip("0"); builder.setDemond("-1"); builder.setResult(result); if (errorTip != null) { builder.setErrorTip(errorTip); } else { UserInfoModel user = getUser(userid); if (user == null) { builder.setErrorTip("0,??0011"); } else { builder.setDemond(String.valueOf(diamond)); builder.setUserMoney(String.valueOf(user.getUserDemond())); } } builder.setGameId(gameid); // System.out.println("???"+builder.getUserMoney()+"?id"+gameid); UserCenter.getInstance().sendMessage(userid, builder.build()); } private void onPlayerChangeAndResult(String gameid, int userid, int userNowId, int userNextId, int result) { PlayerChange.Builder builder = PlayerChange.newBuilder(); builder.setErrorTip("0"); builder.setPlayerNow(userNowId); builder.setPlayerNext(userNextId); builder.setPlayerNowResult(result); builder.setGameId(gameid); // System.out.println(userid+"??"); UserCenter.getInstance().sendMessage(userid, builder.build()); } private void onSplitCardEven(String gameid, int userid, String errorTip, List<String> mainCard, List<String> subCard) { SplitCardRespose.Builder builder = SplitCardRespose.newBuilder(); builder.setErrorTip("0"); builder.setUserMoney("0"); if (errorTip != null) { builder.setErrorTip(errorTip); } else { UserInfoModel user = getUser(userid); if (user == null) { builder.setErrorTip("0,??0012"); } else { builder.setUserMoney(String.valueOf(user.getUserDemond())); builder.addAllMainCard(mainCard); builder.addAllSubCard(subCard); } } builder.setGameId(gameid); // System.out.println(userid+"??"+builder.getUserMoney()); UserCenter.getInstance().sendMessage(userid, builder.build()); } private void onStartGameEven(String gameid, int userid, int _isAiBlackJack, int _isSplit, List<String> playerCardList, List<String> aiCardList, int aihasBlack, int playHasBlack) { StartGameRespose.Builder builder = StartGameRespose.newBuilder(); builder.setErrorTip("0"); builder.setUserMoney("-1"); builder.setIsAiBlackjack(_isAiBlackJack == 0 ? -1 : _isAiBlackJack); builder.setIsSplit(_isSplit == 0 ? -1 : _isSplit); builder.addAllAiCardList(aiCardList); builder.addAllPlayerMainCardList(playerCardList); builder.setAiBlackjack(aihasBlack); builder.setPlayerBlackjack(playHasBlack); // UserCenter.getInstance().sendMessage(userid, builder.build()); UserInfoModel user = getUser(userid); if (user == null) { builder.setErrorTip("0,??0012"); } else { builder.setUserMoney(String.valueOf(user.getUserDemond())); } builder.setGameId(gameid); // System.out.println(userid+"???"+builder.getUserMoney()+"?id"+gameid); UserCenter.getInstance().sendMessage(userid, builder.build()); } private void onStopCardEven(String gameid, int userid, String errorTip) { StopRespose.Builder builder = StopRespose.newBuilder(); builder.setErrorTip("0"); builder.setResult2("1"); if (errorTip != null) { builder.setErrorTip(errorTip); } builder.setGameId(gameid); // System.out.println(userid+"???"); UserCenter.getInstance().sendMessage(userid, builder.build()); } private void onSurrenderEven(String gameid, int userid, String errorTip) { SurrenderRespose.Builder builder = SurrenderRespose.newBuilder(); builder.setErrorTip("0"); builder.setResult("1"); if (errorTip != null) { builder.setErrorTip(errorTip); } builder.setGameId(gameid); // System.out.println(userid+"???"); UserCenter.getInstance().sendMessage(userid, builder.build()); } }