
games.mythical.ivi.sdk.client.observer.IVIItemObserver Maven / Gradle / Ivy
package games.mythical.ivi.sdk.client.observer;
import games.mythical.ivi.sdk.client.executor.IVIItemExecutor;
import games.mythical.ivi.sdk.config.IVIConfiguration;
import games.mythical.ivi.sdk.proto.common.item.ItemState;
import games.mythical.ivi.sdk.proto.streams.item.ItemStatusConfirmRequest;
import games.mythical.ivi.sdk.proto.streams.item.ItemStatusUpdate;
import games.mythical.ivi.sdk.proto.streams.item.ItemStreamGrpc;
import lombok.extern.slf4j.Slf4j;
import java.util.function.Consumer;
@Slf4j
public class IVIItemObserver extends AbstractObserver {
private final IVIItemExecutor IVIItemExecutor;
private final ItemStreamGrpc.ItemStreamBlockingStub streamBlockingStub;
private final Consumer resubscribe;
public IVIItemObserver(IVIItemExecutor IVIItemExecutor,
ItemStreamGrpc.ItemStreamBlockingStub streamBlockingStub,
Consumer resubscribe) {
this.IVIItemExecutor = IVIItemExecutor;
this.streamBlockingStub = streamBlockingStub;
this.resubscribe = resubscribe;
}
@Override
public void onNext(ItemStatusUpdate message) {
log.trace("ItemObserver.onNext for item: {}", message.getGameInventoryId());
resetConnectionRetry();
try {
IVIItemExecutor.updateItem(message.getGameInventoryId(),
message.getGameItemTypeId(),
message.getPlayerId(),
message.getDgoodsId(),
message.getSerialNumber(),
message.getMetadataUri(),
message.getTrackingId(),
message.getItemState());
updateItemConfirmation(message.getGameInventoryId(), message.getTrackingId(), message.getItemState());
} catch (Exception e) {
log.error("Exception calling updateItem for {}. {}", message.getGameInventoryId(), e);
}
}
@Override
public void onError(Throwable t) {
log.error("ItemObserver.onError", t);
sleepBetweenReconnects();
resubscribe.accept(this);
}
@Override
public void onCompleted() {
log.info("ItemObserver stream closed");
sleepBetweenReconnects();
resubscribe.accept(this);
}
@SuppressWarnings("ResultOfMethodCallIgnored")
private void updateItemConfirmation(String gameInventoryId, String trackingId, ItemState itemState) {
var request = ItemStatusConfirmRequest.newBuilder()
.setEnvironmentId(IVIConfiguration.getEnvironmentId())
.setGameInventoryId(gameInventoryId)
.setTrackingId(trackingId)
.setItemState(itemState)
.build();
streamBlockingStub.itemStatusConfirmation(request);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy