Beispiel #1
0
    def __init__(self, manager, port, password, secure=False, key_path=None, crt_path=None, unix_socket_path=None):
        self.manager = manager
        self.password = password
        from twisted.internet import reactor, ssl

        from autobahn.twisted.websocket import WebSocketServerFactory, WebSocketServerProtocol

        class MyServerProtocol(WebSocketServerProtocol):
            def onConnect(self, request):
                log.info("Client connecting: {0}".format(request.origin if request.origin else "self"))
                pass

            def onOpen(self):
                log.info("WebSocket connection open")
                WebSocketServer.clients.append(self)

            def onMessage(self, payload, isBinary):
                if isBinary:
                    log.info(f"Binary message received: {len(payload)} bytes")
                else:
                    log.info(f"Text message received: {payload.decode('utf8')}")
                    try:
                        parsedPayload = json.loads(payload.decode("utf8"))
                    except json.decoder.JSONDecodeError:
                        return

                    if self.websocket_origin:
                        if "password" in parsedPayload and parsedPayload["password"] == password:
                            del parsedPayload["password"]
                            for client in WebSocketServer.clients:
                                client.sendMessage(json.dumps(parsedPayload).encode("utf8"), False)
                    else:
                        if parsedPayload["event"] == "open_bets":
                            HandlerManager.trigger("on_open_bets")
                        elif parsedPayload["event"] == "lock_bets":
                            HandlerManager.trigger("on_lock_bets")
                        elif parsedPayload["event"] == "end_bets":
                            HandlerManager.trigger(
                                "on_end_bets",
                                winning_team=parsedPayload["data"]["winning_team"],
                                player_team=parsedPayload["data"]["player_team"],
                            )
                        else:
                            for client in WebSocketServer.clients:
                                client.sendMessage(payload, False)

            def onClose(self, wasClean, code, reason):
                log.info(f"WebSocket connection closed: {reason}")
                try:
                    WebSocketServer.clients.remove(self)
                except:
                    pass

        factory = WebSocketServerFactory()
        factory.setProtocolOptions(autoPingInterval=15, autoPingTimeout=5)
        factory.protocol = MyServerProtocol

        def reactor_run(reactor, factory, port, context_factory=None, unix_socket_path=None):
            if unix_socket_path:
                sock_file = Path(unix_socket_path)
                if sock_file.exists():
                    sock_file.unlink()
                reactor.listenUNIX(unix_socket_path, factory)
            else:
                if context_factory:
                    log.info("wss secure")
                    reactor.listenSSL(port, factory, context_factory)
                else:
                    log.info("ws unsecure")
                    reactor.listenTCP(port, factory)
            reactor.run(installSignalHandlers=0)

        if secure:
            context_factory = ssl.DefaultOpenSSLContextFactory(key_path, crt_path)
        else:
            context_factory = None

        reactor_thread = threading.Thread(
            target=reactor_run, args=(reactor, factory, port, context_factory, unix_socket_path), name="WebSocketThread"
        )
        reactor_thread.daemon = True
        reactor_thread.start()
Beispiel #2
0
        else:
            yield sleep(1)
            returnValue(x * x)

    @inlineCallbacks
    def onMessage(self, payload, isBinary):
        if not isBinary:
            x = json.loads(payload.decode('utf8'))
            try:
                res = yield self.slowsquare(x)
            except Exception as e:
                self.sendClose(1000, "Exception raised: {0}".format(e))
            else:
                self.sendMessage(json.dumps(res).encode('utf8'))


if __name__ == '__main__':

    import sys

    from twisted.python import log
    from twisted.internet import reactor

    log.startLogging(sys.stdout)

    factory = WebSocketServerFactory("ws://localhost:9000", debug=False)
    factory.protocol = SlowSquareServerProtocol

    reactor.listenTCP(9000, factory)
    reactor.run()
        # echo back message verbatim
        self.sendMessage(payload, isBinary)

    def onClose(self, wasClean, code, reason):
        print("WebSocket connection closed: {0}".format(reason))


def startPolling():
    log.startLogging(sys.stdout)

    factory = WebSocketServerFactory(u"ws://127.0.0.1:9000")
    factory.protocol = MyServerProtocol
    # factory.setProtocolOptions(maxConnections=2)

    # note to self: if using putChild, the child must be bytes...

    reactor.listenTCP(9000, factory)
    reactor.run()


if __name__ == '__main__':
    # log.startLogging(sys.stdout)

    factory = WebSocketServerFactory(u"ws://127.0.0.1:9000")
    factory.protocol = MyServerProtocol
    # factory.setProtocolOptions(maxConnections=2)

    # note to self: if using putChild, the child must be bytes...

    reactor.listenTCP(9000, factory)
    reactor.run()
Beispiel #4
0
# THE SOFTWARE.
#
###############################################################################

import hashlib
from twisted.internet import reactor

from autobahn.twisted.websocket import WebSocketServerFactory, \
    WebSocketServerProtocol, \
    listenWS


class MessageBasedHashServerProtocol(WebSocketServerProtocol):
    """
    Message-based WebSockets server that computes a SHA-256 for every
    message it receives and sends back the computed digest.
    """
    def onMessage(self, payload, isBinary):
        sha256 = hashlib.sha256()
        sha256.update(payload)
        digest = sha256.hexdigest()
        self.sendMessage(digest.encode('utf8'))
        print("Sent digest for message: {}".format(digest))


