hyperdeck-js-lib
Advanced tools
Comparing version 1.1.3 to 1.1.4
{ | ||
"name": "hyperdeck-js-lib", | ||
"version": "1.1.3", | ||
"version": "1.1.4", | ||
"description": "A javascript library for communication with the Blackmagic Hyperdeck.", | ||
"main": "src/index.js", | ||
"dependencies": { | ||
"js-logger": "^1.2.0", | ||
"promise": "^7.1.1" | ||
@@ -8,0 +9,0 @@ }, |
@@ -0,1 +1,3 @@ | ||
[![NPM](https://nodei.co/npm-dl/hyperdeck-js-lib.png?months=1)](https://nodei.co/npm/hyperdeck-js-lib/) | ||
[![Build Status](https://travis-ci.org/LA1TV/Hyperdeck-JS-Lib.svg?branch=master)](https://travis-ci.org/LA1TV/Hyperdeck-JS-Lib) | ||
@@ -69,4 +71,16 @@ [![npm version](https://badge.fury.io/js/hyperdeck-js-lib.svg)](https://badge.fury.io/js/hyperdeck-js-lib) | ||
# API Documentation | ||
The hyperdeck API documentation can be found at "https://www.blackmagicdesign.com/uk/manuals/HyperDeck/HyperDeck_Manual.pdf". | ||
# Debugging | ||
You can enable logging: | ||
```javascript | ||
var HyperdeckLib = require("hyperdeck-js-lib"); | ||
var Logger = HyperdeckLib.Logger; | ||
Logger.setLevel(Logger.DEBUG); | ||
Logger.setLevel(Logger.INFO); | ||
Logger.setLevel(Logger.WARN); | ||
Logger.setLevel(Logger.ERROR); | ||
Logger.setLevel(Logger.OFF); | ||
``` |
@@ -6,3 +6,6 @@ /*jshint latedef: false */ | ||
var events = require('events'); | ||
var Logger = require("../logger"); | ||
var logger = Logger.get("hyperdeck.HyperdeckCore"); | ||
/** | ||
@@ -86,2 +89,13 @@ * Represents a Hyperdeck. | ||
function isValidRequest(request) { | ||
// requests must not contain new lines | ||
return request.indexOf("\r") === -1 && request.indexOf("\n") === -1; | ||
} | ||
// write to the socket | ||
function write(data) { | ||
logger.debug("Writing to socket.", data); | ||
client.write(data); | ||
} | ||
function ping() { | ||
@@ -128,3 +142,3 @@ self.makeRequest("ping"); | ||
function handleResponse(response) { | ||
//console.log("Got response. Resolving provided promise with response."); | ||
logger.debug("Got response. Resolving provided promise with response."); | ||
removeListeners(); | ||
@@ -150,3 +164,3 @@ if (response.success) { | ||
function onConnectionLost() { | ||
//console.log("Connection lost. Rejecting provided promise to signify failure."); | ||
logger.debug("Connection lost. Rejecting provided promise to signify failure."); | ||
removeListeners(); | ||
@@ -161,3 +175,3 @@ // null to signify connection loss | ||
// don't even attempt the request | ||
//console.log("Not attempting request because connection lost."); | ||
logger.debug("Not attempting request because connection lost."); | ||
onConnectionLost(); | ||
@@ -170,4 +184,4 @@ } | ||
// fired at some point in the future. | ||
//console.log("Making request: "+request); | ||
client.write(request+"\n"); | ||
logger.info("Making request.", request); | ||
write(request+"\n"); | ||
} | ||
@@ -195,3 +209,3 @@ } | ||
}, function() { | ||
//console.log('Socket connected.'); | ||
logger.info('Socket connected.'); | ||
socketConnected = true; | ||
@@ -202,4 +216,4 @@ // wait for the hyperdeck to confirm it's ready and connected. | ||
client.setEncoding("utf8"); | ||
client.on("error", function(/*e*/) { | ||
//console.warn("Socket error.", e); | ||
client.on("error", function(e) { | ||
logger.warn("Socket error.", e); | ||
}); | ||
@@ -223,13 +237,17 @@ // when the connection closes handle this | ||
this.makeRequest = function(requestToProcess) { | ||
var completionPromise = new Promise(function(resolve, reject) { | ||
requestCompletionPromises.push({ | ||
resolve: resolve, | ||
reject: reject | ||
}); | ||
if (!isValidRequest(requestToProcess)) { | ||
throw new Error("Invalid request."); | ||
} | ||
var completionPromise = new Promise(function(resolve, reject) { | ||
requestCompletionPromises.push({ | ||
resolve: resolve, | ||
reject: reject | ||
}); | ||
}); | ||
pendingRequests.push(requestToProcess); | ||
//console.log("Queueing request: "+requestToProcess); | ||
performNextRequest(); | ||
return completionPromise; | ||
pendingRequests.push(requestToProcess); | ||
logger.info("Queueing request.", requestToProcess); | ||
performNextRequest(); | ||
return completionPromise; | ||
}; | ||
@@ -287,4 +305,5 @@ | ||
} | ||
logger.debug('Destroying...'); | ||
destroyed = true; | ||
client.write('quit\n'); | ||
write('quit\n'); | ||
responseHandler.destroy(); | ||
@@ -291,0 +310,0 @@ client.destroy(); |
var events = require('events'); | ||
var Parser = require('./parser'); | ||
var Logger = require("../logger"); | ||
var logger = Logger.get("hyperdeck.ResponseHandler"); | ||
/** | ||
@@ -31,2 +34,3 @@ * Handles responses from they hyperdeck. | ||
} | ||
logger.debug('Got data on socket.', rawData); | ||
var data = Parser.parse(buffer); | ||
@@ -63,2 +67,3 @@ // reset buffer | ||
} | ||
logger.debug('Destroying...'); | ||
destroyed = true; | ||
@@ -65,0 +70,0 @@ clientSocket.removeListener('data', onData); |
@@ -5,3 +5,4 @@ // Here we export what we want to be accessible from the library to the developer | ||
Hyperdeck: require("./hyperdeck/hyperdeck"), | ||
HyperdeckCore: require("./hyperdeck/hyperdeck-core") | ||
}; | ||
HyperdeckCore: require("./hyperdeck/hyperdeck-core"), | ||
Logger: require("./logger") | ||
}; |
@@ -60,2 +60,14 @@ var proxyquire = require('proxyquire'); | ||
it('throws an exception if request contains a new line', function() { | ||
(function() { | ||
hyperdeck.makeRequest("something\r"); | ||
}).should.throw(); | ||
(function() { | ||
hyperdeck.makeRequest("something\r"); | ||
}).should.throw(); | ||
(function() { | ||
hyperdeck.makeRequest("something\r\n"); | ||
}).should.throw(); | ||
}); | ||
it('triggers asynchronousEvent when the responseHandler gets an async response message.', function(done) { | ||
@@ -62,0 +74,0 @@ hyperdeck.getNotifier().once("asynchronousEvent", function(data) { |
@@ -7,2 +7,10 @@ var index = require('../src/index'); | ||
}); | ||
it('should provide the HyperdeckCore class', function() { | ||
index.HyperdeckCore.should.be.ok; | ||
}); | ||
it('should provide the Logger class', function() { | ||
index.Logger.should.be.ok; | ||
}); | ||
}); |
41651
17
897
85
2
+ Addedjs-logger@^1.2.0
+ Addedjs-logger@1.6.1(transitive)