Hi again Ernie,
I've just committed a few improvements.

In terms of debugging if you specify
cmake .. -DCMAKE_BUILD_TYPE=Debug
or
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo

it will do a build with no JavaScript optimisations and no closure compiler so any JavaScript errors will be a bit more human readable. The default build does full Clang optimisations and JavaScript/asm.js optimisations and minifies/optimises with the closure compiler.

I added code to the status and isBuffered methods that checks for a null tracker being passed, and if so they now retrieve the outgoing tracker and use that.

I've also added a soak test and a little send.html

I need to take a look at error handling - if I try to send when there's no receiver it gets in a state where it won't subsequently send messages when the receiver is restarted. I might just need to stop and restart Messenger - TBH I can't claim to really understand the Messenger API.

Hope that you are having fun with this stuff.
Frase


On 30/08/14 16:25, Ernest Allen wrote:
Hi Fraser,
I'm trying to run the proton javascript bindings from within a browser. I'm 
getting various errors depending on the way I'm doing it and I was hoping you 
could shed some light on the correct approach.
I have node recv.js running in a separate window.

The first way I tried was just including proton.js directly. When I load the 
page the console shows the following for the HTML listed below:
pre-main prep time: 6 ms
proton is [object Object]
before put
Uncaught TypeError: Cannot read property 'fa' of null
Uncaught TypeError: Cannot read property 'fa' of null

Here is the HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
<html xmlns="http://www.w3.org/1999/xhtml";>

<head>
        <title>An XHTML 1.0 Strict standard template</title>
        <meta http-equiv="content-type"
                content="text/html;charset=utf-8" />

<script type="text/javascript" 
src="../../../node_modules/qpid-proton/lib/proton.js"></script>

<script type="text/javascript">
//<![CDATA[

console.log("proton is " + window.proton);
var address = "amqp://0.0.0.0";
var subject = "BrowserMessage";
var msgtext = "Hello From Browser!";
var tracker = null;
var running = true;

var message = new proton.Message();
var messenger = new proton.Messenger();

var pumpData = function() {
     var status = messenger.status(tracker);
     if (status != proton.Status.PENDING) {
         if (running) {
             messenger.stop();
             running = false;
         }
     }

     if (messenger.isStopped()) {
         message.free();
         messenger.free();
     }
};

messenger.on('error', function(error) {console.log("this is the error" + 
error);});
messenger.on('work', pumpData);
messenger.setOutgoingWindow(1024);
messenger.start();

message.setAddress(address);
message.setSubject(subject);
message.body = msgtext;

console.log("before put");
messenger.put(message);

        
//]]>
</script>
</head>

<body>
</body>

</html>

The output in the window running node recv.js is:
[0x535398]:ERROR[-2] AMQP header mismatch: '' (connection aborted)

CONNECTION ERROR connection aborted (remote)



When I browserify the proton.js into qpid-proton-browser.js and load that file 
instead, I get the following when the page loads:
Uncaught TypeError: Cannot read property 'replace' of undefined
proton is undefined
Uncaught ReferenceError: proton is not defined

The Uncaught TypeError is due to a referece to "process.argv[1]". If I manually edit the 
qpid-proton-browser.js file to define all the process properties that it wants, I still get the 
"proton is undefined" error.

Do you know what I'm doing wrong?

Thanks,
-Ernie

Reply via email to