if __name__ == '__main__':
    factory = WebSocketServerFactory("ws://localhost:9000")
    factory.protocol = MessageBasedHashServerProtocol
    listenWS(factory)
    reactor.run()
Beispiel #5
0
        # echo back message verbatim
        for client in self.factory.clients:
            client.sendMessage(payload, isBinary)

    def onClose(self, wasClean, code, reason):
        print("WebSocket connection closed: {0}".format(reason))
        try:
            self.factory.clients.remove(self)
        except ValueError:
            pass


if __name__ == '__main__':

    import sys

    from twisted.python import log
    from twisted.internet import reactor

    log.startLogging(sys.stdout)

    factory = WebSocketServerFactory(u"ws://0.0.0.0:5123")
    factory.protocol = MyServerProtocol
    factory.clients = []
    # factory.setProtocolOptions(maxConnections=2)

    # note to self: if using putChild, the child must be bytes...

    reactor.listenTCP(5123, factory)
    reactor.run()
 def setUp(self):
     self.factory = WebSocketServerFactory()
     self.proto = WebSocketServerProtocol()
     self.proto.factory = self.factory
     self.proto.log = Mock()
Beispiel #7
0
def start_webserver(options,
                    protocol=vtk_wamp.ServerProtocol,
                    disableLogging=False):
    """
    Starts the web-server with the given protocol. Options must be an object
    with the following members:
        options.host : the interface for the web-server to listen on
        options.port : port number for the web-server to listen on
        options.timeout : timeout for reaping process on idle in seconds
        options.content : root for web-pages to serve.
    """
    from twisted.internet import reactor
    from twisted.web.server import Site
    from twisted.web.static import File
    import sys

    if not disableLogging:
        log.startLogging(sys.stdout)

    contextFactory = None

    use_SSL = False
    if options.sslKey and options.sslCert:
        use_SSL = True
        wsProtocol = "wss"
        from twisted.internet import ssl
        contextFactory = ssl.DefaultOpenSSLContextFactory(
            options.sslKey, options.sslCert)
    else:
        wsProtocol = "ws"

    # Create WAMP router factory
    from autobahn.twisted.wamp import RouterFactory
    router_factory = RouterFactory()

    # create a user DB
    authdb = vtk_wamp.AuthDb()

    # create a WAMP router session factory
    from autobahn.twisted.wamp import RouterSessionFactory
    session_factory = RouterSessionFactory(router_factory)
    session_factory.session = vtk_wamp.CustomWampCraRouterSession
    session_factory.authdb = authdb

    # Create ApplicationSession and register protocols
    appSession = protocol(types.ComponentConfig(realm="vtkweb"))
    appSession.setAuthDB(authdb)
    session_factory.add(appSession)

    # create a WAMP-over-WebSocket transport server factory
    transport_factory = vtk_wamp.TimeoutWampWebSocketServerFactory(session_factory, \
           url        = "%s://%s:%d" % (wsProtocol, options.host, options.port),    \
           debug      = options.debug,                                              \
           debug_wamp = options.debug,                                              \
           timeout    = options.timeout )

    root = Resource()

    # Do we serve static content or just websocket ?
    if len(options.content) > 0:
        # Static HTTP + WebSocket
        root = File(options.content)

    # Handle possibly complex ws endpoint
    if not options.nows:
        wsResource = WebSocketResource(transport_factory)
        handle_complex_resource_path(options.ws, root, wsResource)

    # Handle binary push WebSocket for images
    if not options.nobws:
        wsbFactory = WebSocketServerFactory( \
            url   = "%s://%s:%d" % (wsProtocol, options.host, options.port), \
            debug = options.debug)
        wsbFactory.protocol = vtk_wamp.ImagePushBinaryWebSocketServerProtocol
        wsbResource = WebSocketResource(wsbFactory)
        handle_complex_resource_path('wsb', root, wsbResource)

    # Handle possibly complex lp endpoint
    if not options.nolp:
        lpResource = WampLongPollResource(session_factory,
                                          timeout=options.timeout,
                                          debug=options.debug)
        #killAfter = 30000,
        #queueLimitBytes = 1024 * 1024,
        #queueLimitMessages = 1000,
        #debug=True,
        #reactor=reactor)
        handle_complex_resource_path(options.lp, root, lpResource)

    if options.uploadPath != None:
        from upload import UploadPage
        uploadResource = UploadPage(options.uploadPath)
        root.putChild("upload", uploadResource)

    if len(options.fsEndpoints) > 3:
        for fsResourceInfo in options.fsEndpoints.split('|'):
            infoSplit = fsResourceInfo.split(':')
            handle_complex_resource_path(infoSplit[0], root,
                                         File(infoSplit[1]))

    site = Site(root)

    if use_SSL:
        reactor.listenSSL(options.port, site, contextFactory)
    else:
        reactor.listenTCP(options.port, site)

    # flush ready line
    sys.stdout.flush()

    # Work around to force the output buffer to be flushed
    # This allow the process launcher to parse the output and
    # wait for "Start factory" to know that the WebServer
    # is running.
    if options.forceFlush:
        for i in range(200):
            log.msg("+" * 80, logLevel=logging.CRITICAL)

    # Initialize testing: checks if we're doing a test and sets it up
    testing.initialize(options, reactor, stop_webserver)

    # Start the reactor
    if options.nosignalhandlers:
        reactor.run(installSignalHandlers=0)
    else:
        reactor.run()

    # Give the testing module a chance to finalize, if necessary
    testing.finalize()
