equal
deleted
inserted
replaced
621 </xsl:text> |
621 </xsl:text> |
622 <xsl:text> |
622 <xsl:text> |
623 </xsl:text> |
623 </xsl:text> |
624 <xsl:text>var cache = hmitree_types.map(_ignored => undefined); |
624 <xsl:text>var cache = hmitree_types.map(_ignored => undefined); |
625 </xsl:text> |
625 </xsl:text> |
|
626 <xsl:text>var updates = {}; |
|
627 </xsl:text> |
626 <xsl:text> |
628 <xsl:text> |
627 </xsl:text> |
629 </xsl:text> |
628 <xsl:text>function dispatch_value_to_widget(widget, index, value, oldval) { |
630 <xsl:text>function dispatch_value_to_widget(widget, index, value, oldval) { |
629 </xsl:text> |
631 </xsl:text> |
630 <xsl:text> try { |
632 <xsl:text> try { |
747 </xsl:text> |
749 </xsl:text> |
748 <xsl:text>}; |
750 <xsl:text>}; |
749 </xsl:text> |
751 </xsl:text> |
750 <xsl:text> |
752 <xsl:text> |
751 </xsl:text> |
753 </xsl:text> |
752 <xsl:text>// Register message reception handler |
754 <xsl:text>// Apply updates recieved through ws.onmessage to subscribed widgets |
|
755 </xsl:text> |
|
756 <xsl:text>// Called on requestAnimationFram, modifies DOM |
|
757 </xsl:text> |
|
758 <xsl:text>function apply_pending_updates() { |
|
759 </xsl:text> |
|
760 <xsl:text> for(let index in updates){ |
|
761 </xsl:text> |
|
762 <xsl:text> // serving as a key, index becomes a string |
|
763 </xsl:text> |
|
764 <xsl:text> // -> pass Number(index) instead |
|
765 </xsl:text> |
|
766 <xsl:text> dispatch_value(Number(index), updates[index]); |
|
767 </xsl:text> |
|
768 <xsl:text> delete updates[index]; |
|
769 </xsl:text> |
|
770 <xsl:text> } |
|
771 </xsl:text> |
|
772 <xsl:text>} |
|
773 </xsl:text> |
|
774 <xsl:text> |
|
775 </xsl:text> |
|
776 <xsl:text>// Message reception handler |
|
777 </xsl:text> |
|
778 <xsl:text>// Hash is verified and HMI values updates resulting from binary parsing |
|
779 </xsl:text> |
|
780 <xsl:text>// are stored until browser can compute next frame, DOM is left untouched |
753 </xsl:text> |
781 </xsl:text> |
754 <xsl:text>ws.onmessage = function (evt) { |
782 <xsl:text>ws.onmessage = function (evt) { |
755 </xsl:text> |
783 </xsl:text> |
756 <xsl:text> |
784 <xsl:text> |
757 </xsl:text> |
785 </xsl:text> |
789 </xsl:text> |
817 </xsl:text> |
790 <xsl:text> let dvgetter = dvgetters[iectype]; |
818 <xsl:text> let dvgetter = dvgetters[iectype]; |
791 </xsl:text> |
819 </xsl:text> |
792 <xsl:text> let [value, bytesize] = dvgetter(dv,i); |
820 <xsl:text> let [value, bytesize] = dvgetter(dv,i); |
793 </xsl:text> |
821 </xsl:text> |
794 <xsl:text> dispatch_value(index, value); |
822 <xsl:text> updates[index] = value; |
795 </xsl:text> |
823 </xsl:text> |
796 <xsl:text> i += bytesize; |
824 <xsl:text> i += bytesize; |
797 </xsl:text> |
825 </xsl:text> |
798 <xsl:text> } else { |
826 <xsl:text> } else { |
799 </xsl:text> |
827 </xsl:text> |
800 <xsl:text> throw new Error("Unknown index "+index) |
828 <xsl:text> throw new Error("Unknown index "+index); |
801 </xsl:text> |
829 </xsl:text> |
802 <xsl:text> } |
830 <xsl:text> } |
803 </xsl:text> |
831 </xsl:text> |
804 <xsl:text> }; |
832 <xsl:text> }; |
|
833 </xsl:text> |
|
834 <xsl:text> // register for rendering on next frame, since there are updates |
|
835 </xsl:text> |
|
836 <xsl:text> window.requestAnimationFrame(apply_pending_updates); |
805 </xsl:text> |
837 </xsl:text> |
806 <xsl:text> } catch(err) { |
838 <xsl:text> } catch(err) { |
807 </xsl:text> |
839 </xsl:text> |
808 <xsl:text> // 1003 is for "Unsupported Data" |
840 <xsl:text> // 1003 is for "Unsupported Data" |
809 </xsl:text> |
841 </xsl:text> |