All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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