package com.mengcraft.protect.manager;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;
import com.mengcraft.protect.util.StringMap;
public class PlayerRecordManager {
private final static PlayerRecordManager MANAGER = new PlayerRecordManager();
private final File file = new File("cached-player-record.txt");
private final StringMap<String> playerAddress = new StringMap<>();
private final StringMap<Long> playerJoinTime = new StringMap<>();
private PlayerRecordManager() {
if (this.file.isFile()) {
readFile();
}
}
public String getAddress(String name) {
return this.playerAddress.get(name);
}
public boolean hasPlayer(String name) {
return this.playerAddress.containsKey(name);
}
public long getLastLogin(String name) {
return this.playerJoinTime.get(name);
}
public void saveRecords() {
try {
FileWriter writer = new FileWriter(this.file);
List<String> names = new ArrayList<>(this.playerAddress.keySet());
loopWrite(writer, names);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void updateRecord(String name, String address, long time) {
this.playerAddress.put(name, address);
this.playerJoinTime.put(name, time);
}
private void loopWrite(FileWriter writer, List<String> names) throws IOException {
for (int i = 0; i < names.size(); i++) {
String name = names.get(i);
if (i > 0) {
writer.write("\n");
}
String addr = this.playerAddress.get(name);
String time = this.playerJoinTime.get(name).toString();
writer.write(name + "|" + addr + "|" + time);
}
}
private void readFile() {
try {
Charset charset = Charset.defaultCharset();
List<String> list = Files.readAllLines(this.file.toPath(), charset);
parse(list);
} catch (IOException e) {
e.printStackTrace();
}
}
private void parse(List<String> list) {
for (String string : list) {
parse(string.split("\\|"));
}
}
private void parse(String[] split) {
String name = split[0];
String address = split[1];
Long time = new Long(split[2]);
this.playerAddress.put(name, address);
this.playerJoinTime.put(name, time);
}
public static PlayerRecordManager getManager() {
return MANAGER;
}
}