From bde7bba359977c4ec2033fd7bf7e1b1df6520c36 Mon Sep 17 00:00:00 2001 From: Andrea Rocco Lotronto Date: Fri, 6 Mar 2015 13:01:35 +0100 Subject: [PATCH] Modified repository structure --- .crossbar/node.pid | 16 ++ LICENSE | 215 ++++++++++++++-- lib/clients_wamp_rw.py | 163 ++++++++++++ lib/s4t_reader.pyc | Bin 0 -> 3624 bytes lib/s4t_writer.pyc | Bin 0 -> 3613 bytes .../test_autobahn_wamp_client.py | 0 .../test_autobahn_ws_client.py | 0 .../test_autobahn_ws_server.py | 0 {s4t-server-python => lib}/test_c.py | 0 {s4t-server-python => lib}/test_pub.py | 0 s4t-server-node/bin/server | 31 --- s4t-server-node/index.js | 25 -- s4t-server-node/lib/getIP.js | 35 --- s4t-server-node/lib/s4t_WS.js | 27 -- s4t-server-node/lib/s4t_wamp_server.js | 238 ------------------ s4t-server-python/s4t-wamp-server.py | 136 ---------- s4t-server-python/yooo.py | 101 -------- 17 files changed, 377 insertions(+), 610 deletions(-) create mode 100644 .crossbar/node.pid create mode 100644 lib/clients_wamp_rw.py create mode 100644 lib/s4t_reader.pyc create mode 100644 lib/s4t_writer.pyc rename {s4t-server-python => lib}/test_autobahn_wamp_client.py (100%) rename {s4t-server-python => lib}/test_autobahn_ws_client.py (100%) rename {s4t-server-python => lib}/test_autobahn_ws_server.py (100%) rename {s4t-server-python => lib}/test_c.py (100%) rename {s4t-server-python => lib}/test_pub.py (100%) delete mode 100755 s4t-server-node/bin/server delete mode 100644 s4t-server-node/index.js delete mode 100644 s4t-server-node/lib/getIP.js delete mode 100644 s4t-server-node/lib/s4t_WS.js delete mode 100644 s4t-server-node/lib/s4t_wamp_server.js delete mode 100644 s4t-server-python/s4t-wamp-server.py delete mode 100644 s4t-server-python/yooo.py 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 0000000000000000000000000000000000000000..06ebaacd74d52eba8621e61a521b3985e648ba5f GIT binary patch literal 3624 zcmc&$ZF3tn5MJHcPMkRJZ+&kH1O*<|C%~Jqd<~LGNbBI$Ek6Ot6r|JO zOnTK=%yamfQAXx-&5!3?omq0B-e;JO3 zd&jXA@K*R-*k1*2b<|%2Zw(?edk!Krb{?WRPy+S@MDy?g;0WMX?*c>%pf0j>@mP8Z z)Mbd4VBdlAnNXKV*SiAh3iPjnxOV*!2j4N#5JhH2pwtw%Z%Gziw^ZZryBc-286y&c>aM_JKB}roS900?s4jJ10br6}b?(wA_0K4zKfY1>RXb2aX(gB_b5yDh{kYe6*Wgg^H=d{uGo3 z#CsQ!TOAK)0)D~Wb(%G_zGKL}CNJX9ANmRLVP;MU(=^B;J}n`N+_H;JlV8ke<7gYV zK?&Sx(kXWgEiQlFy8r4K3*;23)8teSqeq?y%ARiGKQPh1VXvKLroA1Q;KuWyG%=yJ zy{+D;BrnzKes+@nFa{dBwYBsfBr^+;!| z!oK7)qZ1Lz=zYY(TT=#-Tq$Rfu;Jsm%-w$*s)A0~Bxe{RS|xjiav)MBh!ZU-gAI9J zowcJVgn9NjkF(p@(*zW7m&B4&uef4a%sX?!?t2mkd_N0P<@<&L?fYpS4H9G}`BqZZ z81MeBm2}yaB1zR-f1rp2x z%3Cq&IHL}xtsSZYS|*(dhG(K zVQMtO>B#_VPSa*+?t>uFiVy2YsypZz8nIpf0IRnR5)b)7Q84g!uo4@N|QSnsN}F zy5O%{7i;3UAd@bK^AGF{V}=FU1`osOa`m(&wn~)_3o%6$i?86gAv?i3&N!G@j1fN= z)jmem7VBxM<0NU|M3(|S17;TbbA$w}#Qg=pN{yE`z6*}PAqCt<4X}ipB~p0jl68_V z^E%7WU*XOS?L^Sh0{W{snVC+LD#;GlT?!jv!vcb`)W)CjKmjvYjFpk}D&SIR!eaB( z&Df++%1=n00#8Avo8LFDslf7O;%ocJ@P{~(WK~l5<>y4m*_@bM=7!3Wt_JxTk*h@3 ziF}HL>!e*B?|lZ|OSUC>&or$ZWbz8>(_wj0-@X^PKg=CIyT&sbu2~F8#&a6rD~6T{ z_j>4LtN~e6V9hg_FLV_Ycs$zt8D3HHTQv6y8`mVptg|BKM8jPX=iF=6nzM*ic*e0O zq34#oMC3~%GsTK|;&5hyf+%wm`x5}3VXZTs99KXvq>Hgp3q?4IPk-Uz|kL|9Pe2F<1Hcrj1| z#b`8fs^oPP$uEe|Y{q=v?c)=ceJm;9EVL-+h}+3ZoBt#99O&=umH#8TPk)7EUf|a` aLEU+GUNlhFK-zF>qUNqHu5LE4CjSFTZ8bpv literal 0 HcmV?d00001 diff --git a/lib/s4t_writer.pyc b/lib/s4t_writer.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4dd60f2521a04496e010ff6fad2baccb3699f74e GIT binary patch literal 3613 zcmc&$+j0~)5bc?@*S9sk+Ys&$!lo+hmVp97QmKFmNu`Kmv{YQo%Vc&&HnYqvBQ1s$ ze2Ri8Cr?l| zP5BH3GftkQtVQ`O1+z|`5`RZ1IO61K8E=k)IVaChHc$Bi1q)7YQMO3IBIyMhERkNM z!7{xZ&7Ip;C|HqoF~3T|>OQ|l!5Ss(_9!Ln>=-32ijGq!8y_=Fqz;y=@lA$O8PWfp}9c% z0u4Tc=oP%pE$X#bI1cH5{Ioe1WEYv-s;VrFBb$~*PaDG@*S7F>n;I5{u3gg{Mk%ti z&>K;f^`rQ)aSfkv!*-Nc+q&N?$Dh|9^;n7i+gJ>Q|Mgs!eYDKbK^Bwm6f}j z2Hp3}&2D%7`sL30_0E;f`jszl-dMk}-rX}6X6CB3%ly4Hv}HefRJg@%*QwQY%zAlz zrnmVuYfLo9%_HptB8WXlsX@wlj$yg~qPscD8dm-q6z7TVZZy+o!-5u-%U$fmqi+Pc~>qOT|d$FrRte|#NAmF z?#ZrnSkq)DW$|N~7GE)EFePd<{Wcgo$s`PmDA!?VG5;{k%Ve0bsIX!M#2(D}!%bVY z*zt9K4W`i?lV!XUYNXU{m>>;Ys5w-xIOY;NFcNKy5W^TR;A2K6K{CcsRiN3RVuY#Jm&q$fD+O;%E6Ac7ReSO37V?6&--%!@$`gHZ4*chTpM& zbA$=`Q=a_zyXHw|kFgfE66?R283mNj0T)@0bpw$bj0qj5mp;8PZX4BDoj@~yfS}_@3GE~15`l7P-02mLaHZf`odY=og3XsKmf|-u zR!Bc}8bmxGbJa;EQd!;Te4q#rABZm{^G3INSSXZenf`-%=rSRRbY2z;n;?!tcQ^?@ z$}`y$!)v!v^aQptNFMQ#iJ{}2T@D8qks_(MP+HC@6W3|QOa8$4R+o7iTl^YqzTnzl z@#ef1)1%{O`P=jty(NFv6>x=FD;$dIJP3Lp%viV&l9mcc+Td5tm!>~86SE)>_E%au z%sjn_3R{2v)(Puz3^)rpnK+FY``&L2+LmgHB;HIh!uv}q?o1DVe&>-Ith(GJLAGhG z9Rf0~D}{0);HZZEEH#fl#%>9`x2m+N$|qPGAWmGsX1&pYoJVO9hV6@(D|R*--FP~7 zFExDg=pdsNdMTV~b`@mQ#PHQM*ZfYRcXTbMxJ8;B9z*wyTpC?cVy`6$UK_$m$3CmH zk=%9%*gIZadSd)T{`Zr~NOHP*fcq0y#sh12WjVMynP*@*%9|a$i?D%VU5&H&vYpybx_xR_(ratqHd9TH~7E>+^UXzQ%YHRh%)OgFE^5?iv F{12XFFf9N8 literal 0 HcmV?d00001 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