package uk.ac.cam.echo.client;
import org.glassfish.jersey.media.sse.EventListener;
import org.glassfish.jersey.media.sse.EventSource;
import org.glassfish.jersey.media.sse.InboundEvent;
import uk.ac.cam.echo.client.data.BaseData;
import uk.ac.cam.echo.data.async.Handler;
import uk.ac.cam.echo.data.async.Subscription;
import javax.ws.rs.client.WebTarget;
public class ClientSubscription<T> implements Subscription {
private EventSource source;
ClientSubscription(ClientApi a, WebTarget target, Handler<T> h, Class<T> c) {
final Class clazz = c;
final Handler<T> handle = h;
final ClientApi api = a;
source = EventSource.target(target).build();
source.register(new EventListener() {
@Override
public void onEvent(InboundEvent inboundEvent) {
T data = (T) inboundEvent.readData(clazz);
if (data instanceof BaseData)
((BaseData) data).setApi(api);
handle.handle(data);
}
});
source.open();
}
@Override
public void unsubscribe() {
source.close();
}
}