package com.sequenceiq.samples.client;
import com.sequenceiq.samples.callback.StatusCallback;
import com.sequenceiq.samples.server.Server;
import com.sequenceiq.samples.transfer.StatusRequest;
import com.sequenceiq.samples.transfer.StatusResponse;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;
public class Client {
private long sessionId;
private Server server;
private AtomicLong requestId = new AtomicLong(0);
private Map<Long, StatusCallback> callbacks = new ConcurrentHashMap<>();
public Client(Server server) {
this.server = server;
this.sessionId = server.register(this);
}
public void sendStatusRequest(StatusCallback callback) {
long id = requestId.incrementAndGet();
callbacks.put(id, callback);
server.status(new StatusRequest(sessionId, id));
System.out.println("Client (" + sessionId + ") sends status request");
}
public void receive(StatusResponse status) {
long id = status.getRequestId();
callbacks.get(id).process(status);
callbacks.remove(id);
}
}