Beispiel #1
0
def EBRPC_ReplicationServer(port, ebrpc):
    factory = protocol.Factory()
    factory.children = set()
    factory.protocol = RepeaterProtocol

    def render(request):
        request.content.seek(0, 0)
        if hasattr(request.content, 'getvalue'):
            c = request.content.getvalue()
            for child in factory.children:
                # don't worry, write is non-blocking
                child.transport.write(ebencode.make_int(len(c)))
                child.transport.write(c)
        else:
            c = buffer.Buffer()
            while True:
                b = request.content.read(100000)
                if len(b) == 0:
                    break
                c.write(b)
            c = str(c)
            for child in factory.children:
                # don't worry, write is non-blocking
                child.transport.write(ebencode.make_int(len(c)))
                child.transport.write(c)
            request.content.seek(0, 0)

    ebrpc.render = decorate_func(render, ebrpc.render)
    reactor.listenTCP(port, factory)
Beispiel #2
0
def EBRPC_ReplicationServer(port, ebrpc):
    factory = protocol.Factory()
    factory.children = set()
    factory.protocol = RepeaterProtocol
    def render(request):
        request.content.seek(0, 0)
        if hasattr(request.content, 'getvalue'):
            c = request.content.getvalue()
            for child in factory.children:
                # don't worry, write is non-blocking
                child.transport.write(ebencode.make_int(len(c)))
                child.transport.write(c)
        else:
            c = buffer.Buffer()
            while True:
                b = request.content.read(100000)
                if len(b) == 0:
                    break
                c.write(b)
            c = str(c)
            for child in factory.children:
                # don't worry, write is non-blocking
                child.transport.write(ebencode.make_int(len(c)))
                child.transport.write(c)
            request.content.seek(0, 0)                    
    ebrpc.render = decorate_func(render, ebrpc.render)
    reactor.listenTCP(port, factory)
 def create_serversocket(self, port, bind=''):
     s = SocketRequestProxy(port, bind, 'tcp')
 
     factory = ConnectionFactory(self, outgoing=False)
     try:
         s.listening_port = reactor.listenTCP(s.port, factory,
                                              interface=s.bind)
     except error.CannotListenError, e:
         if e[0] != 0:
             raise e.socketError
         else:
             raise
Beispiel #4
0
    def create_serversocket(self, port, bind=''):
        s = SocketRequestProxy(port, bind, 'tcp')

        factory = ConnectionFactory(self, outgoing=False)
        try:
            s.listening_port = reactor.listenTCP(s.port,
                                                 factory,
                                                 interface=s.bind)
        except error.CannotListenError, e:
            if e[0] != 0:
                raise e.socketError
            else:
                raise
    

if __name__ == '__main__':
    from BTL.reactor_magic import reactor

    ## server
    from BTL import twisted_ebrpc, replication
    from twisted.web import server
    class Server(twisted_ebrpc.EBRPC):
        def ebrpc_ping(self, *args):
            print 'server got: ping(%s)' % repr(args)
            assert args == (1002,)
            return args
    r = Server()
    replication.EBRPC_ReplicationServer(9000, r)
    reactor.listenTCP(7080, server.Site(r))


    ## listener 1 (simple)
    from twisted.internet.protocol import ClientFactory
    from BTL import replication
    from BTL.ebencode import ebdecode
    class PrintingReplicationListener(replication.ReplicationListener):
        def payloadReceived(self, payload):
            payload = ebdecode(payload)
            print 'listener got:', payload
            assert payload == {'a': [[1002], {}], 'q': 'ping', 'y': 'q'}
    factory = ClientFactory()
    factory.protocol = PrintingReplicationListener
    reactor.connectTCP('127.0.0.1', 9000, factory)
Beispiel #6
0
if __name__ == '__main__':
    from BTL.reactor_magic import reactor

    ## server
    from BTL import twisted_ebrpc, replication
    from twisted.web import server

    class Server(twisted_ebrpc.EBRPC):
        def ebrpc_ping(self, *args):
            print 'server got: ping(%s)' % repr(args)
            assert args == (1002, )
            return args

    r = Server()
    replication.EBRPC_ReplicationServer(9000, r)
    reactor.listenTCP(7080, server.Site(r))

    ## listener 1 (simple)
    from twisted.internet.protocol import ClientFactory
    from BTL import replication
    from BTL.ebencode import ebdecode

    class PrintingReplicationListener(replication.ReplicationListener):
        def payloadReceived(self, payload):
            payload = ebdecode(payload)
            print 'listener got:', payload
            assert payload == {'a': [[1002], {}], 'q': 'ping', 'y': 'q'}

    factory = ClientFactory()
    factory.protocol = PrintingReplicationListener
    reactor.connectTCP('127.0.0.1', 9000, factory)