Beispiel #8
0
__email__ = "*****@*****.**"

from autobahn.twisted.websocket import WebSocketServerFactory
from webprotocol import WebInterfaceProtocol
from playerprotocol import PlayerProtocol
from game import Game
import sys

from twisted.python import log
from twisted.internet import reactor, protocol

if __name__ == '__main__':

    log.startLogging(sys.stdout)

    game = Game()

    # to speak with the web page we use a websocket
    factory_web = WebSocketServerFactory(u"ws://127.0.0.1:9000", debug=False)
    factory_web.protocol = WebInterfaceProtocol
    factory_web.game = game

    # to speak with C client, we use standard TCP sockets
    factory_client = protocol.ServerFactory()
    factory_client.protocol = PlayerProtocol
    factory_client.game = game

    reactor.listenTCP(9000, factory_web)
    reactor.listenTCP(10000, factory_client)
    reactor.run()
Beispiel #9
0
    global tracker_dict
    tracker_dict = dict()
    # A dictionary to store old messages in for subsequent assembly
    global message_dict
    message_dict = dict()
    # A dictionary to store incremental messages to send to the end user.
    global message_to_send
    message_to_send = dict()
    global test_dict
    test_dict = dict()
    global subscriber_dict
    subscriber_dict = dict()
    global publisher_dict
    publisher_dict = dict()
    global control_dict
    control_dict = dict()
    global lock
    lock = threading.Lock()
    global channelstatedetails

    factory = WebSocketServerFactory("ws://127.0.0.1:8080")
    factory.protocol = MyServerProtocol
    # factory.setProtocolOptions(maxConnections=2)

    example = ThreadingExample(factory)

    # note to self: if using putChild, the child must be bytes...

    reactor.listenTCP(8080, factory)
    reactor.run()
Beispiel #10
0
            phoneclients.append(self)
            if not (gameclient is None):
                print("Let the phone know te client exists")
                self.sendMessage('c')
        elif ((payload == 'g' or payload == 's') and self == gameclient):
            print("Game client said something")
            for pc in phoneclients:
                pc.sendMessage(payload)
        else:
            gameclient.sendMessage(payload)

    def onOpen(self):
        print("Client connected")

    def onClose(self, wasClean, code, reason):
        global gameclient
        if (self in phoneclients):
            phoneclients.remove(self)
        elif (self == gameclient):
            gameclient = None
            print("Goodbye game client")
            for pc in phoneclients:
                pc.sendMessage('q')


