Notice: This page contains information for the legacy Phidget21 Library. Phidget21 is out of support. Bugfixes may be considered on a case by case basis. Phidget21 does not support VINT Phidgets, or new USB Phidgets released after 2020. We maintain a selection of legacy devices for sale that are supported in Phidget21. We recommend that new projects be developed against the Phidget22 Library.
|
Phidget Dictionary
General Overview
The Phidget Dictionary is a service provided by the Phidget WebService. It allows you to store program data centrally - in the form of key-value pairs - on the same server as your Phidgets.
A Dictionary is like any other Phidget software object: You create and open it (though you don't have to wait for attachment or attach it in any way). You can subscribe to data change events, and get updates on these events from multiple devices. And when you're done, you simply close and delete it. Just like any other Phidget software object over the network, you run the functional code on your client, and the server simply runs the Phidget WebService, which includes the Phidget Dictionary.
This works because the WebService already maintains a centralized dictionary of key-value pairs - this is what runs the WebService itself. We expose this data storage to you, the user, so that it can be customized and can be accessed and changed from any number of clients.
Since the Dictionary is a popular feature on our Phidget Single Board Computer (SBC), we will use that as an example. You may have already seen this image of how the WebService works using the Phidget SBC from the Phidget WebService page:
Now that we know about the Phidget Dictionary, if we were to expand the WebService out into its components, it would look like this:
The 'Internal' Dictionary is really just the internal workings of the Phidget Webservice itself. This shares the key-value pair database with the user Dictionary. In fact, when using a dictionary object, if you catch all key events you will see ones that are produced by Phidgets! You should never modify these keys - i.e. ones that start with /PSK/ or /PCK/ - unless you want to explicitly modify Phidget-specific data. This is highly discouraged, as it’s very easy to break things; however, listening to these keys is fine if so desired.
The 'User' Dictionary is the typical functionality of the Phidget Dictionary object that you can create and use in your code. Although both the Phidget Dictionary and the Webservice use the same data repository (because they are, as described in the previous paragraph, actually the same thing), you usually won't be concerned with Phidget data and will instead be creating and storing your own data to run your program with state.
With the two-computer example above, you may be wondering: Why go to all the trouble of using the Dictionary? Why not just save state within your client program?
The answer becomes obvious when you have more than one client computer. This is one of the powerful aspects of the Phidget Webservice; that is, more than one computer can control Phidgets by making your system networked. In this case, having a centralized store of data that all clients can 'subscribe' to in order to act when it changes is a very powerful tool:
The intended use for the dictionary is as a central repository for communication and persistent storage of data between several client applications. For example, it can be used as a higher level interface exposed by one application that controls the Phidgets for others to access, rather then every client talking directly to the Phidgets themselves.
Using The Dictionary
To use the Dictionary, you would create a Dictionary object within your code, just like you would any other Phidget software object. We describe - in a general manner - how to create software objects on the General Phidget Programming page, and even more information can be found specific to your language on the page for your language. To "listen" to changes of the value associated with a key, the Dictionary has a KeyValueChanged()
(or similar) event function. The dictionary makes use of extended regular expressions for key matching to execute code for specific keys.