/** Called when the user hits play */ @Override public ILauncher getLauncher() { // update local cache and write to disk before game starts final IForumPoster poster = (IForumPoster) m_forumPosterEditor.getBean(); if (poster != null) { LocalBeanCache.INSTANCE.storeSerializable(poster.getClass().getCanonicalName(), poster); } final IEmailSender sender = (IEmailSender) m_emailSenderEditor.getBean(); if (sender != null) { LocalBeanCache.INSTANCE.storeSerializable(sender.getClass().getCanonicalName(), sender); } final IWebPoster web = (IWebPoster) m_webPosterEditor.getBean(); if (web != null) { LocalBeanCache.INSTANCE.storeSerializable(web.getClass().getCanonicalName(), web); } final IRemoteDiceServer server = (IRemoteDiceServer) m_diceServerEditor.getBean(); LocalBeanCache.INSTANCE.storeSerializable(server.getDisplayName(), server); LocalBeanCache.INSTANCE.writeToDisk(); // create local launcher final String gameUUID = (String) m_gameSelectorModel.getGameData().getProperties().get(GameData.GAME_UUID); final PBEMDiceRoller randomSource = new PBEMDiceRoller((IRemoteDiceServer) m_diceServerEditor.getBean(), gameUUID); final Map<String, String> playerTypes = new HashMap<>(); final Map<String, Boolean> playersEnabled = new HashMap<>(); for (final PBEMLocalPlayerComboBoxSelector player : m_playerTypes) { playerTypes.put(player.getPlayerName(), player.getPlayerType()); playersEnabled.put(player.getPlayerName(), player.isPlayerEnabled()); } // we don't need the playerToNode list, the // disable-able players, or the alliances // list, for a local game final PlayerListing pl = new PlayerListing( null, playersEnabled, playerTypes, m_gameSelectorModel.getGameData().getGameVersion(), m_gameSelectorModel.getGameName(), m_gameSelectorModel.getGameRound(), null, null); return new LocalLauncher(m_gameSelectorModel, randomSource, pl); }
@Override public void postStartGame() { // // store the dice server final GameData data = m_gameSelectorModel.getGameData(); data.getProperties().set(DICE_ROLLER, m_diceServerEditor.getBean()); // store the Turn Summary Poster final IForumPoster poster = (IForumPoster) m_forumPosterEditor.getBean(); if (poster != null) { IForumPoster summaryPoster = poster; // clone the poster, the remove sensitive info, and put the clone into the game data // this was the sensitive info is not stored in the save game, but the user cache still has // the password summaryPoster = summaryPoster.doClone(); summaryPoster.clearSensitiveInfo(); data.getProperties().set(PBEMMessagePoster.FORUM_POSTER_PROP_NAME, summaryPoster); } // store the email poster IEmailSender sender = (IEmailSender) m_emailSenderEditor.getBean(); if (sender != null) { // create a clone, delete the sensitive information in the clone, and use it in the game // the locally cached version still has the password so the user doesn't have to enter it // every time sender = sender.doClone(); sender.clearSensitiveInfo(); data.getProperties().set(PBEMMessagePoster.EMAIL_SENDER_PROP_NAME, sender); } // store the web site poster IWebPoster webPoster = (IWebPoster) m_webPosterEditor.getBean(); if (webPoster != null) { webPoster = webPoster.doClone(); webPoster.clearSensitiveInfo(); data.getProperties().set(PBEMMessagePoster.WEB_POSTER_PROP_NAME, webPoster); } // store whether we are a pbem game or not, whether we are capable of posting a game save if (poster != null || sender != null || webPoster != null) { data.getProperties().set(PBEMMessagePoster.PBEM_GAME_PROP_NAME, true); } }
/** * Load the Forum poster that are stored in the GameData, and select it in the list. Sensitive * information such as passwords are not stored in save games, so the are loaded from the * LocalBeanCache * * @param data the game data */ private void loadForumPosters(final GameData data) { // get the forum posters, final List<IForumPoster> forumPosters = new ArrayList<>(); forumPosters.add((IForumPoster) findCachedOrCreateNew(NullForumPoster.class)); forumPosters.add((IForumPoster) findCachedOrCreateNew(AxisAndAlliesForumPoster.class)); forumPosters.add((IForumPoster) findCachedOrCreateNew(TripleAWarClubForumPoster.class)); m_forumPosterEditor.setBeans(forumPosters); // now get the poster stored in the save game final IForumPoster forumPoster = (IForumPoster) data.getProperties().get(PBEMMessagePoster.FORUM_POSTER_PROP_NAME); if (forumPoster != null) { // if we have a cached version, use the credentials from this, as each player has different // forum login final IForumPoster cached = (IForumPoster) LocalBeanCache.INSTANCE.getSerializable(forumPoster.getClass().getCanonicalName()); if (cached != null) { forumPoster.setUsername(cached.getUsername()); forumPoster.setPassword(cached.getPassword()); } m_forumPosterEditor.setSelectedBean(forumPoster); } }