@Override public void onStop() { loop.dispose(); M mostRecentModel = loop.getMostRecentModel(); actions.goToStateCreated(renderer, mostRecentModel); }
@Override public void onDisconnect() { renderer.dispose(); actions.goToStateInit(nextModelToStartFrom); }
@Override public void accept(F effect) { try { effectConsumer.accept(effect); } catch (Throwable t) { throw new ConnectionException(effect, t); } } };
synchronized void init() { if (initialised) { throw new IllegalStateException("already initialised"); } First<M, F> first = store.init(); dispatchModel(first.model()); dispatchEffects(first.effects()); initialised = true; for (E event : eventsReceivedBeforeInit) { update(event); } }
private MobiusLoopController<String, String, String> createWithWorkRunner( WorkRunner mainThreadRunner) { return new MobiusLoopController<>( Mobius.<String, String, String>loop( (model, event) -> Next.next(model + event), effectHandler) .eventRunner(WorkRunners::immediate) .effectRunner(WorkRunners::immediate), "init", mainThreadRunner); }
ControllerStateRunning( ControllerActions<M, E> actions, Connection<M> renderer, MobiusLoop.Factory<M, E, F> loopFactory, M modelToStartFrom) { this.actions = actions; this.renderer = renderer; this.loop = loopFactory.startFrom(modelToStartFrom); this.startModel = modelToStartFrom; }
@Override public synchronized void dispose() { disposed = true; actual.dispose(); } }
@Override public void beforeInit(M model) { for (Logger<M, E, F> logger : loggers) { logger.beforeInit(model); } }
/** * Create a {@link First} with the provided model and the supplied initial effects. * * @param model the model to initialize the loop with * @param <M> the model type * @param <F> the effect type */ public static <M, F> First<M, F> first(M model, Set<F> effects) { return new AutoValue_First<>(model, effects); } }
@Override public void accept(M model) { actions.postUpdateView(model); } });
synchronized void init() { if (initialised) { throw new IllegalStateException("already initialised"); } First<M, F> first = store.init(); dispatchModel(first.model()); dispatchEffects(first.effects()); initialised = true; for (E event : eventsReceivedBeforeInit) { update(event); } }
@Override public void onStop() { loop.dispose(); M mostRecentModel = loop.getMostRecentModel(); actions.goToStateCreated(renderer, mostRecentModel); }
@Override public void accept(F effect) { try { effectConsumer.accept(effect); } catch (Throwable t) { throw new ConnectionException(effect, t); } } };
@Override public void onDisconnect() { renderer.dispose(); actions.goToStateInit(nextModelToStartFrom); }