package mods.eln.integration.waila; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import mods.eln.Eln; import mods.eln.misc.Coordonate; import mods.eln.packets.GhostNodeWailaRequestPacket; import mods.eln.packets.SixNodeWailaRequestPacket; import mods.eln.packets.TransparentNodeRequestPacket; import java.util.Map; import java.util.concurrent.TimeUnit; /** * Created by Gregory Maddra on 2016-06-29. */ public class WailaCache { public static LoadingCache<Coordonate, Map<String, String>> nodes = CacheBuilder.newBuilder() .maximumSize(20) .refreshAfterWrite(2, TimeUnit.SECONDS) .build( new CacheLoader<Coordonate, Map<String, String>>() { public Map<String, String> load(Coordonate key) throws Exception { Eln.elnNetwork.sendToServer(new TransparentNodeRequestPacket(key)); return null; } @Override public ListenableFuture<Map<String, String>> reload(Coordonate key, Map<String, String> oldValue) throws Exception { load(key); return Futures.immediateFuture(oldValue); } } ); public static LoadingCache<SixNodeCoordonate, SixNodeWailaData> sixNodes = CacheBuilder.newBuilder() .maximumSize(20) .refreshAfterWrite(2, TimeUnit.SECONDS) .build( new CacheLoader<SixNodeCoordonate, SixNodeWailaData>() { public SixNodeWailaData load(SixNodeCoordonate key) throws Exception { Eln.elnNetwork.sendToServer(new SixNodeWailaRequestPacket(key.getCoord(), key.getSide())); return null; } @Override public ListenableFuture<SixNodeWailaData> reload(SixNodeCoordonate key, SixNodeWailaData oldValue) throws Exception { load(key); return Futures.immediateFuture(oldValue); } } ); public static LoadingCache<Coordonate, GhostNodeWailaData> ghostNodes = CacheBuilder.newBuilder() .maximumSize(20) .refreshAfterWrite(10, TimeUnit.SECONDS) .build( new CacheLoader<Coordonate, GhostNodeWailaData>() { public GhostNodeWailaData load(Coordonate key) throws Exception { Eln.elnNetwork.sendToServer(new GhostNodeWailaRequestPacket(key)); return null; } @Override public ListenableFuture<GhostNodeWailaData> reload(Coordonate key, GhostNodeWailaData oldValue) throws Exception { load(key); return Futures.immediateFuture(oldValue); } } ); }