Registry
Functions
Here is an overview of the available Registry Functions:
readRegistryKey (keyName, callback)
– Executes the callback when the given registry key’s value is retrieved from the JNIORvalue = readRegistryKeyAsync (keyName)
– Gets the value of a registry key. Since this function is aasync
function, it will wait for the result before returning.readRegistryKeys ([keyArray], callback)
– Executes the callback when the given registry key’s values are retrieved from the JNIORregistrySubscription (key, callback)
– Executes the callback when the given registry key’s value is retrieved from the JNIOR. The callback is also executed any time there is an update to that registry key value
Read Registry Key
Reading a Registry Key is an asynchronous operation. We don’t want our page to wait for the response, even though it will be quick. So again, we need to supply a callback. Our method syntax is readRegistry(keyName, callback);
This may cause you to structure your application differently if you are waiting for one key’s value before executing another code.
Syntax
// With Callback Function
readRegistryKey (keyName, callbackFn)
// With Inline Callback
readRegistryKey (keyName, function(keyName, value){ /* ... */ })
Parameters
keyName
– string
– The name of the registry key that we want the value of
callbackFn
– function
– The function to execute when the value is returned. This can be a reference to a function or an inline anonymous function.
keyName
– string
– The name of the registry key being returned
value
– string
– The value of the registry key being returned
Return Value
None
Example
jnrWebsocket.readRegistry( '$SerialNumber', function (keyName, value) {
this.serialNumber = value;
alert('The Serial Number is: ' + this.serialNumber);
});
Read Registry Key Async
It would be easier if we could wait for the response without supplying a callback. Well, now we can for a single key request. We will call the readRegistryKeyAsync()
method. But it does involve a little more care. The use of async / await
will help us do that. The await
operator must be used in a async
method. It cannot be used in a normal method. Here is how we would do that.
Syntax
value = readRegistryKeyAsync (keyName)
Parameters
keyName
– string
– The name of the registry key that we want the value of
Return Value
value
– string
– The value of the registry key being returned. Applies to the Async version only.
Example
var getJniorInfo = async function () {
console.log('serial: ' + await jnrwebsocket.readRegistryKeyAsync('$serialnumber'));
console.log('model: ' + await jnrwebsocket.readRegistryKeyAsync('$model'));
console.log('boot time: ' + await jnrwebsocket.readRegistryKeyAsync('$boottime'));
};
jnrwebsocket.addOnLoggedInListener(getJniorInfo);
Read Registry Keys
More than likely you will need to read more than one key. Currently, we have the following code where an array of registry keys is supplied. The callback is then executed for each key and value returned.
var registryKeys = ['$serialnumber', '$model', '$boottime'];
jnrwebsocket.readRegistryKeys(registryKeys, function (key, value) {
if ('$serialnumber' == key) SerialNumber = value;
else if ('$model' == key) Model = value;
else if ('$boottime' == key) BootTime = value;
});
In this case, the callback gives you the value but you have work to do to assign or use it correctly. The real benefit comes in when thought is given to the jnior and the amount of communication that goes on. It is better to send one request and get one response. The savings go up with the number of keys requested.
Can this be handled better on the client side? I’m sure it can. But how?
What if the callback returned an object of key : value
pairs?
var registryKeys = ['$serialnumber', '$model', '$boottime'];
jnrwebsocket.readRegistryKeys(registryKeys, function (keys) {
SerialNumber = keys['$serialnumber'];
Model = keys['$model'];
BootTime = keys['$boottime'];
});
Registry Subscription
Hey, a registry key may change sometime in the future. I want to know when that happens. Do I have to keep asking to find out if this happens?
No, you don’t. You need to only subscribe to the registry key. Let JANOS and the JNIOR do the rest. JANOS will keep track of the connection that cares about the registry update and alert it accordingly.
The method declaration and use mimic that of the readRegistryKey()
method with the only change being that the callback will get called any time that the registry key changes.
Example HTML File
<html>
<head>
<script src="Integ/comm.js"></script>
<script src="Integ/md5.js"></script>
<script src="Integ/base64.js"></script>
<script src="Integ/jnrWebsocket.js"></script>
<script>
var jnrwebsocket = new JnrWebsocket();
jnrwebsocket.connect('ws://10.0.0.155');
jnrwebsocket.enableCommLogging();
jnrwebsocket.addOnLoggedInListener(function () {
/** Below is an example of using a callback function called readRegistryKey that gets
executed when the result of the registry is read from the JNIOR. The parameter for this
function is the name of the registry key you wish to read. The value returned is the
value of the registry key. This example reads the registry key $SerialNumber from the
JNIOR. */
jnrwebsocket.readRegistryKey('$SerialNumber', function (keyName, value) {
var serialNumber = value;
console.log(serialNumber);
});
/** Below is an example of using a callback function called readRegistryKeys that gets
executed when the result of mulitple registry keys are read from the JNIOR. The parameter
for this function is and array of registry keys you wish to read. The values returned are
the values of the registry keys. This example reads the registry keys $SerialNumber,
$Model, and $BootTime from the JNIOR. */
var registryKeys = ['$SerialNumber', '$Model', '$BootTime'];
jnrwebsocket.readRegistryKeys(registryKeys, function (keys) {
console.log(keys['$serialnumber']);
console.log(keys['$model']);
console.log(keys['$boottime']);
});
/** Below is an example of using a Async function called readRegistryKeyAsync that blocks
and waits to execute until the result of mulitple registry keys are read from the JNIOR.
The parameter for this function is and array of registry keys you wish to read. The values
returned are the values of the registry keys. This example reads the registry keys
$SerialNumber, $Model, and $BootTime from the JNIOR. */
(async function () {
console.log('serial: ' + await jnrwebsocket.readRegistryKeyAsync('$SerialNumber'));
console.log('model: ' + await jnrwebsocket.readRegistryKeyAsync('$Model'));
console.log('boot time: ' + await jnrwebsocket.readRegistryKeyAsync('$BootTime'));
});
});
</script>
</head>
</html>