if __name__ == '__main__':
    factory = WebSocketServerFactory("ws://127.0.0.1:9001", debug=True)
    factory.protocol = MyServerProtocol
    reactor.listenTCP(9001, factory)
    reactor.run()
    def __init__(self,
                 manager,
                 port,
                 secure=False,
                 key_path=None,
                 crt_path=None,
                 unix_socket_path=None):
        self.manager = manager_ext = manager

        class MyServerProtocol(WebSocketServerProtocol):
            def __init__(self):
                self.isAuthed = False
                self.user_id = None
                self.user_name = None
                self.login = None
                WebSocketServerProtocol.__init__(self)

            def onOpen(self):
                SongRequestWebSocketServer.clients.append(self)

            def onMessage(self, payload, isBinary):
                with DBManager.create_session_scope() as db_session:
                    if not isBinary:
                        try:
                            json_msg = json.loads(payload)
                        except:
                            self._close_conn()
                            return
                        if "event" not in json_msg:
                            self._close_conn()
                            return
                        switcher = {
                            "AUTH": self._auth,
                            "PAUSE": self._pause,
                            "RESUME": self._resume,
                            "NEXT": self._next,
                            "PREVIOUS": self._previous,
                            "SEEK": self._seek,
                            "VOLUME": self._volume,
                            "SHOWVIDEO": self._showvideo,
                            "HIDEVIDEO": self._hidevideo,
                            "CLOSESR": self._closesr,
                            "OPENSR": self._opensr,
                            "MOVE": self._move,
                            "FAVOURITE": self._favourite,
                            "UNFAVOURITE": self._unfavourite,
                            "BAN": self._ban,
                            "UNBAN": self._unban,
                            "DELETE": self._delete,
                        }
                        method = switcher.get(json_msg["event"], None)
                        if not manager_ext.bot.songrequest_manager.module_state[
                                "enabled"]:
                            return

                        if not method or not method(
                                db_session, json_msg.get("data", None)):
                            self._close_conn()
                            return

            def onClose(self, wasClean, code, reason):
                try:
                    SongRequestWebSocketServer.clients.remove(self)
                except:
                    pass

            def _close_conn(self):
                self.sendClose()

            def _pause(self, db_session, data):
                if not self.isAuthed:
                    return False

                return manager_ext.bot.songrequest_manager.pause_function()

            def _showvideo(self, db_session, data):
                if not self.isAuthed:
                    return False

                return manager_ext.bot.songrequest_manager.show_function()

            def _hidevideo(self, db_session, data):
                if not self.isAuthed:
                    return False

                return manager_ext.bot.songrequest_manager.hide_function()

            def _closesr(self, db_session, data):
                if not self.isAuthed:
                    return False

                return manager_ext.bot.songrequest_manager.close_module_function(
                )

            def _opensr(self, db_session, data):
                if not self.isAuthed:
                    return False

                return manager_ext.bot.songrequest_manager.open_module_function(
                )

            def _resume(self, db_session, data):
                if not self.isAuthed:
                    return False

                return manager_ext.bot.songrequest_manager.resume_function()

            def _next(self, db_session, data):
                if not self.isAuthed:
                    return False

                return manager_ext.bot.songrequest_manager.skip_function(
                    self.login)

            def _previous(self, db_session, data):
                if not self.isAuthed:
                    return False

                return manager_ext.bot.songrequest_manager.previous_function(
                    self.login)

            def _seek(self, db_session, data):
                if not self.isAuthed or not data.get("seek_time", False):
                    return False

                return manager_ext.bot.songrequest_manager.seek_function(
                    data.get("seek_time"))

            def _volume(self, db_session, data):
                if not self.isAuthed or not data or not data.get(
                        "volume", False):
                    return False

                return manager_ext.bot.songrequest_manager.volume_function(
                    data.get("volume"))

            def _move(self, db_session, data):
                if not self.isAuthed or not data or not data.get(
                        "database_id", False) or not data.get("to_id", False):
                    return False

                return manager_ext.bot.songrequest_manager.move_function(
                    int(data["database_id"]),
                    int(data["to_id"]) - 1)

            def _favourite(self, db_session, data):
                if not self.isAuthed or not data or not data.get(
                        "database_id", data.get("hist_database_id", False)):
                    return False

                return manager_ext.bot.songrequest_manager.favourite_function(
                    database_id=data.get("database_id", None),
                    hist_database_id=data.get("hist_database_id", None))

            def _unfavourite(self, db_session, data):
                if (not self.isAuthed or not data or not data.get(
                        "database_id",
                        data.get("songinfo_database_id",
                                 data.get("hist_database_id", False)))):
                    return False

                return manager_ext.bot.songrequest_manager.unfavourite_function(
                    database_id=data.get("database_id", None),
                    hist_database_id=data.get("hist_database_id", None),
                    songinfo_database_id=data.get("songinfo_database_id",
                                                  None),
                )

            def _ban(self, db_session, data):
                if not self.isAuthed or not data or not data.get(
                        "database_id", data.get("hist_database_id", False)):
                    return False

                return manager_ext.bot.songrequest_manager.ban_function(
                    database_id=data.get("database_id", None),
                    hist_database_id=data.get("hist_database_id", None))

            def _unban(self, db_session, data):
                if (not self.isAuthed or not data or not data.get(
                        "database_id",
                        data.get("songinfo_database_id",
                                 data.get("hist_database_id", False)))):
                    return False

                return manager_ext.bot.songrequest_manager.unban_function(
                    database_id=data.get("database_id", None),
                    hist_database_id=data.get("hist_database_id", None),
                    songinfo_database_id=data.get("songinfo_database_id",
                                                  None),
                )

            def _delete(self, db_session, data):
                if not self.isAuthed or not data or not data.get(
                        "database_id", False):
                    return False

                return manager_ext.bot.songrequest_manager.remove_function(
                    int(data["database_id"]))

            def _auth(self, db_session, data):
                access_token = data["access_token"]
                user = manager_ext.bot.twitch_v5_api.user_from_access_token(
                    access_token, manager_ext.bot.twitch_helix_api, db_session)
                if not user or user.level < 500:
                    return False
                self.isAuthed = True
                self.login = user.login
                self._dump_state(db_session)
                return True

            def _dump_state(self, db_session):
                song = (SongrequestQueue._from_id(
                    db_session,
                    manager_ext.bot.songrequest_manager.current_song_id)
                        if manager_ext.bot.songrequest_manager.current_song_id
                        else None)
                data = {
                    "volume":
                    manager_ext.bot.songrequest_manager.volume_val,
                    "current_song":
                    song.webjsonify() if song else {},
                    "module_state":
                    manager_ext.bot.songrequest_manager.module_state,
                    "playlist":
                    SongrequestQueue._get_playlist(db_session, limit=30),
                    "backup_playlist":
                    SongrequestQueue._get_backup_playlist(db_session,
                                                          limit=30),
                    "history_list":
                    SongrequestHistory._get_history(db_session, limit=30),
                    "banned_list":
                    SongRequestSongInfo._get_banned_list(db_session),
                    "favourite_list":
                    SongRequestSongInfo._get_favourite_list(db_session),
                    "current_timestamp":
                    str(utils.now().timestamp()),
                }
                payload = {"event": "initialize", "data": data}
                self.sendMessage(json.dumps(payload).encode("utf8"), False)

        factory = WebSocketServerFactory()
        factory.setProtocolOptions(autoPingInterval=15, autoPingTimeout=5)
        factory.protocol = MyServerProtocol

        def reactor_run(reactor,
                        factory,
                        port,
                        context_factory=None,
                        unix_socket_path=None):
            if unix_socket_path:
                sock_file = Path(unix_socket_path)
                if sock_file.exists():
                    sock_file.unlink()
                reactor.listenUNIX(unix_socket_path, factory)
            else:
                if context_factory:
                    log.info("wss secure")
                    reactor.listenSSL(port, factory, context_factory)
                else:
                    log.info("ws unsecure")
                    reactor.listenTCP(port, factory)
            reactor.run(installSignalHandlers=0)

        reactor_thread = threading.Thread(
            target=reactor_run,
            args=(reactor, factory, port, None, unix_socket_path),
            name="SongRequestWebSocketServerThread",
        )
        reactor_thread.daemon = True
        reactor_thread.start()
