svghmi/svghmi.js
branchsvghmi
changeset 2826 1e5abecc3cde
parent 2822 9101a72a1da0
child 2827 af32e80d108f
equal deleted inserted replaced
2825:b4b69e85ed53 2826:1e5abecc3cde
    44 // Open WebSocket to relative "/ws" address
    44 // Open WebSocket to relative "/ws" address
    45 var ws = new WebSocket(window.location.href.replace(/^http(s?:\/\/[^\/]*)\/.*$/, 'ws$1/ws'));
    45 var ws = new WebSocket(window.location.href.replace(/^http(s?:\/\/[^\/]*)\/.*$/, 'ws$1/ws'));
    46 ws.binaryType = 'arraybuffer';
    46 ws.binaryType = 'arraybuffer';
    47 
    47 
    48 const dvgetters = {
    48 const dvgetters = {
    49     INT: [DataView.prototype.getInt16, 2],
    49     INT: (dv,offset) => [dv.getInt16(offset, true), 2],
    50     BOOL: [DataView.prototype.getInt8, 1]
    50     BOOL: (dv,offset) => [dv.getInt8(offset, true), 1],
    51     /* TODO */
    51     STRING: (dv, offset) => {
       
    52         size = dv.getInt8(offset);
       
    53         return [
       
    54             String.fromCharCode.apply(null, new Uint8Array(
       
    55                 dv.buffer, /* original buffer */
       
    56                 offset + 1, /* string starts after size*/
       
    57                 size /* size of string */
       
    58             )), size + 1]; /* total increment */
       
    59     }
    52 };
    60 };
    53 
    61 
    54 // Register message reception handler 
    62 // Register message reception handler 
    55 ws.onmessage = function (evt) {
    63 ws.onmessage = function (evt) {
    56 
    64 
    68         while(i < data.byteLength){
    76         while(i < data.byteLength){
    69             let index = dv.getUint32(i, true);
    77             let index = dv.getUint32(i, true);
    70             i += 4;
    78             i += 4;
    71             let iectype = hmitree_types[index];
    79             let iectype = hmitree_types[index];
    72             if(iectype != undefined){
    80             if(iectype != undefined){
    73                 let [dvgetter, bytesize] = dvgetters[iectype];
    81                 let dvgetter = dvgetters[iectype];
    74                 let value = dvgetter.call(dv,i,true);
    82                 let [value, bytesize] = dvgetter(dv,i);
    75                 dispatch_value(index, value);
    83                 dispatch_value(index, value);
    76                 i += bytesize;
    84                 i += bytesize;
    77             } else {
    85             } else {
    78                 throw new Error("Unknown index "+index)
    86                 throw new Error("Unknown index "+index)
    79             }
    87             }