Modified repository structure
This commit is contained in:
parent
0a5369944f
commit
bde7bba359
|
@ -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
|
1. Definitions.
|
||||||
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
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
copies or substantial portions of the Software.
|
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.
|
|
|
@ -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')
|
Binary file not shown.
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