Facility Control

 View Only
  • 1.  HTTP Trigger Rename Button

    Posted 12-22-2025 11:30

    I can rename a panel element in DashBoard, but the button on the HTTP Trigger Web Page does not rename.

    Is this expected behaviour?

    What I'm really trying to do is use a web api to revel parameters without having to wrote my own handler.

    Does that already exist?

    Thanks



    ------------------------------
    Simon
    ------------------------------


  • 2.  RE: HTTP Trigger Rename Button

    Posted 12-24-2025 06:32

    The webserver for this port creates a script that will send triggers if accessed in a browser, to send the same triggers insert '/ajax/' into the url before the trigger ID.

    <!-- Panel with 4 buttons that trigger the GPI when clicked -->
    <?xml version="1.0" encoding="UTF-8"?><abs contexttype="opengear" httptriggerport="12345" id="_top" keepalive="false">
        <meta name="styles">
            <style id="color_1" value="bdr#red;bdr:thick;"/>
            <style id="color_2" value="bdr#green;bdr:thick;"/>
            <style id="color_3" value="bdr#teal;bdr:thick;"/>
            <style id="color_4" value="bdr#orange;bdr:thick;"/>
        </meta>
        <abs height="300" id="border" left="10" top="10" width="300">
            <table bottom="5" left="5" right="5" top="5">
                <tr>
                    <button buttontype="push" colspan="1" fill="both" gpi="color-1" name="Color 1" rowspan="1" style="bg#red;" weightx="1.0" weighty="1.0">
                        <task tasktype="ogscript">ogscript.setStyle('border', 'style:color_1');</task>
                    </button>
                    <button buttontype="push" colspan="1" fill="both" gpi="color-2" name="Color 2" rowspan="1" style="bg#green;" weightx="1.0" weighty="1.0">
                        <task tasktype="ogscript">ogscript.setStyle('border', 'style:color_2');</task>
                    </button>
                </tr>
                <tr>
                    <button buttontype="push" colspan="1" fill="both" gpi="color-3" name="Color 3" rowspan="1" style="bg#teal;" weightx="1.0" weighty="1.0">
                        <task tasktype="ogscript">ogscript.setStyle('border', 'style:color_3');</task>
                    </button>
                    <button buttontype="push" colspan="1" fill="both" gpi="color-4" name="Color 4" rowspan="1" style="bg#orange;" weightx="1.0" weighty="1.0">
                        <task tasktype="ogscript">ogscript.setStyle('border', 'style:color_4');</task>
                    </button>
                </tr>
            </table>
        </abs>
    </abs>
    
    <!-- Panel to send a message to the GPI -->
    <?xml version="1.0" encoding="UTF-8"?><abs contexttype="opengear" id="_top" keepalive="false">
        <meta>
            <params>
                <param access="1" maxlength="0" name="host" oid="host" type="STRING" value="localhost" widget="default"/>
                <param access="1" maxlength="0" name="port" oid="port" type="STRING" value="12345" widget="default"/>
                <param access="1" maxlength="0" name="message" oid="message" type="STRING" value="color-3" widget="default"/>
            </params>
        </meta>
        <abs height="230" left="10" style="bdr#buttonbg;bdr:thick;" top="10" width="485">
            <table bottom="5" left="5" right="5" top="5">
                <tr>
                    <simplegrid cols="2" colspan="1" fill="both" rowspan="1" weightx="1.0" weighty="1.0">
                        <label name="Host" style="txt-align:center"/>
                        <param expand="true" oid="host" showlabel="false"/>
                    </simplegrid>
                </tr>
                <tr>
                    <simplegrid cols="2" colspan="1" fill="both" rowspan="1" weightx="1.0" weighty="1.0">
                        <label name="Port" style="txt-align:center"/>
                        <param expand="true" oid="port" showlabel="false"/>
                    </simplegrid>
                </tr>
                <tr>
                    <simplegrid cols="2" colspan="1" fill="both" rowspan="1" weightx="1.0" weighty="1.0">
                        <label name="Message" style="txt-align:center"/>
                        <param expand="true" oid="message" showlabel="false"/>
                    </simplegrid>
                </tr>
                <tr>
                    <button buttontype="push" colspan="1" fill="both" name="Send" rowspan="1" weightx="1.0" weighty="1.0">
                        <task tasktype="ogscript">var host = params.getValue('host', 0);
    var port = params.getValue('port', 0);
    var message = params.getValue('message', 0);
    // Construct URL for triggering the GPI: /ajax/{gpi-name}
    var url = 'http://' + host + ':' + port + '/ajax/' + message;
    
    function callback(result) {
        if (result) {
            ogscript.debug("[HTTP_Trigger] Error: " + JSON.stringify(result, null, 2));
        } else {
            ogscript.debug("[HTTP_Trigger] Trigger sent successfully");
        }
    }
    // Use GET method to trigger the GPI (matches the dashboard button behavior)
    ogscript.asyncHTTP(url, "GET", null, null, callback, true);</task>
                    </button>
                </tr>
            </table>
        </abs>
    </abs>
    


    ------------------------------
    Richard Crutwell
    Ross Video UK
    ------------------------------



  • 3.  RE: HTTP Trigger Rename Button

    Posted 18 days ago

    Hi Richard.

    Thanks for the response.

    I'm not trying to send a trigger, but to find the value of a parameter by web api.
    I thought that if I could rename a button to the parameter value I could parse that, but it doesn't update.



    ------------------------------
    Simon Liddicott
    Systems Engineer
    ------------------------------



  • 4.  RE: HTTP Trigger Rename Button

    Posted 16 days ago

    In that case, the best approach would be to build a listener that receives the messages and lets you act on them as needed.

    That said, this may be over-engineering the problem. As an alternative, you could hide multiple functions behind labels or buttons with a RossTalk GPI Trigger, and use each of these to drive component changes in Dashboard-assuming there isn't a more complex requirement later on.

    Here are three examples using differing methods for controlling VLC Player.

    VLC Level 1 - TCP Fire and Forget

    <?xml version="1.0" encoding="UTF-8"?><abs contexttype="opengear" gridsize="20" id="_top" keepalive="false" style="">
       <meta>
          <params>
             <param access="1" maxlength="0" name="vlc host" oid="vlchost" type="STRING" value="localhost" widget="default"/>
             <param access="1" constrainttype="INT_NULL" name="vlc port" oid="vlcport" precision="0" type="INT16" value="2235" widget="default"/>
             <param access="1" constraint="0.0;1000.0;0.0;1000.0;1" constrainttype="INT_STEP_RANGE" name="Goto Number" oid="goto" precision="0" type="INT16" value="7" widget="default"/>
          </params>
       </meta>
       <label height="60" left="40" name="VLC over TCP - Fire and Forget" style="txt-align:west;size:Bigger;" top="40" width="620"/>
       <label height="20" left="40" name="This panel sends command over TCP to a VLC player.   We do not expect any response from the VLC player." style="txt-align:west" top="100" width="780"/>
       <label height="20" left="40" name="VLC Host:" style="txt-align:west;" top="160" width="120"/>
       <label height="20" left="40" name="VLC Port:" style="txt-align:west" top="200" width="140"/>
       <label height="20" left="40" name="For this to work, VLC has to be started with the following arguments: vlc.exe --extraintf rc --rc-host localhost:2235 " style="txt-align:west;" top="120" width="700"/>
       <param expand="true" height="20" left="120" oid="vlchost" showlabel="false" top="160" width="180"/>
       <param expand="true" height="20" left="120" oid="vlcport" showlabel="false" top="200" width="180"/>
       
       <button buttontype="push" height="40" left="40" name="Pause" top="260" width="100">
          <task tasktype="ogscript">
    
    
    /*! block id=1013,1014,1015 !*/
    rosstalk.sendMessage(params.getValue('vlchost', 0), params.getValue('vlcport', 0), "pause", null);
    /*!!
     &lt;block id="1013" type="ogscript_sendtcpstring" x="319" y="136" w="318" HOST="ID:1014" PORT="ID:1015" STRING="pause" CALLBACK="null" /&gt;
    &lt;block id="1014" type="param__top&amp;amp;vlc host (vlchost)[0]" x="10" y="300" w="243" SET="" /&gt;
    &lt;block id="1015" type="param__top&amp;amp;vlc port (vlcport)[0]" x="10" y="392" w="243" SET="" /&gt;
    !!*/
    /*!!&lt;checksum&gt;f632fa875b5e9483edae9cf7a7aac06d&lt;/checksum&gt;!!*/</task>
       </button>
       <button buttontype="push" height="40" left="160" name="Next" top="260" width="100">
          <task tasktype="ogscript">
    
    
    /*! block id=1013,1014,1015 !*/
    rosstalk.sendMessage(params.getValue('vlchost', 0), params.getValue('vlcport', 0), "next", null);
    /*!!
     &lt;block id="1013" type="ogscript_sendtcpstring" x="319" y="136" w="318" HOST="ID:1014" PORT="ID:1015" STRING="next" CALLBACK="null" /&gt;
    &lt;block id="1014" type="param__top&amp;amp;vlc host (vlchost)[0]" x="10" y="300" w="243" SET="" /&gt;
    &lt;block id="1015" type="param__top&amp;amp;vlc port (vlcport)[0]" x="10" y="392" w="243" SET="" /&gt;
    !!*/
    /*!!&lt;checksum&gt;b4f29ef5d42ae87c50ce284b1c494143&lt;/checksum&gt;!!*/</task>
       </button>
       <button buttontype="push" height="40" left="280" name="Prev" top="260" width="100">
          <task tasktype="ogscript">
    
    
    /*! block id=1013,1014,1015 !*/
    rosstalk.sendMessage(params.getValue('vlchost', 0), params.getValue('vlcport', 0), "prev", null);
    /*!!
     &lt;block id="1013" type="ogscript_sendtcpstring" x="319" y="136" w="318" HOST="ID:1014" PORT="ID:1015" STRING="prev" CALLBACK="null" /&gt;
    &lt;block id="1014" type="param__top&amp;amp;vlc host (vlchost)[0]" x="10" y="300" w="243" SET="" /&gt;
    &lt;block id="1015" type="param__top&amp;amp;vlc port (vlcport)[0]" x="10" y="392" w="243" SET="" /&gt;
    !!*/
    /*!!&lt;checksum&gt;fbef6284b6b2df0d28c8e371085fee81&lt;/checksum&gt;!!*/</task>
       </button>
       <button buttontype="push" height="40" left="40" name="Goto" top="320" width="100">
          <task tasktype="ogscript">
    
    
    /*! block id=1013,1014,1015,1016,1017 !*/
    rosstalk.sendMessage(params.getValue('vlchost', 0), params.getValue('vlcport', 0), ("goto " + params.getValue('goto', 0)), null);
    /*!!
     &lt;block id="1013" type="ogscript_sendtcpstring" x="556" y="10" w="318" HOST="ID:1014" PORT="ID:1015" STRING="ID:1016" CALLBACK="null" /&gt;
    &lt;block id="1014" type="param__top&amp;amp;vlc host (vlchost)[0]" x="283" y="10" w="243" SET="" /&gt;
    &lt;block id="1015" type="param__top&amp;amp;vlc port (vlcport)[0]" x="283" y="72" w="243" SET="" /&gt;
    &lt;block id="1016" type="math_add" x="283" y="134" VALUE="goto " VAL_1="ID:1017" w="218" VAL_1_1="" /&gt;
    &lt;block id="1017" type="param__top&amp;amp;Goto Number (goto)[0]" x="10" y="134" w="243" SET="" /&gt;
    !!*/
    /*!!&lt;checksum&gt;863ef5f652ab559b906ea2a151337516&lt;/checksum&gt;!!*/</task>
       </button>
       <param expand="true" height="20" left="160" oid="goto" showlabel="false" top="340" width="80"/>
       <label height="20" left="160" name="Clip Number" style="txt-align:west" top="320" width="100"/>
    </abs>
    

    VLC Level 2 - TCP Response

    <?xml version="1.0" encoding="UTF-8"?><abs contexttype="opengear" gridsize="20" id="_top" keepalive="false">
       <meta>
          <params>
             <param access="1" maxlength="0" name="vlc host" oid="vlchost" type="STRING" value="localhost" widget="default"/>
             <param access="1" constrainttype="INT_NULL" name="vlc port" oid="vlcport" precision="0" type="INT16" value="2235" widget="default"/>
             <param access="1" constraint="0.0;1000.0;0.0;1000.0;1" constrainttype="INT_STEP_RANGE" name="Goto Number" oid="goto" precision="0" type="INT16" value="13" widget="default"/>
          </params>
          <api>function vlc_callback(success, sentData, resultString, exception)
    {
        ogscript.debug("success: " + success);
        ogscript.debug("sentData: " + sentData);
        ogscript.debug("resultString: " + resultString);
        ogscript.debug("exception: " + exception);
        ogscript.rename("message", resultString);
    }</api>
       </meta>
       <label height="60" left="40" name="VLC over TCP - Messages with Responses" style="txt-align:west;size:Bigger;" top="40" width="620"/>
       <label height="20" left="40" name="This panel sends command over TCP to a VLC player.   The VLC player sends a response, which we parse." style="txt-align:west;" top="100" width="780"/>
       <label height="20" left="40" name="VLC Host:" style="txt-align:west;" top="160" width="120"/>
       <label height="20" left="40" name="VLC Port:" style="txt-align:west" top="200" width="140"/>
       <label height="20" left="40" name="For this to work, VLC has to be started with the following arguments: vlc.exe --extraintf rc --rc-host localhost:2235 " style="txt-align:west" top="120" width="700"/>
       <param expand="true" height="20" left="120" oid="vlchost" showlabel="false" top="160" width="180"/>
       <param expand="true" height="20" left="120" oid="vlcport" showlabel="false" top="200" width="180"/>
       
       <button buttontype="push" height="40" left="40" name="Pause" top="260" width="100">
          <task tasktype="ogscript">//callback method is in API
    
    rosstalk.sendMessageWithResponse(params.getValue('vlchost', 0), params.getValue('vlcport', 0), "pause\n", "\n", vlc_callback);</task>
       </button>
       <button buttontype="push" height="40" left="160" name="Next" top="260" width="100">
          <task tasktype="ogscript">/*! block id=1018,1014,1015 !*/
    rosstalk.sendMessageWithResponse(params.getValue('vlchost', 0), params.getValue('vlcport', 0), "next\n", "\n", vlc_callback);
    /*!!
     &lt;block id="1018" type="ogscript_sendtcpstringwresponse" x="317" y="411" w="318" HOST="ID:1014" PORT="ID:1015" STRING="next\n" ENDOFMESSAGE="\n" CALLBACK="vlc_callback" /&gt;
    &lt;block id="1014" type="param__top&amp;amp;vlc host (vlchost)[0]" x="10" y="300" w="243" SET="" /&gt;
    &lt;block id="1015" type="param__top&amp;amp;vlc port (vlcport)[0]" x="10" y="392" w="243" SET="" /&gt;
    !!*/
    /*!!&lt;checksum&gt;52ae3026b1170657300e41dd77fa3f4c&lt;/checksum&gt;!!*/</task>
       </button>
       <button buttontype="push" height="40" left="280" name="Prev" top="260" width="100">
          <task tasktype="ogscript">
    
    
    /*! block id=1018,1014,1015 !*/
    rosstalk.sendMessageWithResponse(params.getValue('vlchost', 0), params.getValue('vlcport', 0), "prev\n", "\n", vlc_callback);
    /*!!
     &lt;block id="1018" type="ogscript_sendtcpstringwresponse" x="317" y="411" w="318" HOST="ID:1014" PORT="ID:1015" STRING="prev\n" ENDOFMESSAGE="\n" CALLBACK="vlc_callback" /&gt;
    &lt;block id="1014" type="param__top&amp;amp;vlc host (vlchost)[0]" x="10" y="300" w="243" SET="" /&gt;
    &lt;block id="1015" type="param__top&amp;amp;vlc port (vlcport)[0]" x="10" y="392" w="243" SET="" /&gt;
    !!*/
    /*!!&lt;checksum&gt;91f95e38f4586e26a62f6a2aca0b1afe&lt;/checksum&gt;!!*/</task>
       </button>
       <button buttontype="push" height="40" left="400" name="Goto" top="260" width="100">
          <task tasktype="ogscript">
    
    
    /*! block id=1019,1014,1015,1016,1017 !*/
    rosstalk.sendMessageWithResponse(params.getValue('vlchost', 0), params.getValue('vlcport', 0), ("goto " + params.getValue('goto', 0) + "\n"), "\n", vlc_callback);
    /*!!
     &lt;block id="1019" type="ogscript_sendtcpstringwresponse" x="556" y="10" w="318" HOST="ID:1014" PORT="ID:1015" STRING="ID:1016" ENDOFMESSAGE="\n" CALLBACK="vlc_callback" /&gt;
    &lt;block id="1014" type="param__top&amp;amp;vlc host (vlchost)[0]" x="283" y="10" w="243" SET="" /&gt;
    &lt;block id="1015" type="param__top&amp;amp;vlc port (vlcport)[0]" x="283" y="72" w="243" SET="" /&gt;
    &lt;block id="1016" type="math_add" x="283" y="134" VALUE="goto " VAL_1="ID:1017" VAL_1_1="\n" w="218" VAL_1_2="" /&gt;
    &lt;block id="1017" type="param__top&amp;amp;Goto Number (goto)[0]" x="10" y="134" w="243" SET="" /&gt;
    !!*/
    /*!!&lt;checksum&gt;f4c5181ff4aad5e31051bc479bd981d7&lt;/checksum&gt;!!*/</task>
       </button>
       <param expand="true" height="20" left="520" oid="goto" showlabel="false" top="280" width="80"/>
       <label height="20" left="520" name="Clip Number" style="txt-align:west" top="260" width="100"/>
       <label height="40" left="40" name="Message from server:" style="txt-align:west" top="400" width="180"/>
       <label height="140" id="message" left="40" style="txt-align:west;bg#darkdivider;" top="440" width="780"/>
       <button buttontype="push" height="40" left="40" name="Get Title" top="320" width="100">
          <task tasktype="ogscript">
    
    
    /*! block id=1018,1014,1015 !*/
    rosstalk.sendMessageWithResponse(params.getValue('vlchost', 0), params.getValue('vlcport', 0), "get_title\n", "\n", vlc_callback);
    /*!!
     &lt;block id="1018" type="ogscript_sendtcpstringwresponse" x="317" y="411" w="318" HOST="ID:1014" PORT="ID:1015" STRING="get_title\n" ENDOFMESSAGE="\n" CALLBACK="vlc_callback" /&gt;
    &lt;block id="1014" type="param__top&amp;amp;vlc host (vlchost)[0]" x="10" y="300" w="243" SET="" /&gt;
    &lt;block id="1015" type="param__top&amp;amp;vlc port (vlcport)[0]" x="10" y="392" w="243" SET="" /&gt;
    !!*/
    /*!!&lt;checksum&gt;d3fc2dabf594cf2665c2e0998f6d153c&lt;/checksum&gt;!!*/</task>
       </button>
       <button buttontype="push" height="40" left="160" name="Get Time" top="320" width="100">
          <task tasktype="ogscript">
    
    
    /*! block id=1018,1014,1015 !*/
    rosstalk.sendMessageWithResponse(params.getValue('vlchost', 0), params.getValue('vlcport', 0), "get_time\n", "\n", vlc_callback);
    /*!!
     &lt;block id="1018" type="ogscript_sendtcpstringwresponse" x="317" y="411" w="318" HOST="ID:1014" PORT="ID:1015" STRING="get_time\n" ENDOFMESSAGE="\n" CALLBACK="vlc_callback" /&gt;
    &lt;block id="1014" type="param__top&amp;amp;vlc host (vlchost)[0]" x="10" y="300" w="243" SET="" /&gt;
    &lt;block id="1015" type="param__top&amp;amp;vlc port (vlcport)[0]" x="10" y="392" w="243" SET="" /&gt;
    !!*/
    /*!!&lt;checksum&gt;4de803888b5a183ab544193b6a702794&lt;/checksum&gt;!!*/</task>
       </button>
       <button buttontype="push" height="40" left="280" name="Get Length" top="320" width="100">
          <task tasktype="ogscript">
    
    
    /*! block id=1018,1014,1015 !*/
    rosstalk.sendMessageWithResponse(params.getValue('vlchost', 0), params.getValue('vlcport', 0), "get_length\n", "\n", vlc_callback);
    /*!!
     &lt;block id="1018" type="ogscript_sendtcpstringwresponse" x="317" y="411" w="318" HOST="ID:1014" PORT="ID:1015" STRING="get_length\n" ENDOFMESSAGE="\n" CALLBACK="vlc_callback" /&gt;
    &lt;block id="1014" type="param__top&amp;amp;vlc host (vlchost)[0]" x="10" y="300" w="243" SET="" /&gt;
    &lt;block id="1015" type="param__top&amp;amp;vlc port (vlcport)[0]" x="10" y="392" w="243" SET="" /&gt;
    !!*/
    /*!!&lt;checksum&gt;0a47d7786cd31d7b1a9c1838b29be4eb&lt;/checksum&gt;!!*/</task>
       </button>
    
    </abs>
    

    VLC Level 3 - TCP Listener

    <?xml version="1.0" encoding="UTF-8"?><abs contexttype="opengear" gridsize="20" id="_top" keepalive="false">
       <label height="20" left="40" name="and update the constraints to show the playlist." style="txt-align:west" top="640" width="540"/>
       <timer autostart="false" id="Monitor" pattern="HH:mm:ss" rate="1000" start="00:00:00" stop="00:00:00">
          <timertask tasktype="ogscript">
    sendCommand("get_title");</timertask>
       </timer>
       <meta>
          <listener/>
          <params>
             <param access="1" constrainttype="STRUCT" name="message log template" oid="message_log_template" type="STRUCT" widget="table">
                <value>
                   <subparam access="1" maxlength="0" name="Time" suboid="time" type="STRING" value="First" widget="default"/>
                   <subparam access="1" maxlength="0" name="Message" suboid="message" type="STRING" value="Last" widget="default"/>
                </value>
             </param>
             <param access="1" constrainttype="INT_CHOICE" name="playlist" oid="playlist" precision="0" stateless="true" type="INT16" value="11" widget="list">
                <constraint key="0">1. Abstract - 12902.mov</constraint>
                <constraint key="1">2. American Football - 5375.mov</constraint>
                <constraint key="2">3. Atoms - 13232.mp4</constraint>
                <constraint key="3">4. Baboon - 17644.mp4</constraint>
                <constraint key="4">5. Baseball - 5077.mov</constraint>
                <constraint key="5">6. Baseball - 5614.mov</constraint>
                <constraint key="6">7. Basketball - 12609.mov</constraint>
                <constraint key="7">8. Basketball - 12610.mov</constraint>
                <constraint key="8">9. Basketball - 5064.mov</constraint>
                <constraint key="9">10. Basketball - 5083.mov</constraint>
                <constraint key="10">11. Basketball - 5368.mov</constraint>
                <constraint key="11">12. Casino - 14721.mp4</constraint>
                <constraint key="12">13. Countdown - 7374.mp4</constraint>
                <constraint key="13">14. Diamonds - 3125.mp4</constraint>
                <constraint key="14">15. Dj - 5180.mp4</constraint>
                <constraint key="15">16. Earth - 8947.avi</constraint>
                <constraint key="16">17. Flying Colored Cubes - 12065.mov</constraint>
                <constraint key="17">18. Golf Ball - 5379.mov</constraint>
                <constraint key="18">19. Graphic - 11722.mp4</constraint>
                <constraint key="19">20. Jellyfish - 10480.mp4</constraint>
                <constraint key="20">21. Kaleidoscope - 1155.mov</constraint>
                <constraint key="21">22. Montreal - 3149.mp4</constraint>
                <constraint key="22">23. Moon - 8897.mp4</constraint>
                <constraint key="23">24. Numbers - 10853.avi</constraint>
                <constraint key="24">25. Octagon - 5192.mp4</constraint>
                <constraint key="25">26. Particles - 7252.mov</constraint>
                <constraint key="26">27. Plasma Ball - 11414.avi</constraint>
                <constraint key="27">28. Racing Bike - 7251.mov</constraint>
                <constraint key="28">29. Snowy Trees - 7328.mp4</constraint>
                <constraint key="29">30. Soccer - 5076.mov</constraint>
                <constraint key="30">31. Soccer - 5264.mov</constraint>
                <constraint key="31">32. Sport - 5062.mov</constraint>
                <constraint key="32">33. Sport - 5091.mov</constraint>
                <constraint key="33">34. Star - 581.mov</constraint>
                <constraint key="34">35. Tennis - 5261.mov</constraint>
                <constraint key="35">36. Tennis - 5263.mov</constraint>
                <constraint key="36">37. Tennis - 5602.mov</constraint>
                <constraint key="37">38. Time - 6358.mp4</constraint>
                <constraint key="38">39. World - 1992.mov</constraint>
             </param>
             <param access="1" constrainttype="STRUCT" name="message log template" oid="message_log" templateoid="message_log_template" type="STRUCT_ARRAY" widget="table">
                <value>
                   <subparam suboid="time" value="0:00"/>
                   <subparam suboid="message" value="no messages"/>
                </value>
                <value>
                   <subparam suboid="time" value="12:12:44"/>
                   <subparam suboid="message" value="+----[ Playlist ]"/>
                </value>
                <value>
                   <subparam suboid="time" value="12:12:44"/>
                   <subparam suboid="message" value="|- Playlist"/>
                </value>
                <value>
                   <subparam suboid="time" value="12:12:44"/>
                   <subparam suboid="message" value="|  - big_buck_bunny_480p_stereo.ogg (09:56)"/>
                </value>
                <value>
                   <subparam suboid="time" value="12:12:44"/>
                   <subparam suboid="message" value="|- Media Library"/>
                </value>
                <value>
                   <subparam suboid="time" value="12:12:44"/>
                   <subparam suboid="message" value="+----[ End of playlist ]"/>
                </value>
                <value>
                   <subparam suboid="time" value="12:12:44"/>
                   <subparam suboid="message" value="playlist: returned 0 (no error)"/>
                </value>
                <value>
                   <subparam suboid="time" value="12:12:48"/>
                   <subparam suboid="message" value="goto: returned 0 (no error)"/>
                </value>
                <value>
                   <subparam suboid="time" value="12:12:51"/>
                   <subparam suboid="message" value="status change: ( new input: file:///C:/Users/rcrutwell/Videos/BBB/big_buck_bunny_480p_stereo.ogg )"/>
                </value>
                <value>
                   <subparam suboid="time" value="12:12:51"/>
                   <subparam suboid="message" value="status change: ( play state: 3 )"/>
                </value>
                <value>
                   <subparam suboid="time" value="12:12:51"/>
                   <subparam suboid="message" value="next: returned 0 (no error)"/>
                </value>
                <value>
                   <subparam suboid="time" value="12:14:31"/>
                   <subparam suboid="message" value="next: returned 0 (no error)"/>
                </value>
                <value>
                   <subparam suboid="time" value="12:14:33"/>
                   <subparam suboid="message" value="status change: ( stop state: 0 )"/>
                </value>
                <value>
                   <subparam suboid="time" value="12:14:33"/>
                   <subparam suboid="message" value="next: returned 0 (no error)"/>
                </value>
                <value>
                   <subparam suboid="time" value="12:14:36"/>
                   <subparam suboid="message" value="status change: ( new input: file:///C:/Users/rcrutwell/Videos/BBB/big_buck_bunny_480p_stereo.ogg )"/>
                </value>
                <value>
                   <subparam suboid="time" value="12:14:36"/>
                   <subparam suboid="message" value="status change: ( play state: 3 )"/>
                </value>
                <value>
                   <subparam suboid="time" value="12:14:36"/>
                   <subparam suboid="message" value="pause: returned 0 (no error)"/>
                </value>
                <value>
                   <subparam suboid="time" value="12:14:36"/>
                   <subparam suboid="message" value="status change: ( pause state: 3 ): Pause"/>
                </value>
                <value>
                   <subparam suboid="time" value="12:14:38"/>
                   <subparam suboid="message" value="status change: ( pause state: 4 )"/>
                </value>
                <value>
                   <subparam suboid="time" value="12:14:38"/>
                   <subparam suboid="message" value="Type 'pause' to continue."/>
                </value>
                <value>
                   <subparam suboid="time" value="12:14:38"/>
                   <subparam suboid="message" value="next: returned 0 (no error)"/>
                </value>
                <value>
                   <subparam suboid="time" value="12:14:39"/>
                   <subparam suboid="message" value="Type 'pause' to continue."/>
                </value>
                <value>
                   <subparam suboid="time" value="12:14:39"/>
                   <subparam suboid="message" value="prev: returned 0 (no error)"/>
                </value>
                <value>
                   <subparam suboid="time" value="12:14:39"/>
                   <subparam suboid="message" value="Type 'pause' to continue."/>
                </value>
                <value>
                   <subparam suboid="time" value="12:14:39"/>
                   <subparam suboid="message" value="next: returned 0 (no error)"/>
                </value>
                <value>
                   <subparam suboid="time" value="12:14:40"/>
                   <subparam suboid="message" value="pause: returned 0 (no error)"/>
                </value>
                <value>
                   <subparam suboid="time" value="12:14:40"/>
                   <subparam suboid="message" value="status change: ( play state: 2 ): Play"/>
                </value>
                <value>
                   <subparam suboid="time" value="12:14:44"/>
                   <subparam suboid="message" value="status change: ( play state: 3 )"/>
                </value>
                <value>
                   <subparam suboid="time" value="12:14:44"/>
                   <subparam suboid="message" value="pause: returned 0 (no error)"/>
                </value>
                <value>
                   <subparam suboid="time" value="12:14:44"/>
                   <subparam suboid="message" value="status change: ( pause state: 3 ): Pause"/>
                </value>
                <value>
                   <subparam suboid="time" value="13:20:43"/>
                   <subparam suboid="message" value="status change: ( play state: 2 ): Play"/>
                </value>
                <value>
                   <subparam suboid="time" value="13:20:43"/>
                   <subparam suboid="message" value="status change: ( audio volume: 256 )"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:41:12"/>
                   <subparam suboid="message" value="status change: ( stop state: 0 )"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:41:12"/>
                   <subparam suboid="message" value="next: returned 0 (no error)"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:41:15"/>
                   <subparam suboid="message" value="status change: ( new input: file:///C:/Users/rcrutwell/Videos/BBB/big_buck_bunny_480p_stereo.ogg )"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:41:15"/>
                   <subparam suboid="message" value="status change: ( play state: 3 )"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:41:15"/>
                   <subparam suboid="message" value="pause: returned 0 (no error)"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:41:15"/>
                   <subparam suboid="message" value="status change: ( pause state: 3 ): Pause"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:41:19"/>
                   <subparam suboid="message" value="status change: ( pause state: 4 )"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:41:19"/>
                   <subparam suboid="message" value="big_buck_bunny_480p_stereo.ogg"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:41:21"/>
                   <subparam suboid="message" value="Type 'pause' to continue."/>
                </value>
                <value>
                   <subparam suboid="time" value="15:41:21"/>
                   <subparam suboid="message" value="playlist: returned 0 (no error)"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:41:34"/>
                   <subparam suboid="message" value="2"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:41:35"/>
                   <subparam suboid="message" value="596"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:41:36"/>
                   <subparam suboid="message" value="2"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:41:58"/>
                   <subparam suboid="message" value="Type 'pause' to continue."/>
                </value>
                <value>
                   <subparam suboid="time" value="15:41:58"/>
                   <subparam suboid="message" value="prev: returned 0 (no error)"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:41:59"/>
                   <subparam suboid="message" value="Type 'pause' to continue."/>
                </value>
                <value>
                   <subparam suboid="time" value="15:41:59"/>
                   <subparam suboid="message" value="next: returned 0 (no error)"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:41:59"/>
                   <subparam suboid="message" value="Type 'pause' to continue."/>
                </value>
                <value>
                   <subparam suboid="time" value="15:41:59"/>
                   <subparam suboid="message" value="next: returned 0 (no error)"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:03"/>
                   <subparam suboid="message" value="pause: returned 0 (no error)"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:03"/>
                   <subparam suboid="message" value="status change: ( play state: 2 ): Play"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:03"/>
                   <subparam suboid="message" value="status change: ( time: 2s )"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:03"/>
                   <subparam suboid="message" value="status change: ( play state: 3 )"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:03"/>
                   <subparam suboid="message" value="next: returned 0 (no error)"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:05"/>
                   <subparam suboid="message" value="status change: ( stop state: 0 )"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:05"/>
                   <subparam suboid="message" value="pause: returned 0 (no error)"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:05"/>
                   <subparam suboid="message" value="status change: ( new input: file:///C:/Users/rcrutwell/Videos/BBB/big_buck_bunny_480p_stereo.ogg )"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:05"/>
                   <subparam suboid="message" value="status change: ( pause state: 4 )"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:05"/>
                   <subparam suboid="message" value="pause: returned 0 (no error)"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:05"/>
                   <subparam suboid="message" value="status change: ( play state: 2 ): Play"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:49"/>
                   <subparam suboid="message" value="status change: ( play state: 3 )"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:49"/>
                   <subparam suboid="message" value="44"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:49"/>
                   <subparam suboid="message" value="44"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:49"/>
                   <subparam suboid="message" value="44"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:49"/>
                   <subparam suboid="message" value="45"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:50"/>
                   <subparam suboid="message" value="45"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:50"/>
                   <subparam suboid="message" value="45"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:50"/>
                   <subparam suboid="message" value="45"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:50"/>
                   <subparam suboid="message" value="45"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:50"/>
                   <subparam suboid="message" value="46"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:51"/>
                   <subparam suboid="message" value="46"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:51"/>
                   <subparam suboid="message" value="46"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:51"/>
                   <subparam suboid="message" value="46"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:51"/>
                   <subparam suboid="message" value="46"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:52"/>
                   <subparam suboid="message" value="596"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:52"/>
                   <subparam suboid="message" value="596"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:42:52"/>
                   <subparam suboid="message" value="596"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:45:34"/>
                   <subparam suboid="message" value="+----[ Playlist ]"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:45:34"/>
                   <subparam suboid="message" value="|- Playlist"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:45:34"/>
                   <subparam suboid="message" value="|  - big_buck_bunny_480p_stereo.ogg (09:56)"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:45:34"/>
                   <subparam suboid="message" value="|- Media Library"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:45:34"/>
                   <subparam suboid="message" value="+----[ End of playlist ]"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:45:34"/>
                   <subparam suboid="message" value="playlist: returned 0 (no error)"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:45:39"/>
                   <subparam suboid="message" value="+----[ Playlist ]"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:45:39"/>
                   <subparam suboid="message" value="|- Playlist"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:45:39"/>
                   <subparam suboid="message" value="|  - big_buck_bunny_480p_stereo.ogg (09:56)"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:45:39"/>
                   <subparam suboid="message" value="|- Media Library"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:45:39"/>
                   <subparam suboid="message" value="+----[ End of playlist ]"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:45:39"/>
                   <subparam suboid="message" value="playlist: returned 0 (no error)"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:52:01"/>
                   <subparam suboid="message" value="status change: ( play state: 4 ): End"/>
                </value>
                <value>
                   <subparam suboid="time" value="15:52:01"/>
                   <subparam suboid="message" value="status change: ( play state: 4 ): End"/>
                </value>
                <value>
                   <subparam suboid="time" value="16:06:59"/>
                   <subparam suboid="message" value="status change: ( audio volume: 256 )"/>
                </value>
                <value>
                   <subparam suboid="time" value="16:07:06"/>
                   <subparam suboid="message" value="status change: ( audio volume: 256 )"/>
                </value>
                <value>
                   <subparam suboid="time" value="16:07:08"/>
                   <subparam suboid="message" value="status change: ( audio volume: 256 )"/>
                </value>
                <value>
                   <subparam suboid="time" value="16:07:08"/>
                   <subparam suboid="message" value="status change: ( audio volume: 256 )"/>
                </value>
                <value>
                   <subparam suboid="time" value="16:54:15"/>
                   <subparam suboid="message" value="status change: ( audio volume: 256 )"/>
                </value>
             </param>
             <param access="1" maxlength="0" name="vlc host" oid="vlchost" type="STRING" value="localhost" widget="default"/>
             <param access="1" constrainttype="INT_NULL" name="vlc port" oid="vlcport" precision="0" type="INT16" value="2235" widget="default"/>
             <param access="1" constraint="0.0;1000.0;0.0;1000.0;1" constrainttype="INT_STEP_RANGE" name="Goto Number" oid="goto" precision="0" stateless="true" type="INT16" value="14" widget="default"/>
             <param access="1" maxlength="0" name="title" oid="title" stateless="true" type="STRING" value="Soccer - 5264.mov" widget="default"/>
             <param access="1" maxlength="0" name="current_time" oid="current_time" stateless="true" type="STRING" value="0:01" widget="default"/>
             <param access="1" maxlength="0" name="clip_length" oid="clip_length" stateless="true" type="STRING" value="0:04" widget="default"/>
          </params>
          <listener autostart="true" connecthost="localhost" connectport="2235" delimitertype="newline" id="vlc">
             <task tasktype="ogscript">if (event.isConnectEvent())
    {
       ogscript.putObject("listener-connection", this);
    }
    else if (event.isMessageEvent())
    {
       
       var message = event.getBytesAsString()
       logMessage(message);   
       
       if (!message.startsWith("status change")) 
       {
          // ignore status changes;
          var lastCommand = ogscript.getObject("lastcommand");
       
          if (lastCommand == "get_title") {
             
             params.setValue("title", 0, message);
             ogscript.putObject("lastcommand", "");
             if (ogscript.getObject("monitorrunning") ==  true) {
                sendCommand("get_time");
             }
          }
    
          if (lastCommand == "get_time") {
             var time= parseInt(message);         
             var min = Math.floor(time / 60);
             var sec = time % 60;         
             var paddedSec = ("00" + sec).slice (-2);         
             var displaytime = min+":" +paddedSec;                  
             params.setValue("current_time", 0, displaytime);
             ogscript.putObject("lastcommand", "");
             if (ogscript.getObject("monitorrunning") ==  true) {
                sendCommand("get_length");
             }
          }
    
          
          if (lastCommand == "get_length") {
             var time= parseInt(message);         
             var min = Math.floor(time / 60);
             var sec = time % 60;         
             var paddedSec = ("00" + sec).slice (-2);         
             var displaytime = min+":" +paddedSec;                  
             params.setValue("clip_length", 0, displaytime);
             ogscript.putObject("lastcommand", "");
          }
    
          if (lastCommand == "playlist") {     
    
               if (message.includes("[ Playlist ]")) {
                  
                  var playlist = new Array();
                  ogscript.putObject("playlistArray", playlist);           
               }
    
    
    
              if (message.lastIndexOf("(") &gt; 0) {
                var item = message.substring(message.indexOf("-")+1, message.lastIndexOf("(")).trim();
                var playlist = ogscript.getObject("playlistArray");
                if (playlist != null) {
                  var end = playlist.length;
                  playlist[end] = (end + 1) + ". " + item;
                  ogscript.putObject("playlistArray", playlist);
                }
              }         
             
              if (message.includes("[ End of playlist ]")) {
                ogscript.putObject("lastcommand", "");      
                updateConstraints();
              }
          }
    
         
       }
    
       
    }
    else if (event.isDisconnectEvent())
    {
       var lObj = ogscript.getObject("listener-connection");
       if (lObj == this)
       {
          ogscript.putObject("listener-connection", null);      
       }
    }
    
    function updateConstraints() {   
       var songs = ogscript.getObject("playlistArray");
       var choiceConstraint = params.createIntChoiceConstraint(songs);
       params.replaceConstraint("playlist", choiceConstraint);
    }
    
    
    
    function logMessage(inmessage) {
    
      var today = new Date();
      var min = ("00" + today.getMinutes()).slice (-2);         
      ogscript.debug("min is " + min);
      var sec = ("00" + today.getSeconds()).slice (-2);         
      var time = today.getHours() + ":" + min + ":" + sec;
       
      var newmessage = {
        time: time,
        message: inmessage  
      };
    
      var count = params.getElementCount("message_log");
      var p = params.getParam("message_log",0);
      p.setValueAt(count, newmessage);
      
    }</task>
          </listener>
          <api>function sendCommand(command) {
       
       var listener = ogscript.getObject("listener-connection");
       if (listener != null)
       {    
         
         listener.writeString(command+"\n", false);
         ogscript.putObject("lastcommand", command);
       } 
    }</api>
          <ogscript handles="onclick" targetid="playlistID">if (event.getClickCount() &gt; 1) {
       sendCommand("goto " + (params.getValue("playlist",0) + 1));
    }</ogscript>
       </meta>
       <label height="60" left="40" name="VLC over TCP - Using Listener" style="txt-align:west;size:Bigger;" top="40" width="620"/>
       <label height="20" left="40" name="This panel users a listener to establish a connection to a VLC player.   " style="txt-align:west;" top="100" width="780"/>
       <label height="20" left="40" name="VLC Host:" style="txt-align:west;" top="180" width="120"/>
       <label height="20" left="40" name="VLC Port:" style="txt-align:west" top="220" width="140"/>
       <label height="20" left="40" name="For this to work, VLC has to be started with the following arguments: vlc.exe --extraintf rc --rc-host localhost:2235 " style="txt-align:west;" top="140" width="700"/>
       <button buttontype="push" height="60" left="320" name="Connect" top="180" width="140">
          <task tasktype="ogscript">var ip = params.getValue('address', 0);
    var port = params.getValue('port', 0);
    var listener = ogscript.getListenerById('vlc');
    
    
     
    
    if (!listener.isStarted())
    {   
       
       listener.start();
    }</task>
       </button>
       <param expand="true" height="20" left="120" oid="vlchost" showlabel="false" top="180" width="180"/>
       <param expand="true" height="20" left="120" oid="vlcport" showlabel="false" top="220" width="180"/>
       
       <button buttontype="push" height="40" left="40" name="Pause" top="280" width="100">
          <task tasktype="ogscript">sendCommand("pause");</task>
       </button>
       <button buttontype="push" height="40" left="180" name="Next" top="280" width="100">
          <task tasktype="ogscript">sendCommand("next");</task>
       </button>
       <button buttontype="push" height="40" left="300" name="Prev" top="280" width="100">
          <task tasktype="ogscript">sendCommand("prev");</task>
       </button>
       <button buttontype="push" height="40" left="440" name="Goto" top="280" width="100">
          <task tasktype="ogscript">sendCommand("goto " + params.getValue('goto', 0) + "\n");</task>
       </button>
       <param expand="true" height="20" left="480" oid="goto" showlabel="false" top="320" width="60"/>
       <label height="20" left="440" name="Clip" style="txt-align:west;" top="320" width="60"/>
       <button buttontype="push" height="40" left="40" name="Get Title" top="480" width="100">
          <task tasktype="ogscript">sendCommand("get_title");</task>
       </button>
       <button buttontype="push" height="40" left="340" name="Get Time" top="480" width="80">
          <task tasktype="ogscript">sendCommand("get_time");</task>
       </button>
       <button buttontype="push" height="40" left="440" name="Get Length" top="480" width="80">
          <task tasktype="ogscript">sendCommand("get_length");</task>
       </button>
       <param expand="true" height="760" left="1020" oid="messages" showlabel="false" top="60" width="560"/>
       <simplegrid height="380" left="700" top="420" width="540">
          <param expand="true" oid="message_log" showlabel="false"/>
       </simplegrid>
       <button buttontype="push" height="40" left="700" name="Clear" top="820" width="120">
          <task tasktype="ogscript">var newarray = new Array();
    newarray[0] = {time:"0:00", message:"no messages"};
    params.setAllValues("message_log", newarray);</task>
       </button>
       <button buttontype="push" height="40" left="300" name="Update Playlist" top="680" width="120">
          <task tasktype="ogscript">sendCommand("playlist");</task>
       </button>
       <param expand="true" height="40" left="40" oid="title" showlabel="false" top="440" width="280"/>
       <param expand="true" height="40" left="340" oid="current_time" showlabel="false" top="440" width="80"/>
       <param expand="true" height="40" left="440" oid="clip_length" showlabel="false" top="440" width="80"/>
       <abs height="180" left="40" scroll="true" top="680" width="240">
          <param bottom="0" expand="true" id="playlistID" left="0" oid="playlist" right="0" showlabel="false" top="0"/>
       </abs>
       <label height="20" left="300" name="Double Click to Play" style="txt-align:west" top="720" width="240"/>
       <button buttontype="push" height="40" left="40" name="Start Timer" top="540" width="120">
          <task tasktype="timercontrol">ogscript.getTimerManager().getTimer('Monitor').startTimer(false);
    ogscript.putObject("monitorrunning", true);
    ogscript.rename("monitor", "Monitor is running");</task>
       </button>
       <button buttontype="push" height="40" left="160" name="Stop Timer" top="540" width="120">
          <task tasktype="timercontrol">ogscript.getTimerManager().getTimer('Monitor').stopTimer(false);
    ogscript.putObject("monitorrunning", false);
    ogscript.rename("monitor", "Monitor is NOT running");</task>
       </button>
       <label height="20" id="monitor" left="300" style="txt-align:west" top="540" width="240"/>
       <label height="20" left="40" name="We can send commands to the VLC player through the listener, and when a message is received from the VLC player, we can parse it and do something with the information." style="txt-align:west" top="120" width="1060"/>
       <label height="20" left="40" name="The following buttons send messages through the listener: (the sendCommand function is in an API)" style="txt-align:west;" top="260" width="580"/>
       <label height="20" left="40" name="The following section send commands that have a one line response.   " style="txt-align:west;" top="360" width="580"/>
       <label height="20" left="40" name="When the response is sent, we parse it in the listener and update some parameters." style="txt-align:west" top="380" width="560"/>
       <label height="20" left="40" name="We also have a timer that can be run every second to request the data " style="txt-align:west" top="400" width="560"/>
       <label height="20" left="40" name="The following section sends a command that has multiple lines of response." style="txt-align:west" top="600" width="580"/>
       <label height="20" left="40" name="When the responses are sent, we parse them in the listener, " style="txt-align:west;" top="620" width="580"/>
    <label height="20" left="700" name="These are the messages we are receiving from the VLC player" style="txt-align:west" top="180" width="460"/>
    <ndi height="200" left="700" srcname="L-LONRCRUTWELL3 (VLC)" top="220" width="400"/>
    </abs>
    

    Setup with VLC:

    Download VLC from: 
    https://www.videolan.org/vlc/index.html
    
    
    Use these commands to start VLC:
    
    1.  cd "c:\Program Files (x86)\VideoLAN\VLC"
    2.  vlc.exe --extraintf rc --rc-host localhost:2235



    ------------------------------
    Richard Crutwell
    Ross Video UK
    ------------------------------