Modified repository structure
This commit is contained in:
parent
0a5369944f
commit
bde7bba359
16
.crossbar/node.pid
Normal file
16
.crossbar/node.pid
Normal file
@ -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"
|
||||
]
|
||||
}
|
215
LICENSE
215
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.
|
163
lib/clients_wamp_rw.py
Normal file
163
lib/clients_wamp_rw.py
Normal file
@ -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')
|
BIN
lib/s4t_reader.pyc
Normal file
BIN
lib/s4t_reader.pyc
Normal file
Binary file not shown.
BIN
lib/s4t_writer.pyc
Normal file
BIN
lib/s4t_writer.pyc
Normal file
Binary file not shown.
@ -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');
|
@ -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');
|
@ -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;
|
||||
};
|
@ -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")
|
||||
};
|
@ -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: <br> 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+'<br>'+'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;
|
@ -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)
|
@ -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()
|
Loading…
Reference in New Issue
Block a user