package logbook.gui.background; import java.util.List; import logbook.config.AppConfig; import logbook.config.ShipGroupConfig; import logbook.constants.AppConstants; import logbook.data.context.GlobalContext; import logbook.dto.CreateItemDto; import logbook.dto.GetShipDto; import logbook.dto.MissionResultDto; import logbook.dto.ShipInfoDto; import logbook.gui.ApplicationMain; import logbook.gui.logic.CreateReportLogic; import logbook.internal.BattleResultServer; import logbook.internal.EnemyData; import logbook.internal.LoggerHolder; import logbook.internal.MasterData; import logbook.internal.ShipParameterRecord; import logbook.server.proxy.ProxyServer; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; /** * 時間のかかる初期化を別スレッドで実行します */ public final class BackgroundInitializer extends Thread { private static final LoggerHolder LOG = new LoggerHolder(BackgroundInitializer.class); private final Display display; /** * コンストラクター * * @param shell */ public BackgroundInitializer(Shell shell) { this.display = shell.getDisplay(); this.setName("logbook_async_initializer"); } @Override public void run() { ApplicationMain.sysPrint("バックグラウンド初期化開始"); try { // プロキシサーバーを開始する ProxyServer.start(); } catch (Exception e) { LOG.get().warn("サーバ起動に失敗しました", e); } ApplicationMain.sysPrint("サーバ起動完了"); ApplicationMain.getUserlogger().get().info(AppConstants.TITLEBAR_TEXT + " 起動しました"); ApplicationMain.sysPrint("ロガー初期化完了"); // 設定ファイルを読み込む(遅延初期化が実装されているが先読みしておく) try { boolean success = true; success &= MasterData.INIT_COMPLETE; // MasterData ShipGroupConfig.get(); // ShipGroupConfig success &= GlobalContext.INIT_COMPLETE; // ItemConfig success &= EnemyData.INIT_COMPLETE; // EnemyData success &= ShipParameterRecord.INIT_COMPLETE; // ShipParameterRecord if (success) { this.display.asyncExec(new Runnable() { @Override public void run() { for (ShipInfoDto ship : MasterData.getMaster().getShips().values()) { ShipParameterRecord.update(ship, null); } } }); } else { LOG.get().warn("設定ファイルの読み込みに失敗したっぽい?"); } } catch (Exception e) { LOG.get().warn("設定ファイル読み込みでエラーが発生しました", e); } ApplicationMain.sysPrint("設定ファイル読み込み完了"); try { // 遠征ログ final List<MissionResultDto> missionResultList = AppConfig.get().isLoadMissionLog() ? CreateReportLogic.loadMissionReport() : null; if (missionResultList != null) { this.display.asyncExec(new Runnable() { @Override public void run() { GlobalContext.addMissionResultList(missionResultList); ApplicationMain.logPrint("遠征ログ読み込み完了(" + missionResultList.size() + "件)"); } }); } } catch (Exception e) { LOG.get().warn("遠征ログ読み込みでエラー", e); } try { // 建造ログ final List<GetShipDto> createShipList = AppConfig.get().isLoadCreateShipLog() ? CreateReportLogic.loadCreateShipReport() : null; if (createShipList != null) { this.display.asyncExec(new Runnable() { @Override public void run() { GlobalContext.addGetshipList(createShipList); ApplicationMain.logPrint("建造ログ読み込み完了(" + createShipList.size() + "件)"); } }); } } catch (Exception e) { LOG.get().warn("建造ログ読み込みでエラー", e); } try { // 開発ログ final List<CreateItemDto> createItemList = AppConfig.get().isLoadCreateItemLog() ? CreateReportLogic.loadCreateItemReport() : null; if (createItemList != null) { this.display.asyncExec(new Runnable() { @Override public void run() { GlobalContext.addCreateItemList(createItemList); ApplicationMain.logPrint("開発ログ読み込み完了(" + createItemList.size() + "件)"); } }); } } catch (Exception e) { LOG.get().warn("開発ログ読み込みでエラー", e); } try { // 出撃ログファイル読み込み BattleResultServer.load(); final int failCount = BattleResultServer.get().getFailCount(); this.display.asyncExec(new Runnable() { @Override public void run() { final int numLogRecord = BattleResultServer.get().size(); ApplicationMain.logPrint("出撃ログ読み込み完了(" + numLogRecord + "件)"); if (failCount > 0) { ApplicationMain.logPrint("注意:" + failCount + "件の出撃ログ読み込みに失敗しています"); } } }); } catch (Exception e) { LOG.get().warn("出撃ログの読み込みに失敗しました (" + AppConfig.get().getBattleLogPath() + ")", e); } ApplicationMain.logPrint("バックグラウンド初期化完了"); } }