<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Alternatively, encode the message
      before sending as a javascript-friendly JSON object (eg by using <a
        href="http://jansson.readthedocs.io/en/2.7/">Jansson</a>), then
      it's easy on the browser side:<br>
      <br>
        <tt>var message = JSON.parse(binaryMessage);</tt><br>
      <br>
      Rob<br>
      <br>
      On 12/07/16 10:09, Remi de Gravelaine wrote:<br>
    </div>
    <blockquote
      cite="mid:c666fdf1-d3df-411c-84e4-49765a2c2f9c@gmail.com"
      type="cite">
      <meta content="text/html; charset=windows-1252"
        http-equiv="Content-Type">
      <tt>Hi all,</tt><tt><br>
      </tt><tt><br>
      </tt><tt>To be a little bit more precise</tt><tt>, you will also
        need to make some J</tt><tt>S 'casting' in your onMessage
        function.</tt><tt><br>
      </tt><tt>For example, I use this code to retrieve GPS data send by
        a libwebsocked-based server in binary form:</tt><tt><br>
      </tt><tt><br>
      </tt><tt>function setupWebSocket() {</tt><tt><br>
      </tt><tt>    websocket = new WebSocket(wsUri, wsProto);</tt><tt><br>
      </tt><tt>    websocket.binaryType = "arraybuffer";</tt><tt><br>
      </tt><tt>    websocket.onerror = function(evt) { onError(evt) };</tt><tt><br>
      </tt><tt>    websocket.onopen = function(evt) { onOpen(evt) };</tt><tt><br>
      </tt><tt>    websocket.onclose = function(evt) { onClose(evt) };</tt><tt><br>
      </tt><tt>    websocket.onmessage = function(evt) { onMessage(evt)
        };</tt><tt><br>
      </tt><tt>}</tt><tt><br>
      </tt><tt><br>
      </tt><tt>/*<br>
        Process messages received from the WS Server.<br>
        They contain LOCINFO structures, in binary form:<br>
----------------------------------------------------------------------------<br>
        // Time structure. We actually use a Windows SYSTEMTIME
        equivalent.<br>
        typedef struct {<br>
            unsigned short wYear;<br>
            unsigned short wMonth;<br>
            unsigned short wDayOfWeek;<br>
            unsigned short wDay;<br>
            unsigned short wHour;<br>
            unsigned short wMinute;<br>
            unsigned short wSecond;<br>
            unsigned short wMilliseconds;<br>
        } LOCTIME;<br>
        <br>
        // Location information.<br>
        typedef struct {<br>
            unsigned char bLevel;    // 00: level of information
        available<br>
            unsigned char bQuality;  // 01: GPS quality indicator<br>
            unsigned char bNavMode;  // 02: Operating mode, used for
        navigation (1 = Fix not available; 2 = 2D; 3 = 3D)<br>
            unsigned char bRes;      // 03: reserved<br>
            LOCTIME       utc;       // 04: UTC of position<br>
            float         PDOP;      // 20: Position Dilution Of
        Precision<br>
            .<br>
            .<br>
            .<br>
        } LOCINFO, *PLOCINFO;<br>
        */<br>
        function onMessage(evt) {<br>
            var gd = {};                    // data structure built from
        the binary message<br>
            <br>
            console.log("MESSAGE: " + evt.data.byteLength + " bytes");<br>
            <br>
            // Extract incoming LOCINFO fields into our gd object.<br>
            // Every field in a LOCINFO uses little-endian convention.<br>
            var dv = new DataView(evt.data);<br>
        <br>
            // Level of information, fix quality and mode.<br>
            gd.level =   dv.getUint8(0);<br>
            gd.quality = dv.getUint8(1);<br>
            gd.navMode = dv.getUint8(2);<br>
            <br>
            // Date and time.<br>
            gd.utc = {};                    // UTC of position<br>
            gd.utc.year =         dv.getUint16( 4, true);<br>
            gd.utc.month =        dv.getUint16( 6, true);<br>
            gd.utc.dayOfWeek =    dv.getUint16( 8, true);<br>
            gd.utc.day =          dv.getUint16(10, true);<br>
            gd.utc.hour =         dv.getUint16(12, true);<br>
            gd.utc.minute =       dv.getUint16(14, true);<br>
            gd.utc.second =       dv.getUint16(16, true);<br>
            gd.utc.milliseconds = dv.getUint16(18, true);<br>
        <br>
            // Precision.<br>
            gd.pdop = dv.getFloat32(20, true);        // Position
        Dilution Of Precision<br>
            .<br>
            .<br>
            processGpsData(gd);<br>
        }<br>
        <br>
        You have to be precise about the offset and the byte-sex of the
        structure you receive but there is nothing really difficult
        here.<br>
        <br>
        HTH<br>
        Remi<br>
         <br>
      </tt>
      <div class="moz-cite-prefix">Le 11/07/2016 à 17:43, <a
          moz-do-not-send="true" class="moz-txt-link-abbreviated"
          href="mailto:libwebsockets-request@ml.libwebsockets.org"><a class="moz-txt-link-abbreviated" href="mailto:libwebsockets-request@ml.libwebsockets.org">libwebsockets-request@ml.libwebsockets.org</a></a>
        a écrit :<br>
      </div>
      <blockquote
        cite="mid:mailman.58.1468251822.672.libwebsockets@ml.libwebsockets.org"
        type="cite">
        <pre wrap="">Hi Suman

