Phidget Dictionary: Difference between revisions

From Phidgets Support
No edit summary
 
(9 intermediate revisions by 3 users not shown)
Line 2: Line 2:
==General Overview==
==General Overview==


Dictionary is Phidget channel class that exports a key-value pair database. Dictionaries are create and made accessible by the [[Phidget Network Server]].  A Dictionary channel is created and opened like any other Phidget channel.  Matching is done using either the serial number or the label assigned to the dictionary.
[[Image:Dictionary-networkserver.jpg|600px|link=|alt=]]


The backing pseudo-device that exports the Dictionary device channel is maintained by the [[Phidget Network Server]], and is created when the server starts.  When the server exits, the pseudo-device is deleted, and any changes to dictionaries are lost.
The Dictionary is a Phidget channel class that exports a key-value pair database.  Dictionaries are created and made accessible by the [[Phidget Network Server]].  A Dictionary channel is created and opened like any other Phidget channel.  Matching is done using either the serial number or the label assigned to the dictionary.
 
The backing pseudo-device that exports the Dictionary device channel is maintained by the [[Phidget Network Server]], and is created when the server starts.  When the server exits, the pseudo-device is deleted, and any changes made to a dictionary are lost.


The basic functionality of a Dictionary is to maintain configuration information in a central location.  Multiple clients can attach to the same dictionary, and set handlers for ''add'', ''update'' and ''delete'' events, making the dictionary useful for monitoring and communicating state.
The basic functionality of a Dictionary is to maintain configuration information in a central location.  Multiple clients can attach to the same dictionary, and set handlers for ''add'', ''update'' and ''delete'' events, making the dictionary useful for monitoring and communicating state.
==Creating a Dictionary==
Dictionaries are managed by the [[Phidget Network Server]].  To create a dictionary, go to the [[Phidget Control Panel]] and click on the '''Network Server''' tab.  There are options to create and manage dictionaries.  The server must be enabled for clients to access dictionaries.
On Linux, refer to the README for information on how to enable the dictionary feature in the [[Phidget Network Server]], and for the syntax of dictionary configuration files.


==Using The Dictionary==
==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. To "listen" to changes of the value associated with a key, the Dictionary has a {{Code|onAdd()}}, {{Code|onRemove()}}, and {{Code|onUpdate()}} event functions (exact name dependant on programming language used). You can write code in these event handlers to react differently depending on which pair is being changed.
To access a dictionary, create a channel, set the serial number or the label, and open the channel.
 
