package net.taehui.twilight.system import com.fasterxml.jackson.core.type.TypeReference import com.fasterxml.jackson.databind.ObjectMapper import net.taehui.twilight.Avatar import net.taehui.twilight.Logger import java.io.IOException import java.nio.file.Files import java.nio.file.Paths import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.CopyOnWriteArraySet object TracedIP : Logger { private var tracedIPStore = ConcurrentHashMap<String, CopyOnWriteArraySet<String>>() fun loadTracedIP() { try { tracedIPStore.putAll( ObjectMapper().readValue( Paths.get("Traced IP.json").toFile(), object : TypeReference<ConcurrentHashMap<String, CopyOnWriteArraySet<String>>>() {}) ) logInfo("Loaded Traced IP") saveTracedIP() } catch (e: IOException) { logFault(e) } } fun saveTracedIP() { Files.newOutputStream(Paths.get("Traced IP.json")) .use { ObjectMapper().writerWithDefaultPrettyPrinter().writeValue(it, tracedIPStore) } logInfo("Saved Traced IP") } fun putTracedIP(avatar: Avatar, avatarID: String) { if (!avatar.isAwilight) { tracedIPStore.computeIfAbsent(avatar.remote) { CopyOnWriteArraySet() }.add(avatarID) } } fun getAvatarID(avatarIP: String): String { return (tracedIPStore[avatarIP] ?: emptyList<String>()).joinToString() } }