/* This code is part of Freenet. It is distributed under the GNU General * Public License, version 2 (or at your option any later version). See * http://www.gnu.org/ for further details of the GPL. */ package freenet.clients.fcp; import freenet.client.async.ClientContext; import freenet.client.async.USKCallback; import freenet.client.async.USKProgressCallback; import freenet.keys.USK; import freenet.node.NodeClientCore; public class SubscribeUSK implements USKProgressCallback { // FIXME allow client to specify priorities final FCPConnectionHandler handler; final String identifier; final NodeClientCore core; final boolean dontPoll; final short prio; final short prioProgress; final USK usk; final USKCallback toUnsub; public SubscribeUSK(SubscribeUSKMessage message, NodeClientCore core, FCPConnectionHandler handler) throws IdentifierCollisionException { this.handler = handler; this.dontPoll = message.dontPoll; this.identifier = message.identifier; this.core = core; this.usk = message.key; prio = message.prio; prioProgress = message.prioProgress; handler.addUSKSubscription(identifier, this); if((!message.dontPoll) && message.sparsePoll) toUnsub = core.uskManager.subscribeSparse(message.key, this, message.ignoreUSKDatehints, handler.getRebootClient().lowLevelClient(message.realTimeFlag)); else { core.uskManager.subscribe(message.key, this, !message.dontPoll, message.ignoreUSKDatehints, handler.getRebootClient().lowLevelClient(message.realTimeFlag)); toUnsub = this; } } @Override public void onFoundEdition(long l, USK key, ClientContext context, boolean wasMetadata, short codec, byte[] data, boolean newKnownGood, boolean newSlotToo) { if(handler.isClosed()) { core.uskManager.unsubscribe(key, toUnsub); return; } //if(newKnownGood && !newSlotToo) return; FCPMessage msg = new SubscribedUSKUpdate(identifier, l, key, newKnownGood, newSlotToo); handler.outputHandler.queue(msg); } @Override public short getPollingPriorityNormal() { return prio; } @Override public short getPollingPriorityProgress() { return prioProgress; } public void unsubscribe() { core.uskManager.unsubscribe(usk, toUnsub); } @Override public void onSendingToNetwork(ClientContext context) { handler.outputHandler.queue(new SubscribedUSKSendingToNetworkMessage(identifier)); } @Override public void onRoundFinished(ClientContext context) { handler.outputHandler.queue(new SubscribedUSKRoundFinishedMessage(identifier)); } }