/*
* gw2live - GuildWars 2 Dynamic Map
*
* Website: http://gw2map.com
*
* Copyright 2013 zyclonite networx
* http://zyclonite.net
* Developer: Lukas Prettenthaler
*/
package net.zyclonite.gw2live.threads;
import com.hazelcast.core.IMap;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.Callable;
import net.zyclonite.gw2live.model.PveEvent;
import net.zyclonite.gw2live.service.EsperEngine;
import net.zyclonite.gw2live.service.Gw2Client;
import net.zyclonite.gw2live.service.HazelcastCache;
import net.zyclonite.gw2live.service.MongoDB;
/**
*
* @author zyclonite
*/
public class PveEventMatcher implements Callable<Boolean> {
private final IMap<Integer, PveEvent> pveEventCache;
private final Gw2Client client;
private final MongoDB db;
private final EsperEngine esper;
private final Date timestamp;
public PveEventMatcher() {
final HazelcastCache hz = HazelcastCache.getInstance();
pveEventCache = hz.getPveCacheMap();
client = Gw2Client.getInstance();
db = MongoDB.getInstance();
esper = EsperEngine.getInstance();
timestamp = new Date();
}
private Boolean getPveEvents() {
final List<PveEvent> pveevents = new ArrayList<>();
final List<PveEvent> events = client.getPveEvents(null, null).getEvents();
for (final PveEvent event : events) {
final PveEvent oldEvent = pveEventCache.get(event.hashCode());
if (!event.equals(oldEvent)) {
event.setTimestamp(timestamp);
pveEventCache.putAsync(event.hashCode(), event);
esper.sendEvent(event);
pveevents.add(event);
}
}
db.savePveEvents(pveevents);
return true;
}
@Override
public Boolean call() throws Exception {
return getPveEvents();
}
}