Interface StateRelay

All Known Implementing Classes:
RestStateRelay

public interface StateRelay

Carries state between devices the platform will not carry it between -- an iPhone and an Android tablet, two devices that are never in the same room, a phone and the web build.

Codename One ships no server for this. A relay is the application's own endpoint, which is also the only honest arrangement: the relay has to know which states belong to the same person, and that is the app's account system, not the framework's. RestStateRelay covers the common case over HTTPS; implement this interface directly for anything else.

Both methods are called from a background thread and may block. Neither is called on the event dispatch thread, so ordinary blocking com.codename1.io code is correct here.

  • Method Summary

    Modifier and Type
    Method
    Description
    Asks for the newest state this user has on any device.
    void
    Sends a state.
  • Method Details

    • publish

      void publish(AppState state) throws IOException

      Sends a state. Called after each checkpoint, so implementations that talk to a slow endpoint should coalesce rather than send every one.

      Parameters
      • state: the state to send
      Throws
      • java.io.IOException: when the send failed. The framework logs it and keeps the state, which the next checkpoint's publisher sends -- unless a newer state has superseded it by then, or the user signed out in between. It is not retried on a timer: one attempt per change beats spinning against an endpoint that is down.
      Throws:
      IOException
    • fetch

      AppState fetch() throws IOException

      Asks for the newest state this user has on any device. Returning this device's own most recent state is fine and expected -- the framework recognizes its own echo by device id and sequence, and ignores it.

      Returns

      the state, or null when the endpoint has nothing

      Throws
      • java.io.IOException: when the fetch failed
      Throws:
      IOException