diff --git a/server.py b/server.py new file mode 100644 index 0000000..fb2acf9 --- /dev/null +++ b/server.py @@ -0,0 +1,85 @@ +############################################################################### +# +# The MIT License (MIT) +# +# Copyright (c) Crossbar.io Technologies GmbH +# +# 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. +# +############################################################################### + +import sys + +from twisted.internet import reactor +from twisted.python import log +from twisted.web.server import Site +from twisted.web.static import File + +from autobahn.twisted.websocket import WebSocketServerFactory, \ + WebSocketServerProtocol + +from autobahn.twisted.resource import WebSocketResource + +i = 0 + +def setServo(servoChannel, position): + servoStr = str(servoChannel) + "=" + str(position) + "\n" + with open("/dev/servoblaster", "wb") as f: + f.write(bytes(servoStr, 'utf-8')) + +class EchoServerProtocol(WebSocketServerProtocol): + + def onConnect(self, request): + print("WebSocket connection request: {}".format(request)) + + def onMessage(self, payload, isBinary): + global i + i = i + 1 + if isBinary: + print("Binary message received: {0} bytes".format(len(payload))) + else: + print("Text message received: {0}".format(payload.decode('utf8'))) + string = " " + str(i) + self.sendMessage(payload + bytes(string, 'utf-8'), isBinary) + string = payload.decode('ASCII') + setServo(0, int(string.split("/")[0])) + setServo(1, int(string.split("/")[1])) + + +if __name__ == '__main__': + + log.startLogging(sys.stdout) + + factory = WebSocketServerFactory(u"ws://10.174.136.143:45684") + factory.protocol = EchoServerProtocol + + resource = WebSocketResource(factory) + + # we server static files under "/" .. + root = File(".") + + # and our WebSocket server under "/ws" (note that Twisted uses + # bytes for URIs) + root.putChild(b"ws", resource) + + # both under one Twisted Web Site + site = Site(root) + reactor.listenTCP(45684, site) + + reactor.run()