If you want to access the actual bytes of binary messages in your 
javascript, you need to tell it to convert the blob into an ArrayBuffer, 
like so:

     var ws = new WebSocket(<a moz-do-not-send="true" class="moz-txt-link-rfc2396E" href="ws://....">"ws://...."</a>);
     ws.binaryType = 'arraybuffer';

hth
Rob

On 11/07/16 10:52, Suman.Patro-TRN wrote:
</pre>
        <blockquote qctoggled="true" type="cite" style="color: #000000;">
          <pre wrap=""><span class="moz-txt-citetags">></span>
<span class="moz-txt-citetags">> </span>Hello ,
<span class="moz-txt-citetags">></span>
<span class="moz-txt-citetags">> </span>            I would like to use LWS_WRITE_BINARYin lws_write in the 
<span class="moz-txt-citetags">> </span>webserver and get data in the javascript client . I use websockets 
<span class="moz-txt-citetags">> </span>connection in the javascript client. When I tried the above scenario, 
<span class="moz-txt-citetags">> </span>I get [object blob] on the html page. Do I need to take some 
<span class="moz-txt-citetags">> </span>additional efforts at the javascript client or is this the javascript  
<span class="moz-txt-citetags">> </span>issue? Is it true that javascript client does not understand byte? if 
<span class="moz-txt-citetags">> </span>javascript does not understand byte, then should Xmlhttprequest is to 
<span class="moz-txt-citetags">> </span>be used? but as per my knowledge xmlhttprequest is used with long 
<span class="moz-txt-citetags">> </span>polling technique and not websockets.Are my understanding on this 
<span class="moz-txt-citetags">> </span>topic correct?
<span class="moz-txt-citetags">></span>
<span class="moz-txt-citetags">> </span>Thanks and regards,
<span class="moz-txt-citetags">></span>
<span class="moz-txt-citetags">> </span>Suman
<span class="moz-txt-citetags">></span></pre>
        </blockquote>
      </blockquote>
      <br>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
Libwebsockets mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Libwebsockets@ml.libwebsockets.org">Libwebsockets@ml.libwebsockets.org</a>
<a class="moz-txt-link-freetext" href="http://libwebsockets.org/mailman/listinfo/libwebsockets">http://libwebsockets.org/mailman/listinfo/libwebsockets</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>