xbmc-event-client v0.0.2
Node.JS XBMCEventClient
XBMC EventServer API Client using UDP sockets
Usage
Simple
var XBMCEventClient = require('xbmc-event-client').XBMCEventClient;
var xbmc = new XBMCEventClient('node.js app');
xbmc.connect(function(errors, bytes) {
if (errors.length)
throw errors[0];
xbmc.notification('Title', 'Hello from node!');
xbmc.keyPress('enter');
xbmc.log('this will show up in xbmc.log');
setTimeout(function() {
xbmc.close();
}, 1000);
});Advanced
var fs = require('fs');
var path = require('path');
var xec = require('xbmc-event-client');
var opts = {
log: true,
icontype: xec.ICON_PNG,
iconbuffer: fs.readFileSync('./node.png'),
host: '192.168.1.50',
port: 9777
};
var xbmc = new xec.XBMCEventClient(name, opts);
xbmc.connect(function(errors, bytes) {
if (errors.length)
throw errors[0];
xbmc.notification(title, message, function(errors, bytes) {
if (errors.length)
throw errors[0];
xbmc.close();
});
});API
Use the high-level XBMCEventClient API for easy XBMC communication
new XBMCEventClient(name, opts={})
Create a new XBMCEventClient object.
name: used to identify the client to XBMC, sent in theHELOpacketoptsoptionalopts.host: XBMC host to connect to, defaults tolocalhostopts.port: XBMC port to connect to, defaults to9777opts.log: log sent packet notifications to stderr, defaults tofalseopts.iconbuffer: optional buffer of icon data to send for notificationssopts.icontype: optional icon type ifopts.iconbufferis supplied, see constants.js for possible values
All functions below take a callback function as their last argument. The callback will be fired when all UDP packets have been sent to the server, and will be passed 2 arguments.
function(errors, bytes) {}The firest argument is an array of new Error objects (if any errors happened),
and the second is an array of the bytes sent to the server. Checking the length
of errors is sufficient for determining if an error occurred when sending the
packet(s).
xbmc.connect(cb=function() {})
Connect to XBMC by sending a HELO packet
cb: optional callback function to fire when all packets are sent
xbmc.ping(cb=function() {})
Keep the "connection" alive by sending a PING packet.
Note that a conncection is considered idle after 60 seconds
of inactivity, so consider adding an interval to continually ping
the server.
setInterval(xbmc.ping.bind(xbmc), 55 * 1000);cb: optional callback function to fire when all packets are sent
xbmc.log(message, loglevel=xec.LOGDEBUG, cb=function() {})
Log a message on XBMC to xbmc.log
message: the message to log on the serverloglevel: optional the log level to use, see constants.js for possible valuescb: optional callback function to fire when all packets are sent
xbmc.notification(title, message, icontype=undefined, iconbuffer=undefined, cb=function() {})
Send an OSD notification to XBMC
title: title of the notificationmessage: message in the notificationicontype: optional icon type ificonbufferis supplied, see constants.js for possible valuesiconbuffer: optional buffer of icon data to send for notificationsscb: optional callback function to fire when all packets are sent
If icontype and iconbuffer were given in the constructor, they will be used
automatically for this function.
xbmc.mouse(x, y, cb=function() {})
Set the mouse position to the given X and Y positions
x: mouse X position, 0 <=x<= 65535y: mouse Y position, 0 <=y<= 65535cb: optional callback function to fire when all packets are sent
xbmc.keyPress(name, cb=function() {})
Trigger a single key press event using the keyboard keymap
name: keyname name, likeenter,up,escape, etc.cb: optional callback function to fire when all packets are sent
xbmc.keyDown(name, cb=function() {})
Set the state of a key to down
name: keyname name, likeenter,up,escape, etc.cb: optional callback function to fire when all packets are sent
xbmc.keyUp(name, cb=function() {})
Set the state of a key to up
name: keyname name, likeenter,up,escape, etc.cb: optional callback function to fire when all packets are sent
xbmc.remotePress(name, cb=function() {})
Trigger a single remote press event using the remote keymap
name: keyname name, likeplay,menu,left, etc.cb: optional callback function to fire when all packets are sent
xbmc.remoteDown(name, cb=function() {})
Set the state of a remote key to down
name: keyname name, likeplay,menu,left, etc.cb: optional callback function to fire when all packets are sent
xbmc.remoteUp(name, cb=function() {})
Set the state of a remote key to up
name: keyname name, likeplay,menu,left, etc.cb: optional callback function to fire when all packets are sent
xbmc.buttonPress(map, button, cb=function() {})
Trigger a single press event for the button found in keymap map
map: keymap filebutton: button namecb: optional callback function to fire when all packets are sent
xbmc.buttonDown(map, button, cb=function() {})
Set the state for the button found in keymap map to down
map: keymap filebutton: button namecb: optional callback function to fire when all packets are sent
xbmc.buttonUp(map, button, cb=function() {})
Set the state for the button found in keymap map to up
map: keymap filebutton: button namecb: optional callback function to fire when all packets are sent
xbmc.releaseAll(cb=function() {})
Release all buttons pressed (set the state of all buttons to up)
cb: optional callback function to fire when all packets are sent
xbmc.buttonState(state, cb=function() {})
Set button state
state:state.map: string keymap to use, defaults toundefinedstate.button: string button name ifstate.mapis set, defaults toundefinedstate.code: int button code, defaults toundefinedstate.down: boolean the button is pushed down, defaults totruestate.queue: boolean queue is specified, defaults tofalsestate.repeat: boolean the button should repeat, defaults totruestate.amount: int amount button is pushed, 0 <=amount<= 65535, defaults toundefinedstate.axis: int number of axis, defaults to0
cb: optional callback function to fire when all packets are sent
xbmc.disconnect(cb=function() {})
Send a BYE packet to the server and close the underlying UDP socket
cb: optional callback function to fire when all packets are sent
xbmc.send(packet, cb=function() {})
Internal function used for sending a new Packet() object to XBMC
cb: optional callback function to fire when all packets are sent
Low Level API
Also exposed in this module is the generic Packet class, as well as
the specific subclasses like PacketHELO, PacketBUTTON, PacketPING, etc.
classes.
For more information on these classes and how to use them see the lib/ directory
Installation
npm install xbmc-event-clientTests
Run npm test to run the tests, using environmental variables to account
for your environment, ex.
$ XBMC_HOST=192.168.1.2 npm testLicense
MIT