Python Twisted receive command from TCP write to Serial device return response

后端 未结 2 581
梦谈多话
梦谈多话 2021-02-10 17:34

I\'ve managed to connect to usb modem and a client can connect via tcp to my reactor.listenTCP,the data received from modem will be send back to client. I\'m want to take dataRe

2条回答
  •  梦毁少年i
    2021-02-10 18:21

    Your problem is not about twisted, but about python. Read this FAQ entry:

    How do I make input on one connection result in output on another?

    Thing is, if you want to send stuff to a TCP-connected client in your serial-connected protocol, just pass to the protocol a reference to the factory, so you can use that reference to make the bridge.

    Here's some example code that roughly does this:

    class USBClient(Protocol):
        def __init__(self, network):
            self.network = network
        def dataReceived(self, data):
            print "Data received", repr(data)
            #check & perhaps modify response and return to client
            self.network.notifyAll(data)
        #...    
    
    class CommandRx(Protocol):
        def connectionMade(self):
            self.factory.client_list.append(self)
        def connectionLost(self, reason):
            if self in self.factory.client_list:
                self.factory.client_list.remove(self)
    
    class CommandRxFactory(Factory):
        protocol = CommandRx
        def __init__(self):
            self.client_list = []
    
        def notifyAll(self, data):
            for cli in self.client_list:
                cli.transport.write(data)
    

    When initializing, pass the reference:

    tcpfactory = CommandRxFactory()
    reactor.listenTCP(8000, tcpfactory)
    SerialPort(USBClient(tcpfactory), 'COM8', reactor, baudrate='19200')
    reactor.run()
    

提交回复
热议问题