Source code for pokerthproto.proxy

# -*- coding: utf-8 -*-
"""
A PokerTH proxy that logs all messages between a PokerTH client and server.
"""

from __future__ import print_function, absolute_import, division

from twisted.internet import reactor
from twisted.python import log
from twisted.internet.protocol import Factory
from twisted.internet.endpoints import TCP4ClientEndpoint

from . import transport
from . import protocol

__author__ = 'Florian Wilhelm'
__copyright__ = 'Florian Wilhelm'


[docs]class ProxyProtocol(protocol.PokerTHProtocol):
[docs] def connectionMade(self): log.msg("Client connection established") self.point = TCP4ClientEndpoint(reactor, "localhost", 7234) client_factory = ClientProtocolFactory(self.sendToClient) proto = self.point.connect(client_factory) proto.addCallback(self.registerServer)
[docs] def registerServer(self, proto): self.client_proto = proto
[docs] def sendToClient(self, data): self.transport.write(data)
[docs] def dataReceived(self, data): for buffer in self._getBufferedData(data): msg = transport.develop(transport.unpack(buffer)) log.msg("Data: {}".format(buffer.encode('hex'))) log.msg("{} from client:\n{}".format(msg.__class__.__name__, msg)) self.client_proto.transport.write(data)
[docs]class ProxyProtocolFactory(Factory): protocol = ProxyProtocol
[docs]class ClientProtocol(protocol.PokerTHProtocol):
[docs] def dataReceived(self, data): for buffer in self._getBufferedData(data): msg = transport.develop(transport.unpack(buffer)) log.msg("Data: {}".format(buffer.encode('hex'))) log.msg("{} from server:\n{}".format(msg.__class__.__name__, msg)) self.factory.sendToClient(data)
[docs]class ClientProtocolFactory(Factory): protocol = ClientProtocol def __init__(self, sendToClient): self.sendToClient = sendToClient