Make Data Persist in Liberator
When a StreamLink application publishes data to Liberator, the data does not normally persist within Liberator if the connection to the Liberator is lost. You can use the persistent
configuration attribute to ensure that the data does persist across reconnections. When persistent
is set to true, if the application reconnects to the Liberator (or to a different Liberator, depending on the failover configuration), StreamLink automatically resends the data. Let’s look at an example of this in action:
1. Change end-user mode
Let’s say that the Liberator has an object /MyMode
representing a mode that the end-user is in, and the default mode of this object is "A". When StreamLink logs an end-user in to Liberator, the mode starts off as "A". To change the end-user to mode "B", send the following publish command:
myCommandListener = new MyCommandListener();
fields = {"mode": "B"};
streamLink.publishToSubject("/MyMode", fields, myCommandListener);
2. Specify persistent configuration
If the end-user is disconnected from the Liberator, the user session is lost. With the coding in the previous step, when StreamLink reconnects, the end-user’s mode will have defaulted back to mode "A". If you want the mode to be automatically set to "B" again when StreamLink reconnects, specify the persistent configuration attribute as true:
myCommandListener = new MyCommandListener();
fields = {"mode": "B"};
myCommandParameters = {"persistent": true}
streamLink.publishToSubject("/MyMode",
fields,
myCommandListener,
myCommandParameters);
This code ensures that the object /MyMode
with field "mode=B" is reliably sent to the Liberator whenever a reconnect occurs.
3. Remove persistent configuration
Let’s say that you subsequently no longer want the /MyMode
state to persist in mode "B", simply remove the persistence, as follows:
myCommandListener = new MyCommandListener();
fields = {"mode": "B"};
myCommandParameters = {"persistent": true}
myCommandSubscription = streamLink.publishToSubject("/MyMode",
fields,
myCommandListener,
myCommandParameters);
...
/* Some time later, myMode no longer needs to be persisted...*/
myCommandSubscription.unPersist();
Note that after the call to unPersist()
, /MyMode
remains in mode "B" until such time as StreamLink reconnects to the Liberator.