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 } |