class ChatWebSocket(tornado.websocket.WebSocketHandler):
    """ Handler für Websocketverbindungen.
    
    Diese Klasse implementiert den Tornado-Handler für neue
    Websocketverbindungen. D.h., dass es für jede neue Verbindung eine neue
    Instanz dieser Klasse erstellt wird.
    
    Er implementiert die Methoden 'open()', 'on_close()' und 'on_message()',
    als Schnittstellen vom Webserver.
    
    Außerdem bietet er die Methode 'response()' an umd einen threadsicheren
    Kanal zum Socket zu bieten.
    """
    
    def open(self): #@ReservedAssignment
        """ Handler für neue Verbindungen.
        
        Erstellt einen neuen Client.
        """
        self.client = ChatClient(self)


    def on_close(self):
        """ Handler für das Beenden einer Verbindung.
        
        Teilt dem Client mit, dass die Verbindung geschlossen wird und löscht
        diesen dann, damit er (hoffentlich) vom Garbarge-Collector gelöscht
        wird.
        """
        if hasattr(self, "client"):
            self.client.close()
            del self.client

    
    def on_message(self, message):
        """ Handler für neue eintreffende Nachrichten.
        
        Dieser Handler wandelt den JSON-String in ein Objekt um und teilt dem
        Worker mit, dass er die neue Nachricht abarbeiten soll.
        """
        try:
            request = json.loads(message)
            event = request.pop('event')
            worker.add(self.client.request, args=(event,), kwargs=request)

        except Exception, e:
            self.exception_response(e)
 def open(self): #@ReservedAssignment
     """ Handler für neue Verbindungen.
     
     Erstellt einen neuen Client.
     """
     self.client = ChatClient(self)