To "listen" for changes to the Dictionary, {{Code|onAdd()}}, {{Code|onRemove()}}, and {{Code|onUpdate()}} event handlers can be set. Refer to the {{Phidget22API}} to see the methods supported by Dictionary.  
Go into the [[Phidget Control Panel]] and click on the '''Network Server'' tab and ensure the server is started.  


Here's an example of how you might use the dictionary in a C program:
Here's an example of how you might use the dictionary in a C program:


<div class="source">
<div class="source">
<syntaxhighlight lang=c>
<syntaxhighlight lang=c>


// Declare the dictionary handle
PhidgetDictionaryHandle dict;
PhidgetDictionaryHandle dict;
char val[32];


// Create the new dictionary object using the handle
PhidgetDictionary_create(&dict);
PhidgetDictionary_create(&dict);
PhidgetDictionary_addDictionary(5000,"myDictionary"); //set a serial number and label for the dictionary


// Open connection to the dictionary using the serial number
// Open connection to the dictionary using the serial number
Line 32: Line 34:
Phidget_open(dict);
Phidget_open(dict);


// Add a key-value pair to the dictionary
PhidgetDictionary_add(dict, "my_key", "my_value"); // add a key that does not already exist
char *key1 = "001";
PhidgetDictionary_get(dict, "my_key", val, sizeof (val)); // get the value back
char *val1 = "first";
printf("Value: %s\n",newValue);
PhidgetDictionary_add(dict,key1,val1);  
 
// Access and print a value from the dictionary based on a given key
char newValue[20];
PhidgetDictionary_get(dict, key1, &newValue,20); // '20' refers to the length of the buffer used to store the result
printf("Value: %s",newValue);


// Remove a pair from the dictionary based on a given key
PhidgetDictionary_remove(dict, "my_key"); // remove the key
PhidgetDictionary_remove(dict, key1);


// Close and clean up the dictionary object
Phidget_close(dict);
Phidget_close(dict);
PhidgetDictionary_delete(&dict);
PhidgetDictionary_delete(&dict);
Line 52: Line 46:
</div>
</div>


==Notes==


Have a look at the {{Phidget22API}} documentation to learn how to use these methods in the language of your choice. Select your preferred language from the first drop-down box, and select '''Dictionary API''' from the second box.
A common mistake is to assume an event will be delivered to the channel that triggered the event. This is not the case.  For example, when a channel adds a key, that channel's add event handler is not called.
 
When you create a dictionary in your code, the [[Phidget Control Panel]] will also be able to see it if you have remote Phidgets enabled in the options. Here's what it will look like:
 
[[File:dictionary-panel.jpg|link=|420px|left]]
[[File:dictionary-example.jpg|420px|link=]]
<br clear="all">


On the left, you can see that dictionaries appear just like attached and remote Phidget devices do. On the right, you can see the contents of the dictionary after double-clicking on it. You can add and remove tags from here as well.
It is an error to {{Code|Add()}} a key that already exists in the dictionary. {{Code|Set()}} should be used to update existing keys, creating the key if it does not already exist.


Interestingly, you don't even need a Phidget to use the Dictionary! You can use our libraries and the [[Phidget Network Server]] without any Phidgets. Usually, there's not much to broadcast on the Network Server without a Phidget, but the Dictionary is the exception. With it, you'll have access to centralized key-value pair database management, pre-written, that can work across many computers on a local network.
There is no way to directly list all of the keys in a dictionary. The {{Code|Scan()}} method allows code to access the existing keys, but only returns the number of keys that can be held in a limited sized buffer.  This interface was chosen as the dictionary could contain more keys than could reasonably be returned in a single network request.

Latest revision as of 17:53, 6 March 2019

General Overview

The Dictionary is a Phidget channel class that exports a key-value pair database. Dictionaries are created and made accessible by the Phidget Network Server. A Dictionary channel is created and opened like any other Phidget channel. Matching is done using either the serial number or the label assigned to the dictionary.

The backing pseudo-device that exports the Dictionary device channel is maintained by the Phidget Network Server, and is created when the server starts. When the server exits, the pseudo-device is deleted, and any changes made to a dictionary are lost.

The basic functionality of a Dictionary is to maintain configuration information in a central location. Multiple clients can attach to the same dictionary, and set handlers for add, update and delete events, making the dictionary useful for monitoring and communicating state.

Creating a Dictionary

Dictionaries are managed by the Phidget Network Server. To create a dictionary, go to the Phidget Control Panel and click on the Network Server tab. There are options to create and manage dictionaries. The server must be enabled for clients to access dictionaries.

On Linux, refer to the README for information on how to enable the dictionary feature in the Phidget Network Server, and for the syntax of dictionary configuration files.

Using The Dictionary

To access a dictionary, create a channel, set the serial number or the label, and open the channel. To "listen" for changes to the Dictionary, onAdd(), onRemove(), and onUpdate() event handlers can be set. Refer to the Phidget22 API to see the methods supported by Dictionary.

Here's an example of how you might use the dictionary in a C program:

PhidgetDictionaryHandle dict;
char val[32];

PhidgetDictionary_create(&dict);

// Open connection to the dictionary using the serial number
Phidget_setDeviceSerialNumber(dict, 5000);
Phidget_open(dict);

PhidgetDictionary_add(dict, "my_key", "my_value"); // add a key that does not already exist 
PhidgetDictionary_get(dict, "my_key", val, sizeof (val)); // get the value back
printf("Value: %s\n",newValue);

PhidgetDictionary_remove(dict, "my_key"); // remove the key

Phidget_close(dict);
PhidgetDictionary_delete(&dict);

Notes

A common mistake is to assume an event will be delivered to the channel that triggered the event. This is not the case. For example, when a channel adds a key, that channel's add event handler is not called.

It is an error to Add() a key that already exists in the dictionary. Set() should be used to update existing keys, creating the key if it does not already exist.

There is no way to directly list all of the keys in a dictionary. The Scan() method allows code to access the existing keys, but only returns the number of keys that can be held in a limited sized buffer. This interface was chosen as the dictionary could contain more keys than could reasonably be returned in a single network request.