Tidy up of code

This commit is contained in:
hydrabolt
2015-11-07 18:57:23 +00:00
parent af8da5b0a2
commit fc31df3fcf
2 changed files with 122 additions and 70 deletions

View File

@@ -32,6 +32,7 @@ var VoiceConnection = (function () {
this.udp = null; this.udp = null;
this.playingIntent = null; this.playingIntent = null;
this.playing = false; this.playing = false;
this.streamTime = 0;
this.init(); this.init();
} }
@@ -55,6 +56,7 @@ var VoiceConnection = (function () {
} }
var retStream = new StreamIntent(); var retStream = new StreamIntent();
var onWarning = false;
self.playingIntent = retStream; self.playingIntent = retStream;
function send() { function send() {
@@ -70,9 +72,22 @@ var VoiceConnection = (function () {
if (!buffer) { if (!buffer) {
setTimeout(send, length * 10); // give chance for some data in 200ms to appear setTimeout(send, length * 10); // give chance for some data in 200ms to appear
return;
}
if (buffer.length !== 1920) {
if (onWarning) {
retStream.emit("end");
stream.destroy();
self.setSpeaking(false);
return;
} else {
onWarning = true;
setTimeout(send, length * 10); // give chance for some data in 200ms to appear
return;
}
} }
if (buffer && buffer.length === 1920) {
count++; count++;
sequence + 10 < 65535 ? sequence += 1 : sequence = 0; sequence + 10 < 65535 ? sequence += 1 : sequence = 0;
time + 9600 < 4294967295 ? time += 960 : time = 0; time + 9600 < 4294967295 ? time += 960 : time = 0;
@@ -81,14 +96,12 @@ var VoiceConnection = (function () {
var nextTime = startTime + count * length; var nextTime = startTime + count * length;
setTimeout(function () { self.streamTime = count * length;
send();
}, length + (nextTime - Date.now())); setTimeout(send, length + (nextTime - Date.now()));
if (!self.playing) self.setSpeaking(true); if (!self.playing) self.setSpeaking(true);
} else {
retStream.emit("end"); retStream.emit("time", self.streamTime);
self.setSpeaking(false);
}
} catch (e) { } catch (e) {
retStream.emit("error", e); retStream.emit("error", e);
} }
@@ -140,27 +153,42 @@ var VoiceConnection = (function () {
}; };
VoiceConnection.prototype.test = function test() { VoiceConnection.prototype.test = function test() {
this.playFile("C:/users/amish/desktop/audio.mp3").then(function (stream) {
stream.on("time", function (time) {
console.log("Time", time);
});
});
};
VoiceConnection.prototype.playFile = function playFile(stream) {
var _this = this;
var callback = arguments.length <= 1 || arguments[1] === undefined ? function (err, str) {} : arguments[1];
var self = this; var self = this;
this.encoder.encodeFile("C:/users/amish/desktop/audio.mp3")["catch"](error).then(function (stream) { return new Promise(function (resolve, reject) {
_this.encoder.encodeFile(stream)["catch"](error).then(function (stream) {
var intent = self.playRawStream(stream); var intent = self.playRawStream(stream);
resolve(intent);
intent.on("end", function () { callback(null, intent);
console.log("stream ended");
});
}); });
function error() { function error() {
console.log("ERROR!"); var e = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0];
reject(e);
callback(e);
} }
});
}; };
VoiceConnection.prototype.init = function init() { VoiceConnection.prototype.init = function init() {
var _this = this; var _this2 = this;
var self = this; var self = this;
dns.lookup(this.endpoint, function (err, address, family) { dns.lookup(this.endpoint, function (err, address, family) {
self.endpoint = address; self.endpoint = address;
var vWS = self.vWS = new WebSocket("wss://" + _this.endpoint, null, { rejectUnauthorized: false }); var vWS = self.vWS = new WebSocket("wss://" + _this2.endpoint, null, { rejectUnauthorized: false });
var udpClient = self.udp = udp.createSocket("udp4"); var udpClient = self.udp = udp.createSocket("udp4");
var firstPacket = true; var firstPacket = true;

View File

@@ -28,10 +28,11 @@ class VoiceConnection {
this.udp = null; this.udp = null;
this.playingIntent = null; this.playingIntent = null;
this.playing = false; this.playing = false;
this.streamTime = 0;
this.init(); this.init();
} }
stopPlaying(){ stopPlaying() {
this.playingIntent = null; this.playingIntent = null;
} }
@@ -46,15 +47,16 @@ class VoiceConnection {
var length = 20; var length = 20;
if(self.playingIntent){ if (self.playingIntent) {
self.stopPlaying(); self.stopPlaying();
} }
var retStream = new StreamIntent(); var retStream = new StreamIntent();
var onWarning = false;
self.playingIntent = retStream; self.playingIntent = retStream;
function send() { function send() {
if(self.playingIntent && self.playingIntent !== retStream){ if (self.playingIntent && self.playingIntent !== retStream) {
console.log("ending it!"); console.log("ending it!");
self.setSpeaking(false); self.setSpeaking(false);
retStream.emit("end"); retStream.emit("end");
@@ -64,11 +66,24 @@ class VoiceConnection {
var buffer = stream.read(1920); var buffer = stream.read(1920);
if(!buffer){ if (!buffer) {
setTimeout(send, length * 10); // give chance for some data in 200ms to appear setTimeout(send, length * 10); // give chance for some data in 200ms to appear
return;
}
if (buffer.length !== 1920) {
if (onWarning) {
retStream.emit("end");
stream.destroy();
self.setSpeaking(false);
return;
} else {
onWarning = true;
setTimeout(send, length * 10); // give chance for some data in 200ms to appear
return;
}
} }
if (buffer && buffer.length === 1920) {
count++; count++;
sequence + 10 < 65535 ? sequence += 1 : sequence = 0; sequence + 10 < 65535 ? sequence += 1 : sequence = 0;
time + 9600 < 4294967295 ? time += 960 : time = 0; time + 9600 < 4294967295 ? time += 960 : time = 0;
@@ -77,15 +92,14 @@ class VoiceConnection {
var nextTime = startTime + (count * length); var nextTime = startTime + (count * length);
setTimeout(function () { self.streamTime = count * length;
send();
}, length + (nextTime - Date.now())); setTimeout(send, length + (nextTime - Date.now()));
if(!self.playing) if (!self.playing)
self.setSpeaking(true); self.setSpeaking(true);
}else{
retStream.emit("end"); retStream.emit("time", self.streamTime);
self.setSpeaking(false);
}
} catch (e) { } catch (e) {
retStream.emit("error", e); retStream.emit("error", e);
@@ -97,7 +111,7 @@ class VoiceConnection {
return retStream; return retStream;
} }
setSpeaking(value){ setSpeaking(value) {
this.playing = value; this.playing = value;
this.vWS.send(JSON.stringify({ this.vWS.send(JSON.stringify({
op: 5, op: 5,
@@ -138,22 +152,32 @@ class VoiceConnection {
} }
test() { test() {
this.playFile("C:/users/amish/desktop/audio.mp3")
.then(stream => {
stream.on("time", time => {
console.log("Time", time);
})
})
}
playFile(stream, callback = function (err, str) { }) {
var self = this; var self = this;
return new Promise((resolve, reject) => {
this.encoder this.encoder
.encodeFile("C:/users/amish/desktop/audio.mp3") .encodeFile(stream)
.catch(error) .catch(error)
.then(stream => { .then(stream => {
var intent = self.playRawStream(stream); var intent = self.playRawStream(stream);
resolve(intent);
intent.on("end", ()=>{ callback(null, intent);
console.log("stream ended");
});
}); });
function error() { function error(e = true) {
console.log("ERROR!"); reject(e);
callback(e);
} }
})
} }
init() { init() {