diff --git a/.crossbar/node.pid b/.crossbar/node.pid
new file mode 100644
index 0000000..fd148b5
--- /dev/null
+++ b/.crossbar/node.pid
@@ -0,0 +1,16 @@
+{
+ "pid": 3487,
+ "options": {
+ "loglevel": "info",
+ "logdir": null,
+ "config": "/mnt/Data-Partition/Develop/GitRepository/GitHub/MDSLab/iotronic/.crossbar/config.json",
+ "cbdir": "/mnt/Data-Partition/Develop/GitRepository/GitHub/MDSLab/iotronic/.crossbar",
+ "command": "start",
+ "reactor": null,
+ "debug": false
+ },
+ "argv": [
+ "/mnt/Data-Partition/IoT-Communication/pypy-2.4.0-linux/bin/crossbar",
+ "start"
+ ]
+}
diff --git a/LICENSE b/LICENSE
index 42eace7..e06d208 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,21 +1,202 @@
-The MIT License (MIT)
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
-Copyright (c) 2014 Andrea Rocco Lotronto
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-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:
+ 1. Definitions.
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
-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.
\ No newline at end of file
diff --git a/lib/clients_wamp_rw.py b/lib/clients_wamp_rw.py
new file mode 100644
index 0000000..766c069
--- /dev/null
+++ b/lib/clients_wamp_rw.py
@@ -0,0 +1,163 @@
+#########################################################################################
+##
+## The MIT License (MIT)
+##
+## Copyright (c) 2014 Andrea Rocco Lotronto
+##
+## 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:
+##
+## The above copyright notice and this permission notice shall be included in all
+## copies or substantial portions of the Software.
+##
+## 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.
+########################################################################################
+
+from autobahn.twisted.wamp import ApplicationSession
+from autobahn.twisted.wamp import ApplicationSessionFactory
+
+from autobahn.twisted.websocket import WampWebSocketClientFactory
+
+from autobahn.wamp.types import ComponentConfig
+
+from twisted.internet.defer import inlineCallbacks
+from twisted.internet import reactor
+from twisted.internet.endpoints import clientFromString
+from twisted.python import log
+
+import threading
+import time
+import sys
+log.startLogging(sys.stdout)
+
+
+##Global Variable for saving client writer session
+sessio_writer=None
+
+
+## WAMP Application Class for Writer Client ##
+class AutobahnClientWriter(ApplicationSession):
+
+ @inlineCallbacks
+ def onJoin(self, details):
+
+ global sessio_writer
+ sessio_writer = self
+ yield log.msg('Client Writer Connected')
+######################################################
+
+## WAMP Application Class for Reader Client ##
+class AutobahnClientReader(ApplicationSession):
+
+ @inlineCallbacks
+ def onJoin(self, details):
+
+ log.msg('Client Reader Connected')
+
+ self.topic_reader = self.config.extra['topicReader']
+
+ def onMessage(*args):
+ #DEBUG Message
+ log.msg('I receives',args)
+ ##New Class Parser for MSG
+
+ try:
+ yield self.subscribe(onMessage, self.topic_reader)
+ print ("Subscribed to topic: "+self.topic_reader)
+
+ except Exception as e:
+ print("could not subscribe to topic:" +self.topic_reader)
+######################################################
+
+## Principal class for inizialating and starting clients WAMP
+class WampClient():
+
+ def __init__(self, topicRead='board.connection'):#Sistemare
+
+ self._topicRead = None
+ self._debug = False
+ self._debug_wamp = False
+ self._debug_app = False
+
+ self._factoryWriter = None
+ self._factoryReader = None
+
+ self._realm = None
+ self._url = None
+
+ self._extra = {'topicReader': topicRead}
+
+ def connect(self, ip, port, realm):
+
+ self._realm = realm
+ self._url = 'ws://'+ip+':'+'/ws'
+ self._reactor_thread = None
+
+ self._session_factoryWriter = None
+ self._session_factoryReader = None
+
+ cfgReader = ComponentConfig(self._realm, self._extra)
+ cfgWriter = ComponentConfig(self._realm, self._extra)
+
+ self._session_factoryReader = ApplicationSessionFactory(cfgReader)
+ self._session_factoryReader.session = AutobahnClientReader
+
+ self._session_factoryWriter = ApplicationSessionFactory(cfgWriter)
+ self._session_factoryWriter.session = AutobahnClientWriter
+
+
+ self._factoryReader = WampWebSocketClientFactory(self._session_factoryReader, url = self._url,
+ debug = self._debug, debug_wamp = self._debug_wamp)
+
+ self._factoryWriter = WampWebSocketClientFactory(self._session_factoryWriter, url = self._url,
+ debug = self._debug, debug_wamp = self._debug_wamp)
+
+ self._reactor_thread = threading.Thread(target=reactor.run, args=(False,))
+ self._reactor_thread.daemon = True
+
+ endpoint_descriptor = 'tcp:'+ip+':'+port
+
+ self._clientReader = clientFromString(reactor, endpoint_descriptor)
+ self._clientReader.connect(self._factoryReader)
+
+ self._clientWriter = clientFromString(reactor, endpoint_descriptor)
+ self._clientWriter.connect(self._factoryWriter)
+
+ self._reactor_thread.start()
+
+ return self
+##################################################################################
+
+
+## Utility Class to wite on a specific topic ##
+def writeToTopic(topic, message):
+ global sessio_writer
+ sessio_writer.publish(topic,message)
+#######################################################
+
+#####Config paramiters####
+ipWamp = '172.17.3.139'
+portWamp ='8181'
+realmWAMP = 's4t'
+##Topic Scrittura; Msg
+##########################
+
+
+if __name__ == '__main__':
+
+ client = WampClient()
+ test = client.connect(ipWamp, portWamp, realmWAMP)
+
+ while True:
+ time.sleep(2)
+ writeToTopic('board.connection', 'MEEEEEEEEEEEEEE')
diff --git a/lib/s4t_reader.pyc b/lib/s4t_reader.pyc
new file mode 100644
index 0000000..06ebaac
Binary files /dev/null and b/lib/s4t_reader.pyc differ
diff --git a/lib/s4t_writer.pyc b/lib/s4t_writer.pyc
new file mode 100644
index 0000000..4dd60f2
Binary files /dev/null and b/lib/s4t_writer.pyc differ
diff --git a/s4t-server-python/test_autobahn_wamp_client.py b/lib/test_autobahn_wamp_client.py
similarity index 100%
rename from s4t-server-python/test_autobahn_wamp_client.py
rename to lib/test_autobahn_wamp_client.py
diff --git a/s4t-server-python/test_autobahn_ws_client.py b/lib/test_autobahn_ws_client.py
similarity index 100%
rename from s4t-server-python/test_autobahn_ws_client.py
rename to lib/test_autobahn_ws_client.py
diff --git a/s4t-server-python/test_autobahn_ws_server.py b/lib/test_autobahn_ws_server.py
similarity index 100%
rename from s4t-server-python/test_autobahn_ws_server.py
rename to lib/test_autobahn_ws_server.py
diff --git a/s4t-server-python/test_c.py b/lib/test_c.py
similarity index 100%
rename from s4t-server-python/test_c.py
rename to lib/test_c.py
diff --git a/s4t-server-python/test_pub.py b/lib/test_pub.py
similarity index 100%
rename from s4t-server-python/test_pub.py
rename to lib/test_pub.py
diff --git a/s4t-server-node/bin/server b/s4t-server-node/bin/server
deleted file mode 100755
index 232b679..0000000
--- a/s4t-server-node/bin/server
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env node
-
-/*
-The MIT License (MIT)
-
-Copyright (c) 2014 Andrea Rocco Lotronto
-
-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:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-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.
-*/
-
-var s4t = require("../lib/s4t_WS");
-
-var server = new s4t.server
-
-server.start(8888,'ws://212.189.207.109:8181/ws');
\ No newline at end of file
diff --git a/s4t-server-node/index.js b/s4t-server-node/index.js
deleted file mode 100644
index d904a97..0000000
--- a/s4t-server-node/index.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-The MIT License (MIT)
-
-Copyright (c) 2014 Andrea Rocco Lotronto
-
-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:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-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.
-*/
-
-module.exports = require('./lib/s4t_WS');
\ No newline at end of file
diff --git a/s4t-server-node/lib/getIP.js b/s4t-server-node/lib/getIP.js
deleted file mode 100644
index cc3c6c7..0000000
--- a/s4t-server-node/lib/getIP.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
-The MIT License (MIT)
-Copyright (c) 2014 Andrea Rocco Lotronto
-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:
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-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.
-*/
-
-var networkInterfaces = require('os').networkInterfaces();
-
-module.exports = function (interface, version) {
- var ip ;
- for (var ifName in networkInterfaces){
- if(ifName == interface){
- var ifDetails = networkInterfaces[ifName];
- for (var i = 0; ifDetails[i].family == version; i++){
- ip = ifDetails[i].address;
- }
- }
- }
-
- return ip;
-};
diff --git a/s4t-server-node/lib/s4t_WS.js b/s4t-server-node/lib/s4t_WS.js
deleted file mode 100644
index 9461824..0000000
--- a/s4t-server-node/lib/s4t_WS.js
+++ /dev/null
@@ -1,27 +0,0 @@
- /*
-The MIT License (MIT)
-
-Copyright (c) 2014 Andrea Rocco Lotronto
-
-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:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-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.
-*/
-
-module.exports = {
- server: require("./s4t_wamp_server")
-};
\ No newline at end of file
diff --git a/s4t-server-node/lib/s4t_wamp_server.js b/s4t-server-node/lib/s4t_wamp_server.js
deleted file mode 100644
index e9f7177..0000000
--- a/s4t-server-node/lib/s4t_wamp_server.js
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
-The MIT License (MIT)
-Copyright (c) 2014 Andrea Rocco Lotronto
-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:
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-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.
-*/
-
-var autobahn = require('autobahn');
-var express = require('express');
-
-
-s4t_wamp_server = function(){
-
-
-}
-
-s4t_wamp_server.prototype.start = function(restPort, wamp_router_url){
-
-
- var boards = {};
- var getIP = require('./getIP.js');
- var IPLocal = getIP('eth0', 'IPv4');
-
- //var url_wamp_router = "ws://172.17.3.139:8181/ws"; //example of url wamp router
-
- var connection = new autobahn.Connection({
- //url: url_wamp_router,
- url:wamp_router_url,
- realm: "s4t"
- });
-
- var topic_command = 'board.command'
- var topic_connection = 'board.connection'
-
- connection.onopen = function (session, details) {
-
-
- var rest = express();
-
- rest.get('/', function (req, res){
- res.send('API:
http://'+IPLocal+':'+restPort+'/list for board list');
- });
-
- rest.get('/command/', function (req, res){
-
- //DEBUG Message
- //console.log('POST::::'+req.originalUrl);
-
- var board = req.query.board;
- var command = req.query.command;
- var pin = req.query.pin;
- var mode = req.query.mode;
- var value = req.query.val;
-
- if(boards[board] != undefined){
- //DEBUG Message
- //console.log("ID exsist");
- //console.log(command);
- switch(command){
- case 'ssh':
- //random port for reverse service
- var port = randomIntInc(6000,7000);
- session.publish(topic_command, [board, command, port]);
- //res.send("ssh -p "+port+" root@"+IPLocal);
- res.json(IPLocal+':'+port);
- break;
-
- case 'ideino':
- var port = randomIntInc(6000,7000);
- session.publish(topic_command, [board, command, port]);
- //res.send("http://"+IPLocal+":"+port);
- res.json(IPLocal+':'+port);
- break;
-
- case 'osjs':
- var port = randomIntInc(6000,7000);
- session.publish(topic_command, [board, command, port]);
- //res.send("http://"+IPLocal+":"+port);
- res.json(IPLocal+':'+port);
- break;
-
- case 'mode':
-
- if(mode === 'input' || mode ==='output'){
- session.publish(topic_command, [board, command, pin, mode]);
- res.json(pin+':'+mode);
- break;
- }
- else{
- res.json('null');
- break;
- }
-
- //Analog
- case 'analog':
- console.log('VALORE='+value);
- if(value!=undefined){//WRITE
- console.log('ANALOG WRITE');
- if(value<=0 && value <=1024){
- session.publish(topic_command, [board, command, pin, value]);
- res.json(pin+':'+value);
- break;
- }
- else{
- res.json('null');
- break;
- }
- }
- else{//READ
- console.log('ANALOG READ');
- session.call(board+'.command.rpc.read.analog', [board, command, pin]).then(
- function(result){
- res.json(result);
- },session.log);
- break;
- }
-
- //Digital
- case 'digital':
- console.log('VALORE='+value);
- if(value!=undefined){//WRITE
- console.log('DIGITAL WRITE');
- if(value==0 || value==1){//WRITE
- session.publish(topic_command, [board, command, pin, value]);
- res.json(pin+':'+value);
- break;
- }
- else{
- res.json('null');
- break;
- }
- }
- else{//READ
- console.log('DIGITAL READ');
- session.call(board+'.command.rpc.read.digital', [board, command, pin]).then(
- function(result){
- res.json(result);
- },session.log);
- break;
- }
-
- default:
- res.json('null')
- break;
- }
- }
- else
- //res.send("Error: malformed REST ");
- res.json('null');
-
- });
-
- rest.get('/list/', function (req, res){
-
- var response='{ list: ['
- //var board_list='';
-
- //for (var i in boards){
- // board_list += boards[i];
- // command_list = "ssh"
- // }
- for (var i in boards){
- response += boards[i]+","
- }
- var len = response.length;
- response = response.slice(0,len-1);
- response += '] }'
-
-
-
- //res.send('List of the board: '+board_list+'
'+'use URL: '+IPLocal+":"+restPort+"/commad/?board=board_name&command=ssh|ideino");
- res.json(response);
- });
-
- rest.listen(restPort);
- console.log("Server REST started on: http://"+IPLocal+":"+restPort);
-
- console.log("Connected to router WAMP");
- // Publish, Subscribe, Call and Register
-
- var onBoardConnected = function (args){
- //registrare le schede che si connettono
- console.log(args);
-
- if(args[1]=='connection'){
- boards[args[0]] = args[0];
- //DEBUGGG Message
- console.log("Board connected:"+args[0]+" board state:"+args[1]);
- //DEBUGGG Message
- console.log("List of board::"+boards.length);
- for (var i in boards){
- console.log('Key: '+i+' value: '+boards[i]);
- }
-
- }
- if(args[1]=='disconnect'){
- delete boards[args[0]];
- //DEBUGGG
- console.log("Board disconnected:"+args[0]+" board state:"+args[1]);
- //DEBUGGG
- console.log("List of the board::"+boards.length);
- for (var i in boards){
- console.log('Key: '+i+' value: '+boards[i]);
- }
- }
- }
-
- session.subscribe(topic_connection, onBoardConnected);
- console.log("Subsscribe to topic: "+topic_connection);
- };
-
- connection.onclose = function (reason, details) {
- // handle connection lost
- }
-
- connection.open();
-
-}
-
-//function for pseudo random number
-function randomIntInc (low, high) {
- return Math.floor(Math.random() * (high - low + 1) + low);
-}
-
-module.exports = s4t_wamp_server;
\ No newline at end of file
diff --git a/s4t-server-python/s4t-wamp-server.py b/s4t-server-python/s4t-wamp-server.py
deleted file mode 100644
index 9c70732..0000000
--- a/s4t-server-python/s4t-wamp-server.py
+++ /dev/null
@@ -1,136 +0,0 @@
-#########################################################################################
-##
-## The MIT License (MIT)
-##
-## Copyright (c) 2014 Andrea Rocco Lotronto
-##
-## 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:
-##
-## The above copyright notice and this permission notice shall be included in all
-## copies or substantial portions of the Software.
-##
-## 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.
-########################################################################################
-
-from autobahn.twisted.wamp import ApplicationSession
-from autobahn.twisted.wamp import ApplicationRunner
-from twisted.internet.defer import inlineCallbacks
-
-from autobahn.twisted.websocket import WampWebSocketClientFactory
-from autobahn.wamp.types import ComponentConfig
-
-urlWampRouter = "ws://212.189.207.109:8181/ws"
-realmWampRouter = "s4t"
-
-'''
-class ApplicationSessionFactory(ApplicationSessionFactory):
- def __init__(self, config, app):
- ApplicationSession.__init__(self, config)
- self.app = app
-
-class ApplicationFactory(Application):
-
-
- def __init__(self, prefix= None):
-
-'''
-
-class S4TWampServer(ApplicationSession):
-
-
-
-
- @inlineCallbacks
- def onJoin(self, details):
- self.connectedBoard = {}
- self.topic_connection = self.config.extra['topic_connection']
- self.topic_command = self.config.extra['topic_command']
-
- print("Sessio attached [Connect to WAMP Router]")
-
- def onMessage(*args):
- #DEBUG Message
- print args
-
- if args[1] == 'connection':
- print(args[0]+ " connessa")
- self.connectedBoard[args[0]] = args[0]
- print self.connectedBoard
-
- if args[1] == 'disconnect':
- print(args[0]+ " disconnessa")
- del self.connectedBoard[args[0]]
- print self.connectedBoard
-
- try:
- yield self.subscribe(onMessage, self.topic_connection) #threads.deferToThread(self.subscribe(onMessage, self.topic_connection))
- print ("Subscribed to topic: "+self.topic_connection)
-
- except Exception as e:
- print("could not subscribe to topic:" +self.topic_connection)
-
- #def pubB(msg=''):
- yield self.publish(self.topic_connection,'pippo')#threads.deferToThread(self.publish(self.topic_connection,'pippo'))
-
-class s4_wamp_server:
- def __init__(self, t_connection, t_command):
- self.topic_connection = t_connection
- self.topic_command = t_command
-
- def start(self,make):
- #self.runner = ApplicationRunner(url = urlWampRouter, realm = realmWampRouter, extra={'topic_connection':self.topic_connection, 'topic_command':self.topic_command})
- #self.runner.run(S4TWampServer)
- self.url = urlWampRouter
- self.realm = realmWampRouter
- self.extra = {'topic_connection':self.topic_connection, 'topic_command':self.topic_command}
- self.debug = True
- self.debug_wamp = True
- self.debug_app = True
- self.make = None
-
- from twisted.internet import reactor
- ## factory for use ApplicationSession
- def create():
- cfg = ComponentConfig(self.realm, self.extra)
- try:
- session = make(cfg)
- except Exception:
- ## the app component could not be created .. fatal
- log.err()
- reactor.stop()
- else:
- session.debug_app = self.debug_app
- return session
-
- ## create a WAMP-over-WebSocket transport client factory
- transport_factory = WampWebSocketClientFactory(create, url = self.url,
- debug = self.debug, debug_wamp = self.debug_wamp)
-
- ## start the client from a Twisted endpoint
- from twisted.internet.endpoints import clientFromString
-
- endpoint_descriptor = "tcp:212.189.207.109:8181"
-
- client = clientFromString(reactor, endpoint_descriptor)
- client.connect(transport_factory)
-
- ## now enter the Twisted reactor loop
-
- reactor.run()
-
-
-if __name__ == '__main__':
-
- server = s4_wamp_server('board.connection', 'board.command')
- server.start(S4TWampServer)
\ No newline at end of file
diff --git a/s4t-server-python/yooo.py b/s4t-server-python/yooo.py
deleted file mode 100644
index f9c504b..0000000
--- a/s4t-server-python/yooo.py
+++ /dev/null
@@ -1,101 +0,0 @@
-from autobahn.twisted.websocket import WampWebSocketClientProtocol
-from autobahn.twisted.websocket import WampWebSocketClientFactory
-from autobahn.twisted.websocket import connectWS
-
-from twisted.internet import reactor
-
-from twisted.python import log
-import sys
-log.startLogging(sys.stdout)
-import threading
-import Queue
-
-# ----- twisted ----------
-class _WampWebSocketClientProtocol(WampWebSocketClientProtocol):
- def __init__(self, factory):
- self.factory = factory
-
- def onOpen(self):
- #log.debug("Client connected")
- self.factory.protocol_instance = self
- self.factory.base_client._connected_event.set()
-
-class _WampWebSocketClientFactory(WampWebSocketClientFactory):
- def __init__(self, factory, *args, **kwargs):
- WampWebSocketClientFactory.__init__(self, factory, *args, **kwargs)
- self.protocol_instance = None
- self.base_client = None
-
- def buildProtocol(self, addr):
- return _WampWebSocketClientProtocol(self)
-# ------ end twisted -------
-
-class BaseWBClient(object):
-
- def __init__(self, websocket_settings):
- #self.settings = websocket_settings
- # instance to be set by the own factory
- self.factory = None
- # this event will be triggered on onOpen()
- self._connected_event = threading.Event()
- # queue to hold not yet dispatched messages
- self._send_queue = Queue.Queue()
- self._reactor_thread = None
-
- def connect(self):
-
- log.msg("Connecting to 172.17.3.139:8282")
- self.factory = _WebSocketClientFactory(
- "ws://172.17.3.139:8282",
- debug=True)
- self.factory.base_client = self
-
- c = connectWS(self.factory)
-
- self._reactor_thread = threading.Thread(target=reactor.run,
- args=(False,))
- self._reactor_thread.daemon = True
- self._reactor_thread.start()
-
- def send_message(self, body):
- if not self._check_connection():
- return
- log.msg("Queing send")
- self._send_queue.put(body)
- reactor.callFromThread(self._dispatch)
-
- def _check_connection(self):
- if not self._connected_event.wait(timeout=10):
- log.err("Unable to connect to server")
- self.close()
- return False
- return True
-
- def _dispatch(self):
- log.msg("Dispatching")
- while True:
- try:
- body = self._send_queue.get(block=False)
- except Queue.Empty:
- break
- self.factory.protocol_instance.sendMessage(body)
-
- def close(self):
- reactor.callFromThread(reactor.stop)
-
-import time
-def Ppippo(coda):
- while True:
- coda.send_message('YOOOOOOOO')
- time.sleep(5)
-
-if __name__ == '__main__':
-
- ws_setting = {'host':'172.17.3.139', 'port':8080}
-
- client = BaseWBClient(ws_setting)
-
- t1 = threading.Thread(client.connect())
- t11 = threading.Thread(Ppippo(client))
- t11.start()
- t1.start()
\ No newline at end of file