import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
import net.pterodactylus.fcp.AllData;
import net.pterodactylus.fcp.ClientGet;
+import net.pterodactylus.fcp.FcpMessage;
import net.pterodactylus.fcp.FcpUtils.TempInputStream;
import net.pterodactylus.fcp.GetFailed;
import net.pterodactylus.fcp.Priority;
private final ExecutorService threadPool;
private final ConnectionSupplier connectionSupplier;
- private String identifier;
private boolean ignoreDataStore;
private boolean dataStoreOnly;
private Long maxSize;
}
@Override
- public ClientGetCommand identifier(String identifier) {
- this.identifier = identifier;
- return this;
- }
-
- @Override
public ClientGetCommand ignoreDataStore() {
ignoreDataStore = true;
return this;
}
private ClientGet createClientGetCommand(String uri) {
+ String identifier = new RandomIdentifierGenerator().generate();
ClientGet clientGet = new ClientGet(uri, identifier, ReturnType.direct);
if (ignoreDataStore) {
clientGet.setIgnoreDataStore(true);
private class ClientGetReplySequence extends FcpReplySequence<Optional<Data>> {
+ private final AtomicReference<String> identifier = new AtomicReference<>();
private final AtomicBoolean finished = new AtomicBoolean();
private final AtomicBoolean failed = new AtomicBoolean();
- private final String identifier = ClientGetCommandImpl.this.identifier;
-
private String contentType;
private long dataLength;
private InputStream payload;
@Override
protected void consumeAllData(AllData allData) {
- if (allData.getIdentifier().equals(identifier)) {
+ if (allData.getIdentifier().equals(identifier.get())) {
synchronized (this) {
contentType = allData.getContentType();
dataLength = allData.getDataLength();
@Override
protected void consumeGetFailed(GetFailed getFailed) {
- if (getFailed.getIdentifier().equals(identifier)) {
+ if (getFailed.getIdentifier().equals(identifier.get())) {
failed.set(true);
}
}
failed.set(true);
}
+ @Override
+ public Future<Optional<Data>> send(FcpMessage fcpMessage) throws IOException {
+ identifier.set(fcpMessage.getField("Identifier"));
+ return super.send(fcpMessage);
+ }
+
}
}