diff --git a/src/main/java/com/ardublock/translator/block/communication/PsnCallbackBlock.java b/src/main/java/com/ardublock/translator/block/communication/PsnCallbackBlock.java index 3cf613c51727e025fc6d0f2769fd3cf655294762..8c733a8dc9dcc47d1522a3bff11df77bd65f98a3 100644 --- a/src/main/java/com/ardublock/translator/block/communication/PsnCallbackBlock.java +++ b/src/main/java/com/ardublock/translator/block/communication/PsnCallbackBlock.java @@ -46,6 +46,27 @@ public class PsnCallbackBlock extends TranslatorBlock dataLenVar = tb_dataLenVar.toCode().replaceAll("\\s*_.new\\b\\s*", ""); if (tb_topicVar instanceof LocalVariableStringBlock && tb_topicLenVar instanceof LocalVariableNumberBlock && tb_dataVar instanceof LocalVariableStringBlock && tb_dataLenVar instanceof LocalVariableNumberBlock) { + translator.addDefinitionCommand("void " + callbackName + "(char*, int, char*, int);\n"); + ret += "void " + callbackName + "(char* "+ topicVar +", int "+ topicLenVar +", char* "+ dataVar +", int "+ dataLenVar +" ){\n"; + + while (tb_code != null) + { + ret += tb_code.toCode(); + tb_code = tb_code.nextTranslatorBlock(); + } + ret += "}\n\n"; + } + else{ + throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg.local_var_slot")); + } + + + return ret; + } +} + +/* + * if (tb_topicVar instanceof LocalVariableStringBlock && tb_topicLenVar instanceof LocalVariableNumberBlock && tb_dataVar instanceof LocalVariableStringBlock && tb_dataLenVar instanceof LocalVariableNumberBlock) { translator.addDefinitionCommand("void " + callbackName + "(char*, int, char*, int);\n"); ret += "void " + callbackName + "(char* _topic, int _topicLength, char* _data , int _dataLength ){\n"; ret += "char " + topicVar +"[_topicLength+1] = \"\";\n"; @@ -72,3 +93,4 @@ public class PsnCallbackBlock extends TranslatorBlock return ret; } } + * */ diff --git a/src/main/java/com/ardublock/translator/block/communication/PsnClientBlock.java b/src/main/java/com/ardublock/translator/block/communication/PsnClientBlock.java index f9908d605c5c6808295c44df48198239c0a5660a..61199585f4185054595148663a2af9e6376b3e53 100644 --- a/src/main/java/com/ardublock/translator/block/communication/PsnClientBlock.java +++ b/src/main/java/com/ardublock/translator/block/communication/PsnClientBlock.java @@ -16,10 +16,10 @@ public class PsnClientBlock extends TranslatorBlock public String toCode() throws SocketNullException, SubroutineNotDeclaredException { - String serialName = "psnSerial"; + String serialName = "sSerial"; String pubSubName = ""; String callbackName = ""; - String pubSubType = "simplePSNetClient"; + String pubSubType = "didacticPSNetClient"; TranslatorBlock psnName = this.getRequiredTranslatorBlockAtSocket(0);//Name @@ -30,16 +30,14 @@ public class PsnClientBlock extends TranslatorBlock pubSubName = psnName.toCode().replaceAll("\\s*_.new\\b\\s*\"", "").replaceAll("\"", ""); callbackName = cbName.toCode().replaceAll("\\s*_.new\\b\\s*\"", "").replaceAll("\"", ""); - translator.addHeaderFile("simplePSNet.h"); + translator.addHeaderFile("didacticNet.h"); translator.addHeaderFile("SoftwareSerial.h"); translator.addDefinitionCommand(pubSubType + " " +pubSubName+";\n"); translator.addDefinitionCommand("SoftwareSerial " + serialName+"(" + rxPin.toCode().replaceAll("\\s*_.new\\b\\s*", "") + ", "+ txPin.toCode().replaceAll("\\s*_.new\\b\\s*", "") +");\n"); translator.addSetupCommand(serialName+".begin(2400);"); - translator.addSetupCommand(pubSubName + ".setStream(" + serialName + ");\n"); - translator.addSetupCommand(pubSubName + ".setCallback(" + callbackName + ");\n"); - + translator.addSetupCommand(pubSubName + ".begin(" + serialName +", "+ callbackName +");\n"); return ""; } } diff --git a/src/main/java/com/ardublock/translator/block/communication/PsnPublishBlock.java b/src/main/java/com/ardublock/translator/block/communication/PsnPublishBlock.java index f257518091917ae7f0725cb9c3dc13809c88d654..409005796185c56d0ff686598875427f7e8e666d 100644 --- a/src/main/java/com/ardublock/translator/block/communication/PsnPublishBlock.java +++ b/src/main/java/com/ardublock/translator/block/communication/PsnPublishBlock.java @@ -33,6 +33,6 @@ public class PsnPublishBlock extends TranslatorBlock data = data.replaceAll("\"", ""); } - return name + ".publish("+topic+", strlen("+topic+"), "+data+", strlen("+data+"));"; + return name + ".publish("+topic+", "+data+");"; } } diff --git a/src/main/java/com/ardublock/translator/block/communication/PsnServerBlock.java b/src/main/java/com/ardublock/translator/block/communication/PsnServerBlock.java index f9baf388d53bf953c253f3810f3f1f0bba010b3b..4e2f95737321199205bfb80d8c90687a46ea099f 100644 --- a/src/main/java/com/ardublock/translator/block/communication/PsnServerBlock.java +++ b/src/main/java/com/ardublock/translator/block/communication/PsnServerBlock.java @@ -15,9 +15,9 @@ public class PsnServerBlock extends TranslatorBlock @Override public String toCode() throws SocketNullException, SubroutineNotDeclaredException { - String serialName = "psnSerial"; + String serialName = "sSerial"; String pubSubName = ""; - String pubSubType = "simplePSNetServer"; + String pubSubType = "didacticPSNetBroker"; TranslatorBlock psnName = this.getRequiredTranslatorBlockAtSocket(0);//Name TranslatorBlock rxPin = this.getRequiredTranslatorBlockAtSocket(1);//Pin Rx @@ -25,14 +25,14 @@ public class PsnServerBlock extends TranslatorBlock pubSubName = psnName.toCode().replaceAll("\\s*_.new\\b\\s*", "").replaceAll("\"", ""); - translator.addHeaderFile("simplePSNet.h"); + translator.addHeaderFile("didacticNet.h"); translator.addHeaderFile("SoftwareSerial.h"); translator.addDefinitionCommand(pubSubType + " " +pubSubName+";\n"); translator.addDefinitionCommand("SoftwareSerial " + serialName+"(" + rxPin.toCode().replaceAll("\\s*_.new\\b\\s*", "") + ", "+ txPin.toCode().replaceAll("\\s*_.new\\b\\s*", "") +");\n"); translator.addSetupCommand(serialName+".begin(2400);"); - translator.addSetupCommand(pubSubName + ".setStream(" + serialName + ");\n"); + translator.addSetupCommand(pubSubName + ".begin(" + serialName + ");\n"); return ""; } diff --git a/src/main/java/com/ardublock/translator/block/communication/PsnSubscribeBlock.java b/src/main/java/com/ardublock/translator/block/communication/PsnSubscribeBlock.java index e60193cb62c57e27173c6d226727fd9acdb3de17..5358773b3760dc46a7d20aad5dd568e7fcc9d595 100644 --- a/src/main/java/com/ardublock/translator/block/communication/PsnSubscribeBlock.java +++ b/src/main/java/com/ardublock/translator/block/communication/PsnSubscribeBlock.java @@ -26,6 +26,6 @@ public class PsnSubscribeBlock extends TranslatorBlock topic = topic.replaceAll("\"", ""); } - return name + ".subscribe("+topic+", strlen("+topic+"));"; + return name + ".subscribe("+topic+");"; } } diff --git a/src/main/java/com/ardublock/translator/block/communication/PsnUnsubscribeBlock.java b/src/main/java/com/ardublock/translator/block/communication/PsnUnsubscribeBlock.java new file mode 100644 index 0000000000000000000000000000000000000000..ea939ac5f1b104dee23822dcba324c664009dd15 --- /dev/null +++ b/src/main/java/com/ardublock/translator/block/communication/PsnUnsubscribeBlock.java @@ -0,0 +1,31 @@ +package com.ardublock.translator.block.communication; + +import com.ardublock.translator.Translator; +import com.ardublock.translator.block.TranslatorBlock; +import com.ardublock.translator.block.exception.SocketNullException; +import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; +import com.ardublock.translator.block.numbers.StringBlock; + +public class PsnUnsubscribeBlock extends TranslatorBlock +{ + public PsnUnsubscribeBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label) + { + super(blockId, translator, codePrefix, codeSuffix, label); + } + + @Override + public String toCode() throws SocketNullException, SubroutineNotDeclaredException + { + TranslatorBlock tb_name = getRequiredTranslatorBlockAtSocket(0); + TranslatorBlock tb_topic = getRequiredTranslatorBlockAtSocket(1); + + String name = tb_name.toCode().replaceAll("\\s*_.new\\b\\s*\"", "").replaceAll("\"", ""); + String topic = tb_topic.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + + if(!(tb_topic instanceof StringBlock)) { + topic = topic.replaceAll("\"", ""); + } + + return name + ".unsubscribe("+topic+");"; + } +} diff --git a/src/main/resources/com/ardublock/block/ardublock.properties b/src/main/resources/com/ardublock/block/ardublock.properties index 21c2e3e1257f80a226c97c10be989b3fad4d8dbe..1cfd35c4379796848023d6cec36fdd92ac0618cd 100644 --- a/src/main/resources/com/ardublock/block/ardublock.properties +++ b/src/main/resources/com/ardublock/block/ardublock.properties @@ -695,13 +695,14 @@ bg.tele_read_data_frame=read from Frame bg.mqtt_set_frame=set MQTT Frame bg.mqtt_read_frame=read MQTT Frame -bg.psn_server=PubSub Server +bg.psn_server=PubSub Broker bg.psn_client=PubSub Client -bg.psn_callback=PubSub_Callback +bg.psn_callback=psnClientCallback bg.psn_handle_network=PubSub handleNetwork bg.psn_data_to_send=PubSub isDataToSend? bg.psn_publish=PubSub publish bg.psn_subscribe=PubSub subscribe +bg.psn_unsubscribe=PubSub unsubscribe bg.serial_write.description=Send message via Serial @@ -737,6 +738,7 @@ bg.psn_handle_network.description=PubSub handleNetwork bg.psn_data_to_send.description=PubSub isDataToSend? bg.psn_publish.description=PubSub publish bg.psn_subscribe.description=PubSub subscribe +bg.psn_unsubscribe.description=PubSub unsubscribe bc.ps_name=name bc.callback=callback diff --git a/src/main/resources/com/ardublock/block/ardublock.xml b/src/main/resources/com/ardublock/block/ardublock.xml index f5f503f7d17642238e2eef70dec63ac158437804..0af77276a0f96d6558002754978379334575a0a5 100644 --- a/src/main/resources/com/ardublock/block/ardublock.xml +++ b/src/main/resources/com/ardublock/block/ardublock.xml @@ -1861,7 +1861,7 @@ </text> </description> <BlockConnectors> - <BlockConnector connector-type="string-list" connector-kind="plug" position-type="mirror" /> + <BlockConnector connector-type="string-inv" connector-kind="plug" position-type="mirror" /> </BlockConnectors> </BlockGenus> <BlockGenus name="local_variable_file" kind="data" initlabel="bg.local_variable_file" editable-label="yes" is-label-value="yes" color="174 0 72"> @@ -1871,7 +1871,7 @@ </text> </description> <BlockConnectors> - <BlockConnector connector-type="string-list" connector-kind="plug" position-type="mirror" /> + <BlockConnector connector-type="string-inv" connector-kind="plug" position-type="mirror" /> </BlockConnectors> </BlockGenus> @@ -2311,11 +2311,11 @@ <BlockGenus name="psn_server" kind="command" color="165 42 42" initlabel="bg.psn_server"> <description> - <text>create PubSub Server</text> + <text>create PubSub Broker</text> </description> <BlockConnectors> <BlockConnector connector-type="string" connector-kind="socket" label="bc.ps_name"> - <DefaultArg genus-name="string" label="PubSubServer" /> + <DefaultArg genus-name="string" label="psnBroker" /> </BlockConnector> <BlockConnector connector-type="number" connector-kind="socket" label="bc.rx_pin_number"> <DefaultArg genus-name="number" label="10" /> @@ -2331,7 +2331,7 @@ </description> <BlockConnectors> <BlockConnector connector-type="string" connector-kind="socket" label="bc.ps_name"> - <DefaultArg genus-name="string" label="PubSubClient" /> + <DefaultArg genus-name="string" label="psnClient" /> </BlockConnector> <BlockConnector connector-type="number" connector-kind="socket" label="bc.rx_pin_number"> <DefaultArg genus-name="number" label="10" /> @@ -2340,7 +2340,7 @@ <DefaultArg genus-name="number" label="11" /> </BlockConnector> <BlockConnector connector-type="string" connector-kind="socket" label="bc.callback"> - <DefaultArg genus-name="string" label="PubSub_Callback" /> + <DefaultArg genus-name="string" label="clientCallback" /> </BlockConnector> </BlockConnectors> </BlockGenus> @@ -2356,13 +2356,13 @@ <DefaultArg genus-name="local_variable_string" label="topic" /> </BlockConnector> <BlockConnector connector-type="number" connector-kind="socket" label="bc.topicLengthVar"> - <DefaultArg genus-name="local_variable_number" label="topic_length" /> + <DefaultArg genus-name="local_variable_number" label="topicLength" /> </BlockConnector> <BlockConnector connector-type="string" connector-kind="socket" label="bc.payloadVar"> <DefaultArg genus-name="local_variable_string" label="data" /> </BlockConnector> <BlockConnector connector-type="number" connector-kind="socket" label="bc.payloadLengthVar"> - <DefaultArg genus-name="local_variable_number" label="data_length" /> + <DefaultArg genus-name="local_variable_number" label="dataLength" /> </BlockConnector> <BlockConnector label="bc.commands" connector-type="cmd" connector-kind="socket" /> </BlockConnectors> @@ -2370,34 +2370,44 @@ <BlockGenus name="psn_handle_network" kind="command" color="165 42 42" initlabel="bg.psn_handle_network" > <BlockConnectors> <BlockConnector connector-type="string" connector-kind="socket" label="bc.ps_name"> - <DefaultArg genus-name="string" label="PubSubName" /> + <DefaultArg genus-name="string" label="psnName" /> </BlockConnector> </BlockConnectors> </BlockGenus> <BlockGenus name="psn_data_to_send" kind="command" color="165 42 42" initlabel="bg.psn_data_to_send" > <BlockConnectors> <BlockConnector connector-type="string" connector-kind="socket" label="bc.ps_name"> - <DefaultArg genus-name="string" label="PubSubName" /> + <DefaultArg genus-name="string" label="psnName" /> </BlockConnector> </BlockConnectors> </BlockGenus> <BlockGenus name="psn_subscribe" kind="command" color="165 42 42" initlabel="bg.psn_subscribe" > <BlockConnectors> <BlockConnector connector-type="string" connector-kind="socket" label="bc.ps_name"> - <DefaultArg genus-name="string" label="PubSubName" /> + <DefaultArg genus-name="string" label="psnName" /> </BlockConnector> <BlockConnector connector-type="string" connector-kind="socket" label="bc.topic"> - <DefaultArg genus-name="string" label="PubSubTopic" /> + <DefaultArg genus-name="string" label="subscribeTopic" /> + </BlockConnector> + </BlockConnectors> + </BlockGenus> + <BlockGenus name="psn_unsubscribe" kind="command" color="165 42 42" initlabel="bg.psn_unsubscribe" > + <BlockConnectors> + <BlockConnector connector-type="string" connector-kind="socket" label="bc.ps_name"> + <DefaultArg genus-name="string" label="psnName" /> + </BlockConnector> + <BlockConnector connector-type="string" connector-kind="socket" label="bc.topic"> + <DefaultArg genus-name="string" label="unsubscribeTopic" /> </BlockConnector> </BlockConnectors> </BlockGenus> <BlockGenus name="psn_publish" kind="command" color="165 42 42" initlabel="bg.psn_publish" > <BlockConnectors> <BlockConnector connector-type="string" connector-kind="socket" label="bc.ps_name"> - <DefaultArg genus-name="string" label="PubSubName" /> + <DefaultArg genus-name="string" label="psnName" /> </BlockConnector> <BlockConnector connector-type="string" connector-kind="socket" label="bc.topic"> - <DefaultArg genus-name="string" label="PubSubTopic" /> + <DefaultArg genus-name="string" label="publishTopic" /> </BlockConnector> <BlockConnector connector-type="string" connector-kind="socket" label="bc.payload"> </BlockConnector> @@ -3196,6 +3206,7 @@ <BlockGenusMember>psn_publish</BlockGenusMember> <BlockGenusMember>psn_data_to_send</BlockGenusMember> <BlockGenusMember>psn_subscribe</BlockGenusMember> + <BlockGenusMember>psn_unsubscribe</BlockGenusMember> <BlockGenusMember>psn_callback</BlockGenusMember> <!--<BlockGenusMember>tele_set_frame</BlockGenusMember> diff --git a/src/main/resources/com/ardublock/block/ardublock_de.properties b/src/main/resources/com/ardublock/block/ardublock_de.properties index 6e723da5d16ccddd4d22e34d801dcfe9319493f7..47e2f864ccc206aa4865562a71af756e7aec6bed 100644 --- a/src/main/resources/com/ardublock/block/ardublock_de.properties +++ b/src/main/resources/com/ardublock/block/ardublock_de.properties @@ -692,13 +692,14 @@ bg.tele_read_data_frame=lese Daten aus Frame bg.mqtt_set_frame=erstelle MQTT Frame bg.mqtt_read_frame=lese aus MQTT Frame -bg.psn_server=PubSub Server +bg.psn_server=PubSub Broker bg.psn_client=PubSub Client -bg.psn_callback=PubSub_Callback +bg.psn_callback=psnClientCallback bg.psn_handle_network=PubSub handleNetwork bg.psn_data_to_send=PubSub isDataToSend? bg.psn_publish=PubSub publish bg.psn_subscribe=PubSub subscribe +bg.psn_unsubscribe=PubSub unsubscribe bg.serial_write.description=Sende Nachricht via Serial bg.serial_print.description=Sende Nachricht via Serial @@ -726,13 +727,14 @@ bg.tele_read_data_frame.description=lese Daten aus dem Telegramm-Rahmen\n HINWEI bg.mqtt_set_frame.description=schreibe Daten in MQTT-Rahmen\n(letsgoING-IOT-Modul) bg.mqtt_read_frame.description=lese Daten aus MQTT-Rahmen\n(letsgoING-IOT-Modul) -bg.psn_server.description=PubSub Server -bg.psn_client.description=PubSub Client -bg.psn_callback.description=PubSub_Callback -bg.psn_handle_network.description=PubSub handleNetwork -bg.psn_data_to_send.description=PubSub isDataToSend? -bg.psn_publish.description=PubSub publish -bg.psn_subscribe.description=PubSub subscribe +bg.psn_server.description=Broker fuer PubSub Netzwerk erzeugen +bg.psn_client.description=Client fuer PubSub Netzwerk erzeugen +bg.psn_callback.description=Funktion wird automatisch aufgefufen wenn neue Daten empfangen werden +bg.psn_handle_network.description=Empfaengt Daten, ueberprueft ob gesendet werden kann und versendet Daten +bg.psn_data_to_send.description=Gibt zurück ob Daten zum Versenden bereit sind +bg.psn_publish.description=Daten zu Topic veroeffentlichen +bg.psn_subscribe.description=Topic abonnieren +bg.psn_unsubscribe.description=Topic nicht mehr abonnieren bc.ps_name=Name bc.callback=Uebergabefunktion diff --git a/src/main/resources/com/ardublock/block/block-mapping.properties b/src/main/resources/com/ardublock/block/block-mapping.properties index f644df699b4b3f7d7479c080a287c653c861826a..0bc2224d6c3f3839587ff20a88b546b789d2f51b 100644 --- a/src/main/resources/com/ardublock/block/block-mapping.properties +++ b/src/main/resources/com/ardublock/block/block-mapping.properties @@ -255,6 +255,7 @@ psn_handle_network=com.ardublock.translator.block.communication.PsnHandleNetBloc psn_data_to_send=com.ardublock.translator.block.communication.PsnDataToSendBlock psn_publish=com.ardublock.translator.block.communication.PsnPublishBlock psn_subscribe=com.ardublock.translator.block.communication.PsnSubscribeBlock +psn_unsubscribe=com.ardublock.translator.block.communication.PsnUnsubscribeBlock #STORAGE #****************************