class BCodeTransport(Transport):
    '''implements beencoding and bedecoding over channels that may
	send partial section of each data structure'''
    def __init__(self, sendBytes, receivedDataCb=None):
        '''initialises the transport

		sendBytes => method of one param, taking a byte[] which is used to send bytes
		receivedDataCb => method of one param, taking any python data when data is received'''

        self._callbacks = []
        if receivedDataCb != None:
            self._callbacks.append(receivedDataCb)

        self._bcode = AsyncBCodeDeserialiser()
        self._bcode.register_cb(self.receive_internal)
        self._sender = sendBytes

    def receive_internal(self, data):
        map(lambda f: f(data), self._callbacks)

    def add_callback(self, receivedDataCb):
        self._callbacks.append(receivedDataCb)

    def send(self, data):
        '''sends the data encoded'''

        self._sender(bcode.bencode(data))

    def receive(self, raw):
        '''accepts raw data and determines when to invoke the callback when
		enough data has been received.

		raw => byte array'''

        self._bcode.push_data(raw)
    def __init__(self, sendBytes, receivedDataCb=None):
        '''initialises the transport

		sendBytes => method of one param, taking a byte[] which is used to send bytes
		receivedDataCb => method of one param, taking any python data when data is received'''

        self._callbacks = []
        if receivedDataCb != None:
            self._callbacks.append(receivedDataCb)

        self._bcode = AsyncBCodeDeserialiser()
        self._bcode.register_cb(self.receive_internal)
        self._sender = sendBytes
    def __init__(self, sendBytes, receivedDataCb=None):
        """initialises the transport

		sendBytes => method of one param, taking a byte[] which is used to send bytes
		receivedDataCb => method of one param, taking any python data when data is received"""

        self._callbacks = []
        if receivedDataCb != None:
            self._callbacks.append(receivedDataCb)

        self._bcode = AsyncBCodeDeserialiser()
        self._bcode.register_cb(self.receive_internal)
        self._sender = sendBytes
class BCodeTransport(Transport):
    """implements beencoding and bedecoding over channels that may
	send partial section of each data structure"""

    def __init__(self, sendBytes, receivedDataCb=None):
        """initialises the transport

		sendBytes => method of one param, taking a byte[] which is used to send bytes
		receivedDataCb => method of one param, taking any python data when data is received"""

        self._callbacks = []
        if receivedDataCb != None:
            self._callbacks.append(receivedDataCb)

        self._bcode = AsyncBCodeDeserialiser()
        self._bcode.register_cb(self.receive_internal)
        self._sender = sendBytes

    def receive_internal(self, data):
        map(lambda f: f(data), self._callbacks)

    def add_callback(self, receivedDataCb):
        self._callbacks.append(receivedDataCb)

    def send(self, data):
        """sends the data encoded"""

        self._sender(bcode.bencode(data))

    def receive(self, raw):
        """accepts raw data and determines when to invoke the callback when
		enough data has been received.

		raw => byte array"""

        self._bcode.push_data(raw)