Hi Simon
The key to this is to select "Stop all receive/task execution on pause" for the listener and use ogscript.createMessageParser(this.getInputStream()) inside of your listener's code. This will allow you to read directly from the wire instead of waiting for messages to be complete:
<abs contexttype="opengear" gridsize="20" id="_top">
<meta>
<params>
<param access="1" maxlength="0" name="Message Type 1" oid="Message_Type_1" type="STRING" value="Test 1" widget="text"/>
<param access="1" maxlength="0" name="Message Type 2" oid="Message_Type_2" type="STRING" value="Test 2" widget="text"/>
</params>
<api>function sendMessageToListener(type, message)
{
var mb = ogscript.createMessageBuilder();
mb.writeShort(type);
mb.writeShort(message.length);
mb.writeString(message);
rosstalk.sendBytes('localhost', 2244, mb.toByteArray(), null);
}
</api>
<listener autostart="true" blockingpause="true" delimiter="2" delimitertype="fixedlen" listenport="2244">
<task tasktype="ogscript">if (event.isMessageEvent())
{
var cmdTypeBytes = event.getBytes();
var commandType = cmdTypeBytes[0] << 8 | cmdTypeBytes[1];
var messageParser = ogscript.createMessageParser(this.getInputStream());
var length = messageParser.readShort();
var string = messageParser.readString(length);
ogscript.rename('output', 'TYPE: ' + commandType + ' MESSAGE: ' + string);
}</task>
</listener>
</meta>
<param expand="true" height="40" left="80" oid="Message_Type_1" top="40" width="320"/>
<param expand="true" height="40" left="80" oid="Message_Type_2" top="100" width="320"/>
<button buttontype="push" height="40" left="400" name="Go" top="40" width="60">
<task tasktype="ogscript">sendMessageToListener(1, params.getValue('Message_Type_1', 0));
</task>
</button>
<button buttontype="push" height="40" left="400" name="Go" top="100" width="60">
<task tasktype="ogscript">sendMessageToListener(2, params.getValue('Message_Type_2', 0));
</task>
</button>
<label height="60" id="output" left="0" style="txt-align:west" top="140" width="1340"/>
</abs>
#DashBoard