Beispiel #12
0
        except (JSONDecodeError, UnicodeDecodeError):
            return {}

    def _digest_incoming_data(self, data):
        _data = self.load(data)
        if not _data:
            return
        try:
            method = getattr(self, _data.get("operation"))
        except AttributeError:
            return
        method(_data.get("payload"))

    def transfer(self, payload, to=None):
        if not to:
            to = self.transport
        print(payload)
        self.sendMessage(json.dumps(payload).encode("utf-8"))


if __name__ == '__main__':
    factory = WebSocketServerFactory(u"ws://172.20.10.3:8585")
    factory.protocol = EiderProtocol
    factory.clients = dict()

    # noinspection PyUnresolvedReferences
    reactor.listenTCP(8585, factory)

    # noinspection PyUnresolvedReferences
    reactor.run()
Beispiel #13
0
    def __init__(self,
                 manager,
                 port,
                 secure=False,
                 key_path=None,
                 crt_path=None):
        self.manager = manager
        from twisted.internet import reactor, ssl

        from autobahn.twisted.websocket import WebSocketServerFactory, \
                WebSocketServerProtocol

        class MyServerProtocol(WebSocketServerProtocol):
            def onConnect(self, request):
                # log.info(self.factory)
                # log.info('Client connecting: {0}'.format(request.peer))
                pass

            def onOpen(self):
                log.info('WebSocket connection open')
                WebSocketServer.clients.append(self)

            def onMessage(self, payload, isBinary):
                if isBinary:
                    log.info('Binary message received: {0} bytes'.format(
                        len(payload)))
                else:
                    log.info('Text message received: {0}'.format(
                        payload.decode('utf8')))

            def onClose(self, wasClean, code, reason):
                log.info('WebSocket connection closed: {0}'.format(reason))
                try:
                    WebSocketServer.clients.remove(self)
                except:
                    pass

        factory = WebSocketServerFactory()
        factory.protocol = MyServerProtocol

        def reactor_run(reactor, factory, port, context_factory=None):
            if context_factory:
                log.info('wss secure')
                reactor.listenSSL(port, factory, context_factory)
            else:
                log.info('ws unsecure')
                reactor.listenTCP(port, factory)
            reactor.run(installSignalHandlers=0)

        if secure:
            context_factory = ssl.DefaultOpenSSLContextFactory(
                key_path, crt_path)
        else:
            context_factory = None

        reactor_thread = threading.Thread(target=reactor_run,
                                          args=(reactor, factory, port,
                                                context_factory),
                                          name='WebSocketThread')
        reactor_thread.daemon = True
        reactor_thread.start()
Beispiel #14
0
def start():
    factory = WebSocketServerFactory(u"ws://0.0.0.0:" + str(PORT))
    factory.protocol = ProcessClient
    reactor.listenTCP(PORT, factory)
    reactor.run()
Beispiel #15
0
        self.sendMessage(payload, isBinary)


if __name__ == '__main__':

    if len(sys.argv) > 1 and sys.argv[1] == 'debug':
        log.startLogging(sys.stdout)
        debug = True
    else:
        debug = False

    contextFactory = ssl.DefaultOpenSSLContextFactory('keys/server.key',
                                                      'keys/server.crt')

    factory = WebSocketServerFactory(u"wss://127.0.0.1:8080",
                                     debug=debug,
                                     debugCodePaths=debug)
    factory.protocol = EchoServerProtocol

    resource = WebSocketResource(factory)

    # we server static files under "/" ..
    root = File(".")

    # and our WebSocket server under "/ws"
    root.putChild(u"ws", resource)

    # both under one Twisted Web Site
    site = Site(root)

    reactor.listenSSL(8080, site, contextFactory)
Beispiel #16
0
                                            '-cu', username, '-cp', password, '-pa', 'scrypt', \
                                            '-nm', '-q'], stdout=subprocess.PIPE, shell=False)
            self.isRunning = True

    def stop(self):
        if self.isRunning:
            self.proxy.kill()
            os.wait()
            self.isRunning = False


