Source: client.js

var xmlrpc = require('xmlrpc')
var http = require('http')
var net = require('net');
var parseString = require('xml2js').parseString;
var util = require('util');
var chalk = require('chalk');

var headers = {
    'content-type': "text/xml",
    'date': "Mon, 17 Jul 1998 19:55:08 GMT",
    'user-agent': "Node RRCS Module"
}

/**
 * standardCallback
 *
 * @callback
 * @param  {Obj} error - error returned from RRCS
 * @param  {Obj} value - valid response returned from RRCS
 * @return {Obj} status - {status, value}
 */
function standardCallback(error, value) {
  if (error !== null) {
    console.log('Error:')
    console.log(error)
    var r = {
      "status": "error",
      "value": error
    }
    return r
  } else {
    console.log('Value:')
    console.log(value)
    var r = {
      "status": "success",
      "value": value
    }
    return r
  }
}

/**
 * Perform a setXp command
 *
 * @public
 * @param  {Obj} host - {ip, port}
 * @param  {Obj} src - {net, node, portId}
 * @param  {Obj} dest - {net, node, portId}
 * @return {Obj} status - {status, value}
 */
 var setXp = function(host, src, dest) {
    var client = xmlrpc.createClient({ host: host.ip, port: host.port, headers: headers})

    client.methodCall(
      'setXp',
      ['C0123456789', src.net, src.node, src.portId, dest.net, dest.node, dest.portId],
      function(error, value) {
        standardCallback(error, value);
      })
 }

  /**
   * Perform a killXp command
   *
   * @param  {Obj} host - {ip, port}
   * @param  {Obj} src - {net, node, portId}
   * @param  {Obj} dest - {net, node, portId}
   * @return {Obj} status - {status, value}
   */
  var killXp = function(host, src, dest) {
    var client = xmlrpc.createClient({ host: host.ip, port: host.port, headers: headers})

    client.methodCall(
      'killXp',
      ['C0123456789', src.net, src.node, src.portId, dest.net, dest.node, dest.portId],
      function(error, value) {
        standardCallback(error, value);
      })
  }

  /**
   * Perform a RegisterForAllEvents command
   *
   * @param  {Obj} host - {ip, port}
   * @param  {int} tcp - TCP Port for receiving events
   * @param  {string} url - URL of receiving xml-rpc server
   * @return {Obj} status - {status, value}
   */
  var registerForAllEvents = function(host, tcp, url) {
    var client = xmlrpc.createClient({ host: host.ip, port: host.port, headers: headers})

    client.methodCall(
      'RegisterForAllEvents',
      ['C0123456789', tcp, url, true, false],
      function(error, value) {
        standardCallback(error, value);
      })
  }

  /**
   * Perform an unRegisterForAllEvents command
   *
   * @param  {Obj} host - {ip, port}
   * @param  {int} tcp - TCP Port for receiving events
   * @param  {string} url - URL of receiving xml-rpc server
   * @return {Obj} status - {status, value}
   */
  var unregisterForAllEvents = function(host, tcp, url) {
    var client = xmlrpc.createClient({ host: host.ip, port: host.port, headers: headers})

    client.methodCall(
      'UnregisterForAllEvents',
      ['C0123456789', tcp, url],
      function(error, value) {
        standardCallback(error, value);
      })
  }

  /**
   * Perform an changePanelSpyRegistry command
   *
   * @param  {Obj} host - {ip, port}
   * @param  {int} tcp - TCP Port for receiving events
   * @param  {string} url - URL of receiving xml-rpc server
   * @param  {Obj} src - {node, port}
   * @param  {Obj} events - {rotate, key, func, numKey}
   * @return {Obj} status - {status, value}
   */
  var changePanelSpyRegistry = function(host, tcp, url, src, events) {
    var client = xmlrpc.createClient({ host: host.ip, port: host.port, headers: headers})

    client.methodCall(
      'ChangePanelSpyRegistry',
      ['C0123456789', tcp, url, src.node, src.portId, {
        "RotateEventsOn": events.rotate,
        "KeyEventsOn": events.key,
        "FuncKeyEventsOn": events.func,
        "NumKeyEventsOn": events.numKey
      }],
      function(error, value) {
        standardCallback(error, value);
      })
  }

/** @module client */
module.exports = {
  /** setXp method */
   setXp: setXp,
   /** killXp method */
   killXp: killXp,
   /** registerForAllEvents method */
   registerForAllEvents: registerForAllEvents,
   /** unregisterForAllEvents method */
   unregisterForAllEvents: unregisterForAllEvents,
   /** changePanelSpyRegistry method */
   changePanelSpyRegistry: changePanelSpyRegistry
 };