Python で初めてソケットを使用していますが、問題があります。
UDP サーバー用のスレッド化された要求ハンドラーがありますが、その動作方法が原因で (ここで提案されているように)、それに引数を渡す方法がわかりません。ネットワーク内のさまざまなクライアントによって実行されたアクションを通知する必要があるため、アプリケーション内の他のオブジェクトにアクセスするために必要です。ただし、ハンドラーを表すクラスはインスタンス化できないため、コンストラクターを介して引数を取ることはできません。
これは私のコードの簡略版です。
class ThreadedUDPRequestHandler(socketserver.BaseRequestHandler):
def handle(self):
data = self.request[0].strip()
socket = self.request[1]
print ("{} wrote:".format(self.client_address[0]))
print (data)
#Ideally, I'd call a method of an object here
class ThreadedUDPServer(socketserver.ThreadingMixIn, socketserver.UDPServer):
pass
class ServerManager():
def __init__(self, player_box):
self.player_box = player_box
HOST, PORT = "xxx.xxx.xxx.xxx", 9999
self.server = ThreadedUDPServer((HOST, PORT), ThreadedUDPRequestHandler)
ip, port = self.server.server_address
def start(self):
server_thread = threading.Thread(target=self.server.serve_forever)
server_thread.start()
def stop(self):
self.server.shutdown()
この場合、リクエスト ハンドラにアクセスさせたいオブジェクトは player_box です。目標は、リクエストが行われるたびにそのオブジェクトのメソッドを呼び出すことです。これを行う方法はありますか、それとも別のアプローチを使用する必要がありますか?
ここに同様の質問があることに気付きましたが、提案された解決策はまったく機能しません。実際、私にはあまり意味がありません...