if __name__ == '__main__':

    stratum_proxy = StratumProxy()

    factory = WebSocketServerFactory('ws://127.0.0.1:9000', debug=True)
    factory.protocol = WebUIProtocol
    reactor.listenTCP(9000, factory)

    print 'Reading config.ini...'
    if os.path.isfile('config.ini'):
        config = ArgsConfig('config.ini')
        config.read_config()
    else:
        print 'config.ini does exist!'
        sys.exit()

    if (config.protocol == 'stratum+tcp:'):
        stratum_host = config.host
        stratum_port = config.port
        config.host = 'localhost'
Beispiel #17
0
    def onMessage(self, payload, isBinary):
        messageUTF8 = payload.decode('utf8')
        message = payload
        print messageUTF8
        if messageUTF8 == 'request game':
            self.game.respondToGameRequest(self)
        elif messageUTF8.find('action') == 0:
            actionString = messageUTF8[6:]
            print 'action received: ' + actionString
            self.game.action(self.player, actionString)

    def onOpen(self):
        pass

    def onClose(self, wasClean, code, reason):
        if wasClean:
            print 'connction closed cleanly'
        else:
            print 'connction closed uncleanly code: {code} reason: {reason}'.format(
                code=code, reason=reason)


print 'starting ' + 'Connect N' + ' server'
#port=raw_input("Please enter the port to listen for connections on: ")
factory = WebSocketServerFactory("ws://localhost:44444", debug=True)
factory.protocol = GameServerProtocol
reactor.listenTCP(
    44444, factory
)  # args are: port, server factory instance, listening queue size, interface
print 'server is running'
reactor.run()
    if certfile is not None and keyfile is not None:
        protocol = 'wss'
        context_factory = ssl.DefaultOpenSSLContextFactory(keyfile, certfile)
    else:
        protocol = 'ws'
        context_factory = None

    # For testing purposes, use an ephemeral port if port == 0.
    if port == 0:
        rospy.loginfo('Rosbridge WebSocket Picking an ephemeral port')
        port = get_ephemeral_port()
    # Write the actual port as a param for tests to read.
    rospy.set_param('~actual_port', port)

    uri = '{}://{}:{}'.format(protocol, address, port)
    factory = WebSocketServerFactory(uri, externalPort=external_port)
    factory.protocol = RosbridgeWebSocket
    factory.setProtocolOptions(
        perMessageCompressionAccept=handle_compression_offers,
        autoPingInterval=ping_interval,
        autoPingTimeout=ping_timeout,
    )

    connected = False
    while not connected and not rospy.is_shutdown():
        try:
            listenWS(factory, context_factory)
            rospy.loginfo(
                'Rosbridge WebSocket server started at {}'.format(uri))
            connected = True
        except CannotListenError as e:
    def onOpen(self):
        print("WebSocket connection open.")

    def onMessage(self, payload, isBinary):
        if isBinary:
            print("Binary message received: {0} bytes".format(len(payload)))
        else:
            print("Text message received: {0}".format(payload.decode('utf8')))

        self.sendMessage(payload, isBinary)

    def onClose(self, wasClean, code, reason):
        print("WebSocket connection closed: {0}".format(reason))


if __name__ == '__main__':

    import sys

    from twisted.python import log
    from twisted.internet import reactor

    log.startLogging(sys.stdout)

    factory = WebSocketServerFactory(u"ws://0.0.0.0:9000")
    factory.protocol = MyServerProtocol
    factory.setProtocolOptions(maxConnections=2)

    reactor.listenTCP(9000, factory)
    reactor.run()
Beispiel #20
0
    def open(self, transport_config, options, protocol_class=None):
        """
        Implement IWebSocketClientAgent with in-memory transports.

        :param transport_config: a string starting with 'wss://' or
            'ws://'

        :param options: a dict containing options

        :param protocol_class: the client protocol class to
            instantiate (or `None` for defaults, which is to use
            `WebSocketClientProtocol`)
        """
        is_secure = transport_config.startswith("wss://")

        # call our "real" agent
        real_client_protocol = self._agent.open(
            transport_config,
            options,
            protocol_class=protocol_class,
        )

        if is_secure:
            host, port, factory, context_factory, timeout, bindAddress = self._reactor.sslClients[
                -1]
        else:
            host, port, factory, timeout, bindAddress = self._reactor.tcpClients[
                -1]

        server_address = IPv4Address('TCP', '127.0.0.1', port)
        client_address = IPv4Address('TCP', '127.0.0.1', 31337)

        server_protocol = self._server_protocol()
        # the protocol could already have a factory
        if getattr(server_protocol, "factory", None) is None:
            server_protocol.factory = WebSocketServerFactory()

        server_transport = iosim.FakeTransport(server_protocol,
                                               isServer=True,
                                               hostAddress=server_address,
                                               peerAddress=client_address)
        clientProtocol = factory.buildProtocol(None)
        client_transport = iosim.FakeTransport(clientProtocol,
                                               isServer=False,
                                               hostAddress=client_address,
                                               peerAddress=server_address)

        if is_secure:
            directlyProvides(server_transport, ISSLTransport)
            directlyProvides(client_transport, ISSLTransport)

        pump = iosim.connect(server_protocol, server_transport, clientProtocol,
                             client_transport)
        self._pumper.add(pump)

        def add_mapping(proto):
            self._servers[proto] = server_protocol
            return proto

        real_client_protocol.addCallback(add_mapping)
        return real_client_protocol
