Created
November 10, 2015 00:37
-
-
Save pke/0b5f4224a8f569ada900 to your computer and use it in GitHub Desktop.
readAsync from WinRT socket
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
readLineAsync = function(reader, timeout, buffer) { | |
var byte; | |
if (buffer == null) { | |
buffer = ""; | |
} | |
logger.trace("readLineAsync: reader.unconsumedBufferLength=" + reader.unconsumedBufferLength + " buffer=" + buffer); | |
while (reader.unconsumedBufferLength) { | |
byte = reader.readByte(); | |
if (byte === 0) { | |
logger.trace("End of stream reached, " + reader.unconsumedBufferLength + " left on reader"); | |
return WinJS.Promise.as(buffer); | |
} | |
buffer += String.fromCharCode(byte); | |
} | |
logger.trace("readLineAsync: reading 4096 bytes"); | |
return WinJS.Promise.timeout(timeout, reader.loadAsync(4096)).then(function(readBytes) { | |
logger.trace("readLineAsync: more " + readBytes + " read"); | |
if (readBytes === 0) { | |
logger.trace("readLineAsync: 0 bytes read, returning " + buffer); | |
return WinJS.Promise.as(buffer); | |
} else { | |
logger.trace("readLineAsync: call again with " + buffer + " and " + reader.unconsumedBufferLength + " left on reader"); | |
return WinJS.Promise.timeout().then(function() { | |
return readLineAsync(reader, timeout, buffer); | |
}); | |
} | |
}, function(error) { | |
if (error.name === "Canceled") { | |
error.timeout = true; | |
logger.trace("readLineAsync: Canceled or timed-out"); | |
} else { | |
logger.trace("readLineAsync: error", error); | |
} | |
return WinJS.Promise.wrapError(error); | |
}); | |
}; | |
lastLinePattern = /^\|0?18\|05\|00\|02\|\|$/; | |
readXmlAsync = function(reader, timeout) { | |
var done, xml; | |
xml = ""; | |
done = false; | |
return new WinJS.Promise(function(c, e, p) { | |
var runner; | |
runner = function() { | |
if (done) { | |
return c(hex2a(xml)); | |
} else { | |
return readLineAsync(reader, timeout).then(function(line) { | |
p(line); | |
if (lastLinePattern.test(line)) { | |
return done = true; | |
} else { | |
return xml += line; | |
} | |
}).then(runner, e, p); | |
} | |
}; | |
return runner(); | |
}); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment