<snapdata remixID="8152207"><project name="mqtt-test" app="Snap! 5.4, http://snap.berkeley.edu" version="1"><notes>MQTT test project with Snap!&#xD;&#xD;This is an advanced example showing connection to a broker.&#xD;&#xD;Quick start :&#xD;- hit the green flag&#xD;- click on the dot to connect (becomes green)&#xD;- hit arrow keys to send messages to your dot: it will move accordingly&#xD;- click again on the dot to disconnect&#xD;&#xD;When started, the project prepares the MQTT client. Then, click on the big dot on the stage. It will connect. &#xD;If you click a second time, it will disconnect.&#xD;&#xD;Now, if you use your arrows, the dot wil move accordingly. The dot is not directly commanded by the move actions, but by replying to received messages from the MQTT broker.&#xD;&#xD;If you have access to a different client, you can connect it to the same broker and publish the messages "right", "left", "up" or "down" to the topic "Hello" (attention: with capital H), the dot will move accordingly.&#xD;&#xD;You can load the project on two different computers running Snap!. When you hit the arrow keys on the first computer, the dot on the second computer will follow. &#xD;&#xD;Finally, don&apos;t forget to disconnect your client by clicking again on the dot.</notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAAFnElEQVR4Xu3cf2jUdRzH8fdtU5haEhTZzG23mmVYpFiLULIg0dwfxSYsKDYoaol/RLQfYVBB4n5IFKRtEfiDQEsHRdbC/phkEMNfUaMfW223KatICHNLcD8uvsKiRVvn3fd7r/t877m/7z7v7z0/j/tu9727ReLxeNz4oYCoQASAovKMvVwAgECQFgCgND/DAYgBaQEASvMzHIAYkBYAoDQ/wwGIAWkBAErzMxyAGJAWAKA0P8MBiAFpAQBK8zMcgBiQFgCgND/DAYgBaQEASvMzHIAYkBYAoDQ/wwGIAWkBAErzMxyAGJAWAKA0P8MBiAFpAQBK8zMcgBiQFgCgND/DAYgBaQEASvMzHIAYkBYAoDQ/wwGIAWkBAErzMxyAGJAWAKA0P8MBiAFpAQBK8zMcgBiQFgCgND/DAYgBaQEASvMzHIAYkBYAoDQ/wwGIAWkBAErzMxyAGJAWAKA0P8MBiAFpAQBK8zMcgBiQFgCgND/DswJg7PVX/nOni599CQHiAqEEOBrrtd8+OWS/d3Xa+RNfzJp44arVds0DD9l16ytsfnSpeDuyb3yoAI4M/GB99U/+L7qZttnDWNryji2I3pJ9EkSPOBQAJ+KTNtDcaGfbW33JuKS23qL12y0nkuPLeiwycwHnAV4c/NG+ee4x+/NUt6/7PG9lmd3+2ruWX3Szr+uy2PQCTgMcjfVZT80Guzj4UyD7ml90ky3f02nzi0sDWZ9FzZwF6J35vq5eHxi+KRwewjv2fsqZMKBni7MAT1beaxdOfhlQlunLLlhXbqvaP0rLrGwb4iTAgV3bbLD1xbTuVVHdqxbdvDWtM7NhmHMAvWt8x+/XXCa5u6vX5vH3oK/PC+cA9jbV2XD7Dl8jJLrY4to6K21oSfTm3C6BAk4B9F54dK/VviItO9rHC5IEYCV6E6cADr3VZP0tLyT62AK5XUn9dit8pjGQtbNxUacAnt60Jum32fzaXO/tuhUHj/m1XNav4xTAo9FIRmzY2oF4RhxHGA7CGYDnjnxgPU8/khHNvTOgdybkJ/UCzgD0PtMXe+Pl1B+xDyvc2rrbFlXW+LASSwAwCQMATCLaDHcBYBItAZhENAD6Fw2A/rV05gw48u1XdmLjCv8eeQorlXX1WX4xnxNMIeHfd3UGoHfEXIbxY8szaw2nAH73fLX92rFPWvD6impbtmOP9BjCNNwpgJnwVpz3paXFm54IkwHpY3EK4ER8wo6V5EmDrekft9xIrvQYwjTcKYBe+P7mRhtqa5bsQWFtg5U0NElmh3WocwC9j2SdevxBGzsTS+uezCkstpX7PuOjWD5Xdw6g9/iHPz5gvVse9TnF7MstfXO/FWysSuvMbBjmJEBvY3o2V9q5zo607NG1Gyps+a5DaZmVbUOcBei9IDld+7CNHDkc6J5dta7c7mz70HL5LwmBdHYWoFdjdGzUvt9SZRcCQujhu23n+5aflx9IfBZ1+IvpU5s3Pjl+GaHfv469X7vLdr7HJZeAnyVOnwH/2Wb48H6LtW61S0MDKSWbWxi14rptVlCe3hc5KR20w3cODUBvDy5NjtlwW6udPfC2jZ8ZvKJtyVtSZDdWPWUFtXU2N2fOFd2XGydfIFQApzLELW4/H9xtf3R/br907J21zqKKarv6nvvshsoai1hmfOck+e10756hBPjvbfAuXp8/Pv0/pS68azUXlTPAa1YAzIDOHMIMBQAIDWkBAErzMxyAGJAWAKA0P8MBiAFpAQBK8zMcgBiQFgCgND/DAYgBaQEASvMzHIAYkBYAoDQ/wwGIAWkBAErzMxyAGJAWAKA0P8MBiAFpAQBK8zMcgBiQFgCgND/DAYgBaQEASvMzHIAYkBYAoDQ/wwGIAWkBAErzMxyAGJAWAKA0P8MBiAFpAQBK8zMcgBiQFvgLrt7ct6240LwAAAAASUVORK5CYII=</thumbnail><stage name="Scène" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" codify="false" inheritance="true" sublistIDs="false" scheduled="false" id="1"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAOhUlEQVR4Xu3VwQkAAAjEMN1/abewn7jAQRC64wgQIECAAIF3gX1fNEiAAAECBAiMAHsCAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQIHLFxAWmhEwHPAAAAAElFTkSuQmCC</pentrails><costumes><list struct="atomic" id="2"></list></costumes><sounds><list struct="atomic" id="3"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites><sprite name="Lutin" idx="1" x="-60" y="-30" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="2" color="80,80,80,1" pen="tip" id="8"><costumes><list id="9"><item><costume name="on" center-x="52" center-y="52" image="data:image/png;base64,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" id="10"/></item><item><costume name="off" center-x="52" center-y="52" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAABoCAYAAAAdHLWhAAAFn0lEQVR4Xu2dS29bRRTH/+4jtYkfKqU8pFZK0gXsIbAe+AKsukStVBOaSiyQ6hJc0VDkWjWIBYJUaQRULLPhGzBbVGAPErSFsuAlwI8Q82iLruEax7n2nZk7d+6x7/HWM+f85/zmzJ25j5kMJugn53DPhlxxCxkbdlzYIC3UFpCwQFIGRgvQRu6IrG3fDgtonP+Ls7OP4MzW93H60LGdPKD1wgOy3v5JR7SrsuJc/iGc7vzoyl+Qn8QAuRq+bAU3qWHQOaBJAzMM2DUod4A2svOy1r1hq0cnaUdUswsod2+60BA/oPdQkK+j5aIxrn2IFcxiCb/H6Tc+QPeQkfO4G6d4KrbFTexBxs4abbhN8QBaKx2UjeYvVALoQoc4iwLOoGPbl31AV4uL8lLrum2hk2BPvFJ8Es+3PrWp1SqgSZ+h2QqszZmeNUAMZydeW5CiA9rEXlnB37Z63zTZEQ3sw3HcidKmaIA2MSMr+COKgGmvKxo4gOP407Sd5oDWcZ+sY8vUcZrqRVkvmQFK0RrHVkcyvSYZAeIJgRk2E0jagBiOGRy/li4kLUAMJxocr7ao5p9BufOxqiV1QFfyD8rLnR9UDXO50REQ1dmHUd5SiqUaIJ4UWO9vqjdYlQDx0GadT8+gyvUoHNBG6XFZa34Wj8R0WxUvlxbxwvjYhgLi7Im3E4Vl0VhADCdeOCpT79GA3ikckm+2f3YjMd1exj3sGwmIs8dtpxk11AUDWkdJ1vGbW4np9iYu4CBO7o55ICDOnmQ6S1AW7QbE2ZMMHW9ddAE5nER3UMAuQJw9ifEJXLwyoGR57PI+PMztAMTZQ4PWICQGRIPJDhXBgFaxT17DXwT1pk6SOIH9WP33Tal+BvHwRqsf+FnEgGhx6athQETBDN9A7WUQD280aXlZxIBosukvWhkQAyIcAeLSeIibBEA8QaBNKcOAGBDtCBBXxxnEgIhHgLg8ziAGRDwCxOVxBjEg4hEgLo8ziAERjwBxeZxBDIh4BIjL4wxiQMQjQFxeBqvYI69F25GJeBsnVp44gb38yJswPn6iShiOJ40BMSDiESAur59BeBsH5Fs7v+wirn3q5fk7NfK72URR87vZRMH4shgQYUDiXHYep7u3PIn8hR1BUPwJJEEog5JGAsL7+cPyYrJHghGPXezyxErhMJb+3yOJP8OPPeR6DsZ+hu+Z4leB9QJqu3QoIIZkO+Tq9tT26uEsUo+o5ZLKgDiLLEdewZzefnGcRQohtVtEGxBnkV0A46yN21h2/K6/7+aOyje2v3UnNX2eRDV3FOXt70a1nLdlTrhPRNqWuad9Hftl3fwEqYTbT9q9WMEMlsZvYBWaQb0WXsnOyctujkYmHVGL4sT57BxOdb8JM6kGiGd1YXHU/j9saPMNKgPiWZ02g5EVVOF4BrQA4QNk5WvYtic1fZbES8jiRfWTM/UAefHkIwOMe5U4XzyEUy2tM871AfVmdqVjst78ylhpCiuKSukYlps3dJtuBqgHqfiUrLc+0XWYxvJRDmE3B9SDVHhW1tsfpTHoqm0WK/mnsdSRquWHy0UD5Fm7WlyUl1rXTQVMcz1RLT2BcvPzKG2MDoivSYHxN73m2M8g3+JG7oisbd+O0lumpe7wix9R2mUng3wFH2JWvopOFEGTXldcRB7P2TuE3i6g/6Kb1hdPdO4QqHbEWAD1nK+VFmSj+bWqkEkuZ+t6ExSD+AB53lJwHsTgOQtxdLJ4AfmKp/AccJPbNiYA3QDyla0VHpWN9hcmQqnUEZXCY1huf+lKj1tAEwzKNRg/VMkA6q+dsvOy1tW+geiq93p+RDW7gHJyT5OTBeRHehMzsqL+jMQFIP8bURe+xvmgAWhQYYITClEp3Y/l5q9JQxn0Tw/QUHTiXvTGsbi0CZg8oKDGmkKjDiOorf8AsEWo/OAwJEgAAAAASUVORK5CYII=" id="11"/></item></list></costumes><sounds><list struct="atomic" id="12"></list></sounds><blocks></blocks><variables></variables><scripts><script x="10" y="10"><block s="receiveGo"></block><custom-block s="# %code"><l>Load library</l></custom-block><custom-block s="Load MQTT $flag"></custom-block><block s="doSetVar"><l>got message</l><l>0</l></block><custom-block s="# %code"><l>Instansiate a MQTT client&#xD;- change the broker address with your address&#xD;!!ATTENTION!!&#xD;**Codimeo MQTT broker** is offered with no warranty of service and can be&#xD;down at any time</l></custom-block><block s="doSetVar"><l>Client</l><custom-block s="MQTT new client for broker %s with options %s"><l>wss://mqtt.codimeo.com:15676/ws</l><custom-block s="JSON from %l"><block s="reportNewList"><list><block s="reportNewList"><list><l>username</l><l>mqtt-test</l></list></block><block s="reportNewList"><list><l>password</l><l>mqtt-test</l></list></block></list></block></custom-block></custom-block></block><custom-block s="# %code"><l>Connect the client</l></custom-block></script><script x="558" y="399"><block s="receiveCondition"><block s="reportEquals"><block var="got message"/><l>1</l></block></block><custom-block s="# %code"><l>When message received, execute it</l></custom-block><block s="doIf"><block s="reportEquals"><block var="T"/><l>Hello</l></block><script><block s="doIfElse"><block s="reportListContainsItem"><block s="reportNewList"><list><l>right</l><l>left</l><l>up</l><l>down</l></list></block><block var="M"/></block><script><block s="doIf"><block s="reportEquals"><block var="M"/><l>right</l></block><script><block s="changeXPosition"><l>10</l></block></script></block><block s="doIf"><block s="reportEquals"><block var="M"/><l>left</l></block><script><block s="changeXPosition"><l>-10</l></block></script></block><block s="doIf"><block s="reportEquals"><block var="M"/><l>up</l></block><script><block s="changeYPosition"><l>10</l></block></script></block><block s="doIf"><block s="reportEquals"><block var="M"/><l>down</l></block><script><block s="changeYPosition"><l>-10</l></block></script></block></script><script><block s="bubble"><block var="M"/></block></script></block></script></block><block s="doSetVar"><l>got message</l><l>0</l></block></script><script x="559" y="22.80000100000018"><block s="receiveKey"><l><option>left arrow</option></l></block><custom-block s="Publish %s on %txt for %s"><l>left</l><l>Hello</l><block var="Client"/></custom-block></script><script x="557" y="99.80000100000007"><block s="receiveKey"><l><option>right arrow</option></l></block><custom-block s="Publish %s on %txt for %s"><l>right</l><l>Hello</l><block var="Client"/></custom-block></script><script x="555" y="183.80000100000007"><block s="receiveKey"><l><option>up arrow</option></l></block><custom-block s="Publish %s on %txt for %s"><l>up</l><l>Hello</l><block var="Client"/></custom-block></script><script x="560" y="261.80000100000007"><block s="receiveKey"><l><option>down arrow</option></l></block><custom-block s="Publish %s on %txt for %s"><l>down</l><l>Hello</l><block var="Client"/></custom-block></script><script x="11" y="311"><block s="receiveInteraction"><l><option>clicked</option></l></block><block s="doIfElse"><custom-block s="%s is connected ?"><block var="Client"/></custom-block><script><custom-block s="End %s with force %b"><block var="Client"/><l/></custom-block><block s="doSwitchToCostume"><l>off</l></block><block s="bubble"><l></l></block><block s="doStopThis"><l><option>this script</option></l></block></script><script><custom-block s="Connect %s"><block var="Client"/></custom-block></script></block><custom-block s="# %code"><l>Handle events</l></custom-block><custom-block s="on %s %txt %cs with %upvar %upvar %upvar"><block var="Client"/><l>connect</l><script><block s="doSwitchToCostume"><l>on</l></block><custom-block s="# %code"><l>Subscribe to the desired topic</l></custom-block><custom-block s="Subscribe %s to %s"><block var="Client"/><l>Hello</l></custom-block><custom-block s="Publish %s on %txt for %s"><l>Welcome</l><l>Hello</l><block var="Client"/></custom-block></script><l>topic</l><l>message</l><l>payload</l></custom-block><custom-block s="on %s %txt %cs with %upvar %upvar %upvar"><block var="Client"/><l>message</l><script><block s="doSetVar"><l>T</l><block var="topic"/></block><block s="doSetVar"><l>M</l><block s="evaluate"><block s="reportJSFunction"><list><l>message</l></list><l>return message.toString()</l></block><list><block var="message"/></list></block></block><block s="doSetVar"><l>P</l><custom-block s="listify %s"><block s="evaluate"><block s="reportJSFunction"><list><l>p</l></list><l>return JSON.stringify(p)</l></block><list><block var="payload"/></list></block></custom-block></block><block s="doSetVar"><l>got message</l><l>1</l></block></script><l>topic</l><l>message</l><l>payload</l></custom-block><custom-block s="on %s %txt %cs with %upvar %upvar %upvar"><block var="Client"/><l>error</l><script><block s="doRun"><block s="reportJSFunction"><list><l>error</l></list><l>console.log(error);</l></block><list><block var="error"/></list></block></script><l>error</l><l>arg2</l><l>arg3</l></custom-block><custom-block s="on %s %txt %cs with %upvar %upvar %upvar"><block var="Client"/><l>reconnect</l><script><block s="doRun"><block s="reportJSFunction"><list></list><l>console.log("reconnection...");</l></block><list></list></block></script><l>arg1</l><l>arg2</l><l>arg3</l></custom-block><custom-block s="on %s %txt %cs with %upvar %upvar %upvar"><block var="Client"/><l>offline</l><script><block s="doRun"><block s="reportJSFunction"><list></list><l>console.log("client offline...");</l></block><list></list></block></script><l>arg1</l><l>arg2</l><l>arg3</l></custom-block></script></scripts></sprite><watcher var="T" style="normal" x="12" y="39.99999799999978" color="243,118,29" hidden="true"/><watcher var="M" style="normal" x="8" y="67.99999799999978" color="243,118,29" hidden="true"/><watcher var="P" style="normal" x="11" y="107.99999799999978" color="243,118,29" hidden="true"/><watcher var="Client" style="normal" x="0" y="0" color="243,118,29" hidden="true"/><watcher var="got message" style="normal" x="10" y="10" color="243,118,29" hidden="true"/></sprites></stage><hidden></hidden><headers></headers><code></code><blocks><block-definition s="Load MQTT $flag" type="command" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doIf"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return window.mqtt !== undefined</l></block><list></list></block><script><block s="doStopThis"><l><option>this block</option></l></block></script></block><block s="doDeclareVariables"><list><l>test</l></list></block><block s="doSetVar"><l>test</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>var mqttScript,&#xD;    done = false;&#xD;mqttScript = document.createElement(&apos;script&apos;),&#xD;mqttScript.onload = function () {&#xD;    done = true;&#xD;    console.log(&apos;MQTT is ready&apos;);&#xD;};&#xD;document.head.appendChild(mqttScript);&#xD;mqttScript.src = &apos;https://unpkg.com/mqtt/dist/mqtt.min.js&apos;;&#xD;return function () {return done; }</l></block><list></list></block></block><block s="doWaitUntil"><block s="evaluate"><block var="test"/><list></list></block></block></script></block-definition><block-definition s="MQTT new client for broker %&apos;url&apos; with options %&apos;opt&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s">broker<options>moquitto (ws)=ws://test.mosquitto.org:8080/mqtt&#xD;mosca (ws)=ws://test.mosca.io/&#xD;hivemq (ws)=ws://broker.hivemq.com:8000&#xD;mosca-localhost (ws)=ws://localhost:3000&#xD;codimeo MQTT ={&#xD;  ws=ws://mqtt.codimeo.com:15675/ws&#xD;  wss=wss://mqtt.codimeo.com:15676/ws&#xD;}</options></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>client</l><l>broker</l><l>options</l></list><comment w="90" collapsed="false">Class attributes</comment></block><block s="doSetVar"><l>broker</l><block var="url"/></block><block s="doSetVar"><l>client</l><l>null</l></block><block s="doSetVar"><l>options</l><block var="opt"/></block><block s="doDeclareVariables"><list><l>connect</l><l>onevent</l><l>subscribe</l><l>unsubscribe</l><l>publish</l><l>is_connected</l><l>log_client</l><l>log_parent_sprite</l><l>end</l></list><comment w="90" collapsed="false">Class methods</comment></block><block s="doSetVar"><l>connect</l><block s="reifyScript"><script><block s="doIfElse"><block s="reportEquals"><block var="client"/><l>null</l></block><script><block s="doSetVar"><l>client</l><block s="evaluate"><block s="reportJSFunction"><list><l>broker</l><l>client</l><l>options</l></list><l>console.log("Client is null")&#xD;console.log("Options : ")&#xD;console.log(JSON.stringify(options))&#xD;&#xD;if(!world.mqttClients) {&#xD;  world.mqttClients = []&#xD;}&#xD;&#xD;for(var i=0; i &lt; world.mqttClients.length; i++) {&#xD;  //First, ensure that all mqtt Clients are ended.&#xD;  //Otherwise, opended websocket will continue pinging&#xD;  world.mqttClients[i].end()&#xD;}&#xD;&#xD;// Then purge the clients&apos; list&#xD;world.mqttClients.splice(0)&#xD;&#xD;client = mqtt.connect(broker, options)&#xD;console.log("Created new client")&#xD;console.log(client.options.clientId)&#xD;&#xD;client.parent = this&#xD;options = client.options&#xD;&#xD;world.mqttClients.push(client)&#xD;return client</l></block><list><block var="broker"/><block var="client"/><block var="options"/></list></block></block></script><script><block s="doSetVar"><l>client</l><block s="evaluate"><block s="reportJSFunction"><list><l>broker</l><l>client</l><l>options</l></list><l>if(client.connected) {&#xD;  console.log("Client is connected yet")&#xD;  return&#xD;}&#xD;client = mqtt.connect(broker, options)&#xD;console.log("Created new client")&#xD;console.log(client.options.clientId)&#xD;return client</l></block><list><block var="broker"/><block var="client"/><block var="options"/></list></block></block></script></block></script><list></list></block></block><block s="doSetVar"><l>onevent</l><block s="reifyScript"><script><block s="doRun"><block s="reportJSFunction"><list><l>client</l><l>message</l><l>callback</l></list><l>client.on(message, function (t,m,p) {&#xD;  console.log("This client :" + this)&#xD;  console.log("Client&apos;s parent :" + this.parent)&#xD;  invoke(callback, new List([t, m, p]))&#xD;})</l></block><list><block var="client"/><block var="message"/><block var="callback"/></list></block></script><list><l>message</l><l>callback</l></list></block></block><block s="doSetVar"><l>subscribe</l><block s="reifyScript"><script><block s="doRun"><block s="reportJSFunction"><list><l>client</l><l>topic</l></list><l>client.subscribe(topic)&#xD;console.log("Subscribed to " + topic)</l></block><list><block var="client"/><block var="topic"/></list></block></script><list><l>topic</l></list></block></block><block s="doSetVar"><l>unsubscribe</l><block s="reifyScript"><script><block s="doRun"><block s="reportJSFunction"><list><l>client</l><l>topic</l></list><l>client.unsubscribe(topic)</l></block><list><block var="client"/><block var="topic"/></list></block></script><list><l>topic</l></list></block></block><block s="doSetVar"><l>publish</l><block s="reifyScript"><script><block s="doRun"><block s="reportJSFunction"><list><l>client</l><l>topic</l><l>message</l></list><l>client.publish(topic, message.toString(), function(err){&#xD;  if (err) {&#xD;    console.log("err : " + err)&#xD;  }&#xD;  else {&#xD;    console.log("Publish succeeded")&#xD;  }&#xD;})</l></block><list><block var="client"/><block var="topic"/><block var="message"/></list></block></script><list><l>topic</l><l>message</l></list></block></block><block s="doSetVar"><l>is_connected</l><block s="reifyScript"><script><block s="doIfElse"><block s="reportEquals"><block var="client"/><l>null</l></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>client</l></list><l>return client.connected</l></block><list><block var="client"/></list></block></block></script></block></script><list></list></block></block><block s="doSetVar"><l>log_client</l><block s="reifyScript"><script><block s="doRun"><block s="reportJSFunction"><list><l>client</l></list><l>console.log(client)</l></block><list><block var="client"/></list></block><block s="doReport"><block var="client"/></block></script><list></list></block></block><block s="doSetVar"><l>log_parent_sprite</l><block s="reifyScript"><script><block s="doRun"><block s="reportJSFunction"><list><l>client</l></list><l>console.log(client.parent)</l></block><list><block var="client"/></list></block></script><list></list></block></block><block s="doSetVar"><l>end</l><block s="reifyScript"><script><block s="doIfElse"><block s="reportNot"><block s="reportEquals"><block var="client"/><l>null</l></block></block><script><block s="doRun"><block s="reportJSFunction"><list><l>client</l><l>force</l></list><l>console.log(client.options.clientId + " is disconnecting...")&#xD;client.end(force)&#xD;world.mqttClients.splice(world.mqttClients.findIndex(function(c) {&#xD;  return client.options.clientId === c.options.clientId&#xD;}),1)</l></block><list><block var="client"/><block var="force"/></list></block><block s="doSetVar"><l>client</l><l>null</l></block></script><script><block s="doRun"><block s="reportJSFunction"><list><l>client</l></list><l>console.log("No client connected yet.")</l></block><list><block var="client"/></list></block></script></block></script><list><l>force</l></list></block></block><block s="doReport"><block s="reifyScript"><script><block s="doIf"><block s="reportEquals"><block var="message"/><l>connect</l></block><script><block s="doReport"><block var="connect"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="message"/><l>onevent</l></block><script><block s="doReport"><block var="onevent"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="message"/><l>subscribe</l></block><script><block s="doReport"><block var="subscribe"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="message"/><l>unsubscribe</l></block><script><block s="doReport"><block var="unsubscribe"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="message"/><l>publish</l></block><script><block s="doReport"><block var="publish"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="message"/><l>is_connected</l></block><script><block s="doReport"><block var="is_connected"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="message"/><l>log_client</l></block><script><block s="doReport"><block var="log_client"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="message"/><l>log_parent_sprite</l></block><script><block s="doReport"><block var="log_parent_sprite"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="message"/><l>end</l></block><script><block s="doReport"><block var="end"/></block></script></block><block s="doReport"><block s="reportJoinWords"><list><l></l><block var="message"/></list></block></block></script><list><l>message</l></list></block><comment w="90" collapsed="false">and the main body of the class</comment></block></script><scripts><script x="285" y="3347.0000000000086"><block s="doSetVar"><l>got message</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></scripts></block-definition><block-definition s="Connect %&apos;client&apos;" type="command" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s">mqtt-client</input></inputs><script><block s="doRun"><block s="evaluate"><block var="client"/><list><l>connect</l></list></block><list></list></block><block s="doWaitUntil"><block s="evaluate"><block var="client"/><list><l>is_connected</l></list></block></block></script></block-definition><block-definition s="End %&apos;client&apos; with force %&apos;force&apos;" type="command" category="sensing"><comment x="0" y="0" w="156" collapsed="false">End MQTT Client with force True or False. Default : False</comment><header></header><code></code><translations></translations><inputs><input type="%s">mqtt-client</input><input type="%b"></input></inputs><script><block s="doRun"><block s="evaluate"><block var="client"/><list><l>end</l></list></block><list><block var="force"/></list></block><block s="doWaitUntil"><block s="reportNot"><custom-block s="%s is connected ?"><block var="client"/></custom-block></block></block></script></block-definition><block-definition s="Publish %&apos;payload&apos; on %&apos;topic&apos; for %&apos;client&apos;" type="command" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s">message</input><input type="%txt">topic</input><input type="%s">mqtt-client</input></inputs><script><block s="doRun"><block s="evaluate"><block var="client"/><list><l>publish</l></list></block><list><block var="topic"/><block var="payload"/></list></block></script></block-definition><block-definition s="Subscribe %&apos;client&apos; to %&apos;topic&apos;" type="command" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s">mqtt client</input><input type="%s">topic</input></inputs><script><block s="doRun"><block s="evaluate"><block var="client"/><list><l>subscribe</l></list></block><list><block var="topic"/></list></block></script></block-definition><block-definition s="%&apos;client&apos; is connected ?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s">mqtt-client</input></inputs><script><block s="doRun"><block s="evaluate"><block var="client"/><list><l>is_connected</l></list></block><list></list></block></script></block-definition><block-definition s="JSON from %&apos;list&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>a</l><l>item</l><l>index</l></list></block><block s="doSetVar"><l>index</l><l>0</l></block><block s="doSetVar"><l>a</l><l>{</l></block><block s="doRepeat"><block s="reportListLength"><block var="list"/></block><script><block s="doChangeVar"><l>index</l><l>1</l></block><block s="doSetVar"><l>item</l><block s="reportListItem"><block var="index"/><block var="list"/></block></block><block s="doSetVar"><l>a</l><block s="reportJoinWords"><list><block var="a"/><l>"</l><block s="reportListItem"><l>1</l><block var="item"/></block><l>":"</l><block s="reportListItem"><l>2</l><block var="item"/></block><l>",</l></list></block></block></script></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>json</l></list><l>return JSON.parse(json)</l></block><list><block s="reportJoinWords"><list><block var="a"/><l>"end":"" }</l></list></block></list></block></block></script></block-definition><block-definition s="on %&apos;client&apos; %&apos;event&apos; %&apos;do&apos; with %&apos;arg1&apos; %&apos;arg2&apos; %&apos;arg3&apos;" type="command" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s">mqtt-client</input><input type="%txt">event</input><input type="%cs"></input><input type="%upvar"></input><input type="%upvar"></input><input type="%upvar"></input></inputs><script><block s="doRun"><block s="evaluate"><block var="client"/><list><l>onevent</l></list></block><list><block var="event"/><block s="reifyScript"><script><block s="doSetVar"><l>arg1</l><block var="#1"/></block><block s="doSetVar"><l>arg2</l><block var="#2"/></block><block s="doSetVar"><l>arg3</l><block var="#3"/></block><block s="doRun"><block var="do"/><list></list></block></script><list><l>#1</l><l>#2</l><l>#3</l></list></block></list></block></script><scripts><script x="20" y="295.00000399999993"><block s="doRun"><block s="reportJSFunction"><list><l>a1</l><l>a2</l><l>a3</l></list><l>console.log(this)&#xD;console.log(a1)&#xD;console.log(a2)&#xD;console.log(a3)</l></block><list><block var="arg1"/><block var="arg2"/><block var="arg3"/></list><comment w="207" collapsed="false">Do not remove this block. It may help to debug your callback</comment></block></script></scripts></block-definition><block-definition s="listify %&apos;jsonString&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>jsonString</l></list><l>return listify(JSON.parse(jsonString));&#xD;&#xD;function listify(jsonObject) {&#xD;  if (jsonObject instanceof Array) {&#xD;    return new List(jsonObject.map(function(eachElement) { return listify(eachElement)}));&#xD;  } else if (jsonObject instanceof Object) {&#xD;    return new List(Object.keys(jsonObject).map(function(eachKey) { return new List([eachKey,listify(jsonObject[eachKey])])} ))&#xD;  } else {&#xD;    return jsonObject&#xD;  }&#xD;}</l></block><list><block var="jsonString"/></list></block></block></script></block-definition><block-definition s="# %&apos;comment&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%code">your comment line here</input></inputs></block-definition></blocks><variables><variable name="T"><l>Hello</l></variable><variable name="M"><l>up</l></variable><variable name="P"><list id="909"><item><list struct="atomic" id="910">cmd,publish</list></item><item><list id="911"><item><l>retain</l></item><item><bool>false</bool></item></list></item><item><list struct="atomic" id="912">qos,0</list></item><item><list id="913"><item><l>dup</l></item><item><bool>false</bool></item></list></item><item><list struct="atomic" id="914">length,9</list></item><item><list struct="atomic" id="915">topic,Hello</list></item><item><list id="916"><item><l>payload</l></item><item><list id="917"><item><list struct="atomic" id="918">type,Buffer</list></item><item><list id="919"><item><l>data</l></item><item><list struct="atomic" id="920">117,112</list></item></list></item></list></item></list></item></list></variable><variable name="Client"><context id="921"><inputs><input>message</input></inputs><variables></variables><script><block s="doIf"><block s="reportEquals"><block var="message"/><l>connect</l></block><script><block s="doReport"><block var="connect"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="message"/><l>onevent</l></block><script><block s="doReport"><block var="onevent"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="message"/><l>subscribe</l></block><script><block s="doReport"><block var="subscribe"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="message"/><l>unsubscribe</l></block><script><block s="doReport"><block var="unsubscribe"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="message"/><l>publish</l></block><script><block s="doReport"><block var="publish"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="message"/><l>is_connected</l></block><script><block s="doReport"><block var="is_connected"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="message"/><l>log_client</l></block><script><block s="doReport"><block var="log_client"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="message"/><l>log_parent_sprite</l></block><script><block s="doReport"><block var="log_parent_sprite"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="message"/><l>end</l></block><script><block s="doReport"><block var="end"/></block></script></block><block s="doReport"><block s="reportJoinWords"><list><l></l><block var="message"/></list></block></block></script><receiver><ref id="8"></ref></receiver><origin><ref id="8"></ref></origin><context id="1012"><inputs></inputs><variables><variable name="url"><l>wss://mqtt.codimeo.com:15676/ws</l></variable><variable name="opt"></variable><variable name="client"><l>null</l></variable><variable name="broker"><l>wss://mqtt.codimeo.com:15676/ws</l></variable><variable name="options"></variable><variable name="connect"><context id="1014"><inputs></inputs><variables></variables><script><block s="doIfElse"><block s="reportEquals"><block var="client"/><l>null</l></block><script><block s="doSetVar"><l>client</l><block s="evaluate"><block s="reportJSFunction"><list><l>broker</l><l>client</l><l>options</l></list><l>console.log("Client is null")&#xD;console.log("Options : ")&#xD;console.log(JSON.stringify(options))&#xD;&#xD;if(!world.mqttClients) {&#xD;  world.mqttClients = []&#xD;}&#xD;&#xD;for(var i=0; i &lt; world.mqttClients.length; i++) {&#xD;  //First, ensure that all mqtt Clients are ended.&#xD;  //Otherwise, opended websocket will continue pinging&#xD;  world.mqttClients[i].end()&#xD;}&#xD;&#xD;// Then purge the clients&apos; list&#xD;world.mqttClients.splice(0)&#xD;&#xD;client = mqtt.connect(broker, options)&#xD;console.log("Created new client")&#xD;console.log(client.options.clientId)&#xD;&#xD;client.parent = this&#xD;options = client.options&#xD;&#xD;world.mqttClients.push(client)&#xD;return client</l></block><list><block var="broker"/><block var="client"/><block var="options"/></list></block></block></script><script><block s="doSetVar"><l>client</l><block s="evaluate"><block s="reportJSFunction"><list><l>broker</l><l>client</l><l>options</l></list><l>if(client.connected) {&#xD;  console.log("Client is connected yet")&#xD;  return&#xD;}&#xD;client = mqtt.connect(broker, options)&#xD;console.log("Created new client")&#xD;console.log(client.options.clientId)&#xD;return client</l></block><list><block var="broker"/><block var="client"/><block var="options"/></list></block></block></script></block></script><receiver><ref id="8"></ref></receiver><origin><ref id="8"></ref></origin><ref id="1012"></ref></context></variable><variable name="onevent"><context id="1060"><inputs><input>message</input><input>callback</input></inputs><variables></variables><script><block s="doRun"><block s="reportJSFunction"><list><l>client</l><l>message</l><l>callback</l></list><l>client.on(message, function (t,m,p) {&#xD;  console.log("This client :" + this)&#xD;  console.log("Client&apos;s parent :" + this.parent)&#xD;  invoke(callback, new List([t, m, p]))&#xD;})</l></block><list><block var="client"/><block var="message"/><block var="callback"/></list></block></script><receiver><ref id="8"></ref></receiver><origin><ref id="8"></ref></origin><ref id="1012"></ref></context></variable><variable name="subscribe"><context id="1077"><inputs><input>topic</input></inputs><variables></variables><script><block s="doRun"><block s="reportJSFunction"><list><l>client</l><l>topic</l></list><l>client.subscribe(topic)&#xD;console.log("Subscribed to " + topic)</l></block><list><block var="client"/><block var="topic"/></list></block></script><receiver><ref id="8"></ref></receiver><origin><ref id="8"></ref></origin><ref id="1012"></ref></context></variable><variable name="unsubscribe"><context id="1092"><inputs><input>topic</input></inputs><variables></variables><script><block s="doRun"><block s="reportJSFunction"><list><l>client</l><l>topic</l></list><l>client.unsubscribe(topic)</l></block><list><block var="client"/><block var="topic"/></list></block></script><receiver><ref id="8"></ref></receiver><origin><ref id="8"></ref></origin><ref id="1012"></ref></context></variable><variable name="publish"><context id="1107"><inputs><input>topic</input><input>message</input></inputs><variables></variables><script><block s="doRun"><block s="reportJSFunction"><list><l>client</l><l>topic</l><l>message</l></list><l>client.publish(topic, message.toString(), function(err){&#xD;  if (err) {&#xD;    console.log("err : " + err)&#xD;  }&#xD;  else {&#xD;    console.log("Publish succeeded")&#xD;  }&#xD;})</l></block><list><block var="client"/><block var="topic"/><block var="message"/></list></block></script><receiver><ref id="8"></ref></receiver><origin><ref id="8"></ref></origin><ref id="1012"></ref></context></variable><variable name="is_connected"><context id="1124"><inputs></inputs><variables></variables><script><block s="doIfElse"><block s="reportEquals"><block var="client"/><l>null</l></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>client</l></list><l>return client.connected</l></block><list><block var="client"/></list></block></block></script></block></script><receiver><ref id="8"></ref></receiver><origin><ref id="8"></ref></origin><ref id="1012"></ref></context></variable><variable name="log_client"><context id="1152"><inputs></inputs><variables></variables><script><block s="doRun"><block s="reportJSFunction"><list><l>client</l></list><l>console.log(client)</l></block><list><block var="client"/></list></block><block s="doReport"><block var="client"/></block></script><receiver><ref id="8"></ref></receiver><origin><ref id="8"></ref></origin><ref id="1012"></ref></context></variable><variable name="log_parent_sprite"><context id="1167"><inputs></inputs><variables></variables><script><block s="doRun"><block s="reportJSFunction"><list><l>client</l></list><l>console.log(client.parent)</l></block><list><block var="client"/></list></block></script><receiver><ref id="8"></ref></receiver><origin><ref id="8"></ref></origin><ref id="1012"></ref></context></variable><variable name="end"><context id="1180"><inputs><input>force</input></inputs><variables></variables><script><block s="doIfElse"><block s="reportNot"><block s="reportEquals"><block var="client"/><l>null</l></block></block><script><block s="doRun"><block s="reportJSFunction"><list><l>client</l><l>force</l></list><l>console.log(client.options.clientId + " is disconnecting...")&#xD;client.end(force)&#xD;world.mqttClients.splice(world.mqttClients.findIndex(function(c) {&#xD;  return client.options.clientId === c.options.clientId&#xD;}),1)</l></block><list><block var="client"/><block var="force"/></list></block><block s="doSetVar"><l>client</l><l>null</l></block></script><script><block s="doRun"><block s="reportJSFunction"><list><l>client</l></list><l>console.log("No client connected yet.")</l></block><list><block var="client"/></list></block></script></block></script><receiver><ref id="8"></ref></receiver><origin><ref id="8"></ref></origin><ref id="1012"></ref></context></variable></variables><receiver><ref id="8"></ref></receiver><origin></origin></context></context></variable><variable name="got message"><l>0</l></variable></variables></project><media name="mqtt-test" app="Snap! 5.4, http://snap.berkeley.edu" version="1"></media></snapdata>