fst – Rev 1

Subversion Repositories:
Rev:
var SyncMessage = function (peer, action, jail, protocol, port, ip) {
    // Check if all parameters are defined.
    if (!Array.from(arguments).every(isDefined))
        throw 'Argument exception'

    // Public
    this.peer = peer
    this.action = action
    this.jail = jail
    this.protocol = protocol
    this.port = port
    this.ip = ip

    // Flatten the object to an array.
    this.toArray = function () {
        // Flatten the payload to an array.
        var clone = JSON.parse(JSON.stringify(this))
        return Object.keys(clone).map(function (item) {
            return clone[item]
        })
    }

    // Helper function to check if parameter is defined.
    function isDefined(param) {
        return param !== null && param !== undefined
    }
}

// Deserialize a SyncMessage from JSON.
SyncMessage.fromJSON = function (data) {
    const payload = JSON.parse(data)

    if (payload === null || typeof payload === undefined)
        throw 'Deserialization failed'

    for (var key in new SyncMessage()) {
        if (typeof SyncMessage[key] !== 'undefined' && !payload.hasOwnProperty(key)) {
            throw 'Deserialization failed'
        }
    }

    var syncMessage

    try {
        syncMessage = new SyncMessage(
            payload.peer,
            payload.action,
            payload.jail,
            payload.protocol,
            payload.port,
            payload.ip
        )
    } catch (error) {
        throw error
    }

    return syncMessage
}

module.exports = SyncMessage