<snapdata remixID="9709769"><project name="socket.io blocks" app="Snap! 6, https://snap.berkeley.edu" version="1"><notes></notes><thumbnail>data:image/png;base64,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</thumbnail><stage name="Stage" 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" hyperops="true" 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="Sprite" idx="1" x="0" y="0" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="80,80,80,1" pen="tip" id="8"><costumes><list struct="atomic" id="9"></list></costumes><sounds><list struct="atomic" id="10"></list></sounds><blocks></blocks><variables></variables><scripts><script x="470" y="217.3333333333335"><block s="receiveGo"></block><block s="doSetVar"><l>messages</l><block s="reportNewList"><list></list></block></block><custom-block s="install socket.io"></custom-block><custom-block s="connect to socket %txt"><l>https://socketio-chat.theprogrammer3.repl.co/</l></custom-block><custom-block s="when event %txt occurs do %upvar %cs"><l>message</l><l>data</l><script><block s="doAddToList"><block var="data"/><block var="messages"/></block></script></custom-block><block s="doForever"><script><block s="doAsk"><l></l></block><custom-block s="emit event %txt with data %s"><l>message</l><block s="getLastAnswer"></block></custom-block></script></block></script><script x="207" y="643.8333333333333"><custom-block s="LICENSE"></custom-block></script></scripts></sprite><watcher var="messages" style="normal" x="10" y="10" color="243,118,29" extX="456" extY="277"/></sprites></stage><hidden></hidden><headers></headers><code></code><blocks><block-definition s="install socket.io" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>if(typeof io !== "function") {&#xD;const ioScript = document.createElement(&apos;script&apos;);&#xD;ioScript.src = &apos;https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.3.1/socket.io.js&apos;;&#xD;document.head.appendChild(ioScript);&#xD;console.log(&apos;Socket.io was installed.&apos;);&#xD;}</l></block><list></list></block></script></block-definition><block-definition s="is socket.io installed" type="predicate" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return typeof io === "function"</l></block><list></list></block></block></script></block-definition><block-definition s="emit event %&apos;event&apos; with data %&apos;data&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%s"></input></inputs><script><block s="doIf"><custom-block s="is socket.io installed"></custom-block><script><block s="doRun"><block s="reportJSFunction"><list><l>event</l><l>data</l></list><l>socket.emit(event, data);</l></block><list><block var="event"/><block var="data"/></list></block></script></block></script></block-definition><block-definition s="when event %&apos;event&apos; occurs do %&apos;data&apos; %&apos;callback&apos;" type="command" category="other"><comment x="0" y="0" w="90" collapsed="false">Executes a callback whenever a event is smitted by the server. Turns JSON/object data to a 2d list. Do not rename the upvar or you will not be able to use the event data.</comment><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%upvar"></input><input type="%cs"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>event</l><l>callback</l><l>proc</l></list><l>socket.on(event, function(eventData) {&#xD;if(typeof eventData === "object") {&#xD;eventData = [];&#xD;Object.keys(eventData).forEach(item =&gt; {&#xD;eventData.push([item, eventData[item]])&#xD;});&#xD;}&#xD;proc.homeContext.variables.setVar(&apos;data&apos;,eventData);&#xD;proc.evaluate(callback, new List(), true);&#xD;});</l></block><list><block var="event"/><block var="callback"/></list></block></script></block-definition><block-definition s="connect to socket %&apos;socket URL&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><custom-block s="is socket.io installed"></custom-block><script><block s="doRun"><block s="reportJSFunction"><list><l>socketURL</l></list><l>window.socket = io(socketURL);</l></block><list><block var="socket URL"/></list></block></script></block></script></block-definition><block-definition s="LICENSE" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>alert(`Copyright 2020 programmer_user&#xD;&#xD;Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:&#xD;&#xD;The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.&#xD;&#xD;THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.&#xD;`)</l></block><list></list></block></script></block-definition></blocks><variables><variable name="messages"><list struct="atomic" id="128">Message: HELLLLLLLLLLLLLLLLLLLLLLo,Message: AAAAAAAAAAAAA,Message: AAAAAAAAAAAAA,Message: AAAAAAAAAA</list></variable></variables></project><media name="socket.io blocks" app="Snap! 6, https://snap.berkeley.edu" version="1"></media></snapdata>