Automatic Refreshing and the Watcher Classes
The Watcher class is used to connect a control to a database table or tables so that
whenever that database changes, the control automatically refreshes. This can save you from having to
setup callbacks between edit forms and dialogs in order to refresh a control that is viewing data. In
addition,
in a multi-user environment, when one user changes the data, the other user will automatically see the
change. This is similar to what you might see in a system like NodeJS, with some caveats
The current implementation requires the browser to generate either an Ajax event or Server event in order to
detect the change. In a multi-user environment, it the user is actively using your application, this should
happen pretty often. However, if your application is such that the user might have long-periods of
inactivity, but still should see the results of activity from other users, you can do a couple of things:
-
Set up a JsTimer to generate periodic events. See the JsTimer
example page for help. In that
example page, it discusses adding actions to the timer. For purposes of generating opportunities for
the Watcher to look at the database, you will add a null ajax action to the timer.
-
The other option, which is currently not implemented in QCubed, is create a direct connection between
the
server and the user's browser that will trigger these events. There are a few different technologies to
do this,
and many require a customized html server. Apache will not do this out of the box. A messaging server
like PubNub may be
the best candidate for this.
To make a watcher work, you must edit
the /project/qcubed/Watcher/Watcher.php file so that the Watcher class inherits from
the watcher type you want. Available types currently let you use a database to track changes, or
use a CacheProvider subclass.
This is another Datagrid example with a couple of fields to add a new person.
Whenever you add a person, the person will appear in the datagrid immediately.
It also has a timer to generate periodic events that will check whether another user has changed the
database.
Try opening the page in another browser on your computer to simulate a multi-user environment.
Whenever you add data to one browser, it will appear in the other browser.