Class: TypeHelper

TypeHelper

new TypeHelper()

This is a helper class that is used to register custom message types.
Source:

Methods

(static) helper(messageType, newHelperopt) → {object}

This method provides a helper for parsing messages of different types. If a helper was provided by a user, registers it for future use.
Parameters:
Name Type Attributes Description
messageType String The type of message to handle.
newHelper object <optional>
a helper object with predefined functions that can be provided for custom parsing/handling of a message type.
Source:
Returns:
The helper object assigned/registered.
Type
object
Examples

Create a custom helper for XML messages

var xmlTypeHelper = {
    serialize: function(data) {
        return [new XMLSerializer().serializeToString(data)];
    },
    deserialize: function(data) {
        if (data.constructor === String) {
            return new DOMParser().parseFromString(data);
        } else {
            // Binary buffer, need to decode utf8
            return new DOMParser().parseFromString(decodeURIComponent(escape(Uint8ToString(data))));
        }
    }
};

// Register the above XML custom helper for parsing all XML messages automatically
amps.TypeHelper.helper('xml', xmlTypeHelper);

Register the json-json-json-binary composite message type with the type helper.

amps.TypeHelper.helper('compositejjjbl', amps.TypeHelper.compositeHelper('json', 'json', 'json', 'binary'));

Register the custom helper for NVFIX format:

var nvfixTypeHelper = {
    serialize: function(data) {
        // serialzing an array of tuples into a string with the NVFIX delimiter
        // [[1, 5], [2, 600], [10, 427]] => '1=5\x012=600\x0110=427'
        return [data.map(function(tuple) { return tuple[0] + '=' + tuple[1]; }).join('\\x01')];
    },
    deserialize: function(data) {
        // Deserializing: "foo=bar\x01bar=foo\x01" => [['foo', 'bar'], ['bar', 'foo']]
        var parseMessage = function(message) {
            message = message.split('\x01');
            message.pop() // drop the empty tail after split

            // convert the message into a list of tuples
            return message.map(function(item) { return item.split('='); });
        };

        // Alternatively, a message can be converted into an object (dictionary/map)
        // 'foo=bar\x01bar=foo\x01' => {foo: 'bar', bar: 'foo'}
        var parseMessageAsMap = function(message) {
            message = message.split('\x01');
            message.pop() // drop the empty tail after split

            // convert the message into a list of tuples
            var messageObject = {};
            message.map(function(item) {
                var items = item.split('=');
                messageObject[items[0]] = items[1];
            });

            return messageObject;
        };

        if (data.constructor === String) {
            return parseMessage(data);
        } else {
            // Binary buffer, need to decode utf8
            return parseMessage(decodeURIComponent(escape(Uint8ToString(data))));
        }
    }
};

// Register the above NVFIX custom helper for parsing all NVFIX messages automatically
amps.TypeHelper.helper('nvfix', nvfixTypeHelper);