を使用してtwistd
います。アプリケーションの唯一のサービスは次のとおりです。
class GameClientService(internet.TCPClient):
def __init__(self, serverHost, serverPort):
self.wxApp = wx.App(False)
reactor.registerWxApp(self.wxApp)
self.lobbyFrame = gui.LobbyFrame()
internet.TCPClient.__init__(self, serverHost, serverPort, LobbyProtocolFactory(self.lobbyFrame))
def stopService(self):
internet.TCPClient.stopService(self)
print "Stop service!"
destroyedD = defer.Deferred()
self.lobbyFrame.CloseWithCallback(destroyedD.callback, True)
print "close called!"
def fired(result):
print "'Destroyed' deferred has fired with %s" % (result,)
destroyedD.addCallback(fired)
return destroyedD
CloseWithCallback
はwx.Frame
次のように定義されます。
def CloseWithCallback(self, callback, *callbackArgs):
def destroyed(event):
event.Skip()
callback(*callbackArgs)
self.Bind(wx.EVT_WINDOW_DESTROY, destroyed)
self.Close()
のLobbyProtocol
ファクトリでは、接続に失敗した場合にリアクターを停止します。
def clientConnectionFailed(self, connector, reason):
print "Client connection failed: %s" % reason.getErrorMessage()
reactor.stop()
リッスン サーバーなしでクライアントを実行しているため、接続が失敗することがあります (半分以上になることもありますが、常にではありません)。
2012-11-12 18:43:29-0500 [-] Started connecting <twisted.internet.tcp.Connector instance at 0x030E3800>
2012-11-12 18:43:30-0500 [Uninitialized] Client connection failed: Connection was refused by other side: 10061: No connection could be made because the target machine actively refused it..
2012-11-12 18:43:30-0500 [Uninitialized] Stopping factory <network.LobbyProtocol.LobbyProtocolFactory instance at 0x030E3698>
2012-11-12 18:43:30-0500 [-] Stop service!
2012-11-12 18:43:30-0500 [-] 'Destroyed' deferred has fired with True
2012-11-12 18:43:30-0500 [-] Traceback (most recent call last):
2012-11-12 18:43:30-0500 [-] File "C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\_core.py", line 14669, in <lambda>
2012-11-12 18:43:30-0500 [-] lambda event: event.callable(*event.args, **event.kw) )
2012-11-12 18:43:30-0500 [-] File "C:\Python26\lib\site-packages\twisted\internet\_threadedselect.py", line 232, in _interleave
2012-11-12 18:43:30-0500 [-] msg, args = self.toMainThread.get_nowait()
2012-11-12 18:43:30-0500 [-] File "C:\Python26\lib\Queue.py", line 190, in get_nowait
2012-11-12 18:43:30-0500 [-] return self.get(False)
2012-11-12 18:43:30-0500 [-] File "C:\Python26\lib\Queue.py", line 165, in get
2012-11-12 18:43:30-0500 [-] raise Empty
2012-11-12 18:43:30-0500 [-] Queue.Empty
2012-11-12 18:43:30-0500 [-] Server Shut Down.
2012-11-12 18:43:30-0500 [-] Server Shut Down.
これは私を不快にさせます。トレースバックが実行されないようにするにはどうすればよいですか? 私は何を間違えましたか?