/**
*
*/
package logbook.test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.StringReader;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.Date;
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonReader;
import logbook.dto.BattleExDto;
import logbook.dto.BattlePhaseKind;
import logbook.dto.ResultRank;
import logbook.internal.MasterData;
import org.apache.commons.io.FileUtils;
import com.dyuproject.protostuff.LinkedBuffer;
import com.dyuproject.protostuff.ProtostuffIOUtil;
import com.dyuproject.protostuff.Schema;
import com.dyuproject.protostuff.runtime.RuntimeSchema;
/**
* @author Nekopanda
*
*/
public class BattleRankChecker {
/**
* @param args
*/
public static void main(String[] args) {
boolean init = MasterData.INIT_COMPLETE;
File dir = new File(args[0]);
File[] files = dir.listFiles();
String[] fileNameList = new String[files.length];
for (int i = 0; i < files.length; ++i) {
fileNameList[i] = files[i].getAbsolutePath();
}
Arrays.sort(fileNameList);
int resultCount = 0;
int[] rankCount = new int[10];
try {
FileOutputStream output = new FileOutputStream("dump-data.dat");
Schema<BattleExDto> schema = RuntimeSchema.getSchema(BattleExDto.class);
LinkedBuffer buffer = LinkedBuffer.allocate(128 * 1024);
BattleExDto battle = null;
for (int i = 0; i < fileNameList.length; ++i) {
String fileName = fileNameList[i];
boolean ignore = false;
boolean isBattleResult = false;
BattlePhaseKind kind = BattlePhaseKind.BATTLE;
if (fileName.endsWith("COMBINED_BATTLE_MIDNIGHT.json")) {
kind = BattlePhaseKind.COMBINED_MIDNIGHT;
}
else if (fileName.endsWith("COMBINED_BATTLE_SP_MIDNIGHT.json")) {
kind = BattlePhaseKind.COMBINED_SP_MIDNIGHT;
}
else if (fileName.endsWith("COMBINED_BATTLE.json")) {
kind = BattlePhaseKind.COMBINED_BATTLE;
}
else if (fileName.endsWith("COMBINED_AIR_BATTLE.json")) {
kind = BattlePhaseKind.COMBINED_AIR;
}
else if (fileName.endsWith("PRACTICE_BATTLE_MIDNIGHT.json")) {
kind = BattlePhaseKind.MIDNIGHT;
}
else if (fileName.endsWith("PRACTICE_BATTLE.json")) {
kind = BattlePhaseKind.BATTLE;
}
else if (fileName.endsWith("BATTLE_NIGHT_TO_DAY.json")) {
kind = BattlePhaseKind.NIGHT_TO_DAY;
}
else if (fileName.endsWith("BATTLE_SP_MIDNIGHT.json")) {
kind = BattlePhaseKind.SP_MIDNIGHT;
}
else if (fileName.endsWith("BATTLE_MIDNIGHT.json")) {
kind = BattlePhaseKind.MIDNIGHT;
}
else if (fileName.endsWith("BATTLE.json")) {
kind = BattlePhaseKind.BATTLE;
}
else if (fileName.endsWith("BATTLE_RESULT.json")) {
isBattleResult = true;
}
else if (fileName.endsWith("COMBINED_BATTLE_RESULT.json")) {
isBattleResult = true;
}
else if (fileName.endsWith("PRACTICE_BATTLE_RESULT.json")) {
isBattleResult = true;
}
else {
ignore = true;
}
if (ignore == false) {
String jsonString = FileUtils.readFileToString(new File(fileName), Charset.forName("MS932"));
JsonReader jsonreader = Json.createReader(new StringReader(jsonString));
JsonObject json = jsonreader.readObject();
JsonObject data = json.getJsonObject("api_data");
if (data == null)
continue;
if (isBattleResult == false) {
if (battle == null) {
battle = new BattleExDto(new Date());
}
battle.addPhase(data, kind);
}
else if (battle != null) {
battle.setResult(data, null);
// ランクが合っているかチェック
ResultRank estimatedRank = battle.getLastPhase().getEstimatedRank();
if (!battle.getRank().equals(estimatedRank.rank())) {
System.out.println("戦闘結果判定ミス: 正解ランク:" + battle.getRank() + " "
+ battle.getLastPhase().getRankCalcInfo(battle));
}
ProtostuffIOUtil.writeDelimitedTo(output, battle, schema, buffer);
buffer.clear();
battle = null;
++resultCount;
}
jsonreader.close();
}
}
output.close();
System.out.println(resultCount + "件の戦闘結果を処理");
System.out.println(Arrays.toString(rankCount));
} catch (IOException e) {
System.out.println("なんかエラーっぽい");
e.printStackTrace();
}
}
}