Beispiel #21
0
def connection_main(sysargs=None):
    """Main entry point to setup a connection node, aka the autopush script"""
    args, parser = _parse_connection(sysargs)
    setup_logging("Autopush", args.human_logs)
    settings = make_settings(
        args,
        port=args.port,
        endpoint_scheme=args.endpoint_scheme,
        endpoint_hostname=args.endpoint_hostname,
        endpoint_port=args.endpoint_port,
        router_scheme="https" if args.router_ssl_key else "http",
        router_hostname=args.router_hostname,
        router_port=args.router_port,
        env=args.env,
        hello_timeout=args.hello_timeout,
    )

    r = RouterHandler
    r.ap_settings = settings
    n = NotificationHandler
    n.ap_settings = settings

    # Internal HTTP notification router
    site = cyclone.web.Application([
        (r"/push/([^\/]+)", r),
        (r"/notif/([^\/]+)(/([^\/]+))?", n),
    ],
                                   default_host=settings.router_hostname,
                                   debug=args.debug,
                                   log_function=skip_request_logging)
    mount_health_handlers(site, settings)

    # Public websocket server
    proto = "wss" if args.ssl_key else "ws"
    factory = WebSocketServerFactory(
        "%s://%s:%s/" % (proto, args.hostname, args.port),
        debug=args.debug,
        debugCodePaths=args.debug,
    )
    factory.protocol = PushServerProtocol
    factory.protocol.ap_settings = settings
    factory.setProtocolOptions(
        webStatus=False,
        maxFramePayloadSize=args.max_message_size,
        maxMessagePayloadSize=args.max_message_size,
        openHandshakeTimeout=5,
        autoPingInterval=args.auto_ping_interval,
        autoPingTimeout=args.auto_ping_timeout,
        maxConnections=args.max_connections,
        closeHandshakeTimeout=args.close_handshake_timeout,
    )
    settings.factory = factory

    settings.metrics.start()

    # Wrap the WebSocket server in a default resource that exposes the
    # `/status` handler, and delegates to the WebSocket resource for all
    # other requests.
    resource = DefaultResource(WebSocketResource(factory))
    resource.putChild("status", StatusResource())
    siteFactory = Site(resource)

    # Start the WebSocket listener.
    if args.ssl_key:
        contextFactory = AutopushSSLContextFactory(args.ssl_key, args.ssl_cert)
        if args.ssl_dh_param:
            contextFactory.getContext().load_tmp_dh(args.ssl_dh_param)

        reactor.listenSSL(args.port, siteFactory, contextFactory)
    else:
        reactor.listenTCP(args.port, siteFactory)

    # Start the internal routing listener.
    if args.router_ssl_key:
        contextFactory = AutopushSSLContextFactory(args.router_ssl_key,
                                                   args.router_ssl_cert)
        if args.ssl_dh_param:
            contextFactory.getContext().load_tmp_dh(args.ssl_dh_param)
        reactor.listenSSL(args.router_port, site, contextFactory)
    else:
        reactor.listenTCP(args.router_port, site)

    reactor.suggestThreadPoolSize(50)

    l = task.LoopingCall(periodic_reporter, settings)
    l.start(1.0)
    reactor.run()
Beispiel #22
0
            self.websocket_extensions_in_use))

    def onMessage(self, payload, isBinary):
        self.sendMessage(payload, isBinary)


if __name__ == '__main__':

    if len(sys.argv) > 1 and sys.argv[1] == 'debug':
        log.startLogging(sys.stdout)
        debug = True
    else:
        debug = False

    factory = WebSocketServerFactory("ws://127.0.0.1:9000",
                                     debug=debug,
                                     debugCodePaths=debug)

    factory.protocol = EchoServerProtocol

    # Enable WebSocket extension "permessage-deflate".
    ##

    # Function to accept offers from the client ..
    def accept(offers):
        for offer in offers:
            if isinstance(offer, PerMessageDeflateOffer):
                return PerMessageDeflateOfferAccept(offer)

    factory.setProtocolOptions(perMessageCompressionAccept=accept)
Beispiel #23
0
from twisted.python import log
from twisted.web.server import Site
from twisted.web.static import File

from autobahn.twisted.websocket import WebSocketServerFactory, \
    WebSocketServerProtocol, \
    listenWS

from autobahn.twisted.resource import WebSocketResource

if __name__ == '__main__':

    log.startLogging(sys.stdout)

    factory = WebSocketServerFactory("ws://127.0.0.1:9000",
                                     debug=False,
                                     debugCodePaths=True)
    factory.protocol = WebSocketServerProtocol

    factory.setProtocolOptions(autoPingInterval=1,
                               autoPingTimeout=3,
                               autoPingSize=20)

    listenWS(factory)

    resource = WebSocketResource(factory)

    root = File(".")
    root.putChild("ws", resource)
    site = Site(root)
Beispiel #24
0
if __name__ == '__main__':

    from twisted.python import log
    from twisted.internet import reactor

    log.startLogging(sys.stdout)
    #sys.argv.append('script_server')
    sys.argv.append('localhost')
    sys.argv.append('9000')

    # sys.argv[0] = file name of this script
    # sys.argv[1] = ip address of this server
    # sys.argv[2] = port to listen on
    factory = WebSocketServerFactory("ws://" + 'localhost' + ":" +
                                     str(sys.argv[2]),
                                     debug=True)
    factory.setProtocolOptions(failByDrop=False)
    factory.protocol = MyServerProtocol

    udpbport = 8085
    multicast = reactor.listenMulticast(udpbport,
                                        MulticastProtocol(),
                                        listenMultiple=True)

    check = task.LoopingCall(check_for_main_server)
    call_period = 1  #sec
    check.start(call_period)
    try:
        reactor.listenTCP(int(sys.argv[2]), factory)
    except twisted.internet.error.CannotListenError:
Beispiel #25
0
check_timeouts()

def send_clock_updates():
    manager.send_clock_updates()
    reactor.callLater(5.0, send_clock_updates)
send_clock_updates()


# line server
factory = Factory()
factory.protocol = ChessLineProtocol
factory.clients = []
reactor.listenTCP(args.port, factory)

# websocket server
websocket_factory = WebSocketServerFactory()
websocket_factory.protocol = ChessWebSocketsProtocol
reactor.listenTCP(args.websocket_port, websocket_factory)

# HTTP server
reactor.listenTCP(args.http_port, server.Site(HttpRoot(manager)))

reactor.run()







Beispiel #26
0
            self.websocket_extensions_in_use))

    def onMessage(self, payload, isBinary):
        self.sendMessage(payload, isBinary)


if __name__ == '__main__':

    if len(sys.argv) > 1 and sys.argv[1] == 'debug':
        log.startLogging(sys.stdout)
        debug = True
    else:
        debug = False

    factory = WebSocketServerFactory("ws://localhost:9000",
                                     debug=debug,
                                     debugCodePaths=debug)

    factory.protocol = EchoServerProtocol

    # Enable WebSocket extension "permessage-deflate".
    ##

    # Function to accept offers from the client ..
    def accept(offers):
        for offer in offers:
            if isinstance(offer, PerMessageDeflateOffer):
                return PerMessageDeflateOfferAccept(offer)

    factory.setProtocolOptions(perMessageCompressionAccept=accept)
Beispiel #27
0
            "type": "ANNOTATED",
            "content": content
        }
        plt.close()
        
        #from random import randint
        #if randint(0,9) > 5:
        self.sendMessage(json.dumps(msg))

    def open(self, openFlag):

        print("Remote open command: '{0}'".format(openFlag))
        
        payload = {'open': openFlag}

        # GET with params in URL
        r = requests.get(rb_url, params=payload)
        
        r.text
        r.status_code

if __name__ == '__main__':
    log.startLogging(sys.stdout)

    factory = WebSocketServerFactory("ws://localhost:{}".format(args.port),
                                     debug=False)
    factory.protocol = OpenFaceServerProtocol

    reactor.listenTCP(args.port, factory)
    reactor.run()
Beispiel #28
0
 def start(self) -> None:
     ws = WebSocketServerFactory("ws://127.0.0.1:" + str(self.PORT))
     ws.protocol = WebSocketProtocol
     reactor.listenTCP(self.PORT, ws)

class MyWebSocketProtocol(WebSocketServerProtocol):
    def onConnect(self, request):
        logging.error("Client connecting: {}".format(request.peer))

    def onOpen(self):
        logging.error("WebSocket connection open.")

    def onMessage(self, payload, isBinary):
        if isBinary:
            logging.error("Binary message received: {} bytes".format(
                len(payload)))
            text = None
        else:
            logging.error("Text message received: {}".format(
                payload.decode('utf8')))
        for i in tuling_request(payload.decode('utf8')):
            self.sendMessage(i.encode('utf-8'), isBinary)

    def onClose(self, wasClean, code, reason):
        logging.error("WebSocket connection closed: {}".format(reason))


if __name__ == '__main__':
    log.startLogging(sys.stdout)
    factory = WebSocketServerFactory()
    factory.protocol = MyWebSocketProtocol
    reactor.listenTCP(8007, factory)
    reactor.run()
Beispiel #30
0
                payload.decode("utf8"),
                self.factory.clientconnection.request.peer))
        message = payload.decode("utf8")
        message = message.replace(os.environ.get("OLD_HOST", ""),
                                  os.environ.get("NEW_HOST", ""))
        self.factory.clientconnection.sendMessage(message.encode("utf8"))

    def onClose(self, wasClean, code, reason):
        """
        If the BACKEND connection gets closed also close the client connection
        """
        print("{1}: backend WebSocket connection closed: {0}".format(
            reason, self.factory.clientconnection.request.peer))
        self.factory.clientconnection.sendClose()


if __name__ == "__main__":

    load_dotenv()
    log.startLogging(sys.stdout)
    # txaio.start_logging(level="debug")

    FACTORY = WebSocketServerFactory()
    FACTORY.protocol = WebsocketInfoServerProtocol
    FACTORY.setProtocolOptions(autoPingInterval=10,
                               autoPingTimeout=3,
                               trustXForwardedFor=1)

    reactor.listenTCP(os.environ.get("PORT", 8080), FACTORY)
    reactor.run()