私は、別のアプリケーションからデータを送受信するために使用している単純なねじれTCPサーバーを持っています。私は接続が確立されたら、このアプリケーションに連絡してメッセージを送信することができます。ねじれたサーバーにコマンドを送信します。
私ができるようにしたいのは、(接続されているときではなく)サードパーティのアプリケーションに送信するとき、および何を外部モジュールコマンドにするかです。たとえば、ここに私のサーバーコードです:
from twisted.internet import reactor, protocol
# Twisted
class Tcp(protocol.Protocol):
def dataReceived(self, data):
self.transport.write(data)
print 'data received: ', data
# do something with data
def connectionMade(self, msg):
# Want to only transport message when I command not immediately when connected
self.transport.write(msg)
class TcpFactory(protocol.Factory):
def buildProtocol(self, addr):
return Tcp()
reactor.listenTCP(8001, TcpFactory())
reactor.run()
私は(GUIインタフェースが運営)、別のモジュールを持って送信するためにどのようなメッセージを定義し、このメッセージは
connectionMade
に「MSG」として渡される必要がありますこれを行う最善の方法は何ですか?
私のサードパーティのモジュールと通信する最も良い方法は何ですか?私はreactor.listenTCP(...)をメインモジュールに呼んでいます。私は議論を通過することができますが、これは一度だけ起こることができますか?私はcallFromThreadのようなものを使うべきですか? – camerausb
「サードパーティのモジュールと通信する最善の方法」は、サードパーティのモジュール(あなたが何であるか、そして/または何をしているのかを明記していない)に依存します。 ''私は引数を渡すことができますが、これは一度しか起こりませんか? ''通常、 '' connectionMade''は一度呼び出され、それはあなたによって行われません。 Twistedはこの機能を呼び出してクライアント** TCP接続**を確認します。後でmsgを送信する必要がある場合は、別の関数を使用してメッセージを送信するか、遅延します。 '' callFromThread''はあなたが使用しているguiモジュールに応じて役に立つかもしれませんが、私たちはほとんどのスレッドを避けることができると思います。 –
私の質問は、別のモジュールの関数thirdPartyCommにメッセージを渡す方法です。上の遅延コードは、接続が確立されたときに一度しか実行されないようです。ボタンがクリックされるたびにコールバックが必要になります(私はPyQtを使用しています)。私はプロトコルクラスの関数にアクセスし、遅延を使用せずにself.transport.write(msg)で直接メッセージを送信できますが、これを行うとdataReceived(self、data)に何も取得されません。 – camerausb