Browse Source

irc_support.py: modify code to simplify testing

add-joinmarket
zebra-lucky 1 year ago
parent
commit
6d32affd45
  1. 32
      electrum/plugins/joinmarket/jmdaemon/irc_support.py

32
electrum/plugins/joinmarket/jmdaemon/irc_support.py

@ -27,44 +27,42 @@ class IRCClientService:
self.srv_task = None
self.stop_task = None
async def _create_connection(self, wait_sec):
loop = self.loop
proxy = self.proxy
if self.stop_task and not self.stop_task.done():
await self.stop_task
self.stop_task = None
async def create_conn(sslc):
self.transport, self.protocol = await loop.create_connection(
async def _create_conn(self, sslc):
self.transport, self.protocol = await self.loop.create_connection(
self.factory.buildProtocol, self.host, self.port,
ssl=sslc)
async def proxy_create_conn(sslc):
self.transport, self.protocol = await proxy.create_connection(
async def _proxy_create_conn(self, sslc):
self.transport, self.protocol = await self.proxy.create_connection(
self.factory.buildProtocol, self.host, self.port,
ssl=sslc)
async def _start_service(self, wait_sec):
if self.stop_task and not self.stop_task.done():
await self.stop_task
self.stop_task = None
await asyncio.sleep(wait_sec)
try:
sslc = None
if self.usessl:
sslc = ssl.SSLContext(protocol=ssl.PROTOCOL_TLS_CLIENT)
sslc.check_hostname = False
sslc.verify_mode = ssl.CERT_NONE
if self.socks5:
await asyncio.wait_for(proxy_create_conn(sslc), timeout=60)
await asyncio.wait_for(self._proxy_create_conn(sslc),
timeout=60)
else:
await asyncio.wait_for(create_conn(sslc), timeout=30)
await asyncio.wait_for(self._create_conn(sslc), timeout=30)
except BaseException as e:
self.logger.error(f'create_connection: {repr(e)}')
self.logger.error(f'_start_service: {repr(e)}')
self.factory.clientConnectionFailed(str(e))
def startService(self):
wait_sec = 5 if self.stop_task else 0
self.srv_task = asyncio.create_task(self._create_connection(wait_sec))
self.srv_task = asyncio.create_task(self._start_service(wait_sec))
async def _stop_service(self):
try:
if self.srv_task and not self.srv_task.done():
self.srv_task.cancel()
self.srv_task = None
@ -73,6 +71,8 @@ class IRCClientService:
self.transport.close()
self.transport = None
self.protocol = None
except BaseException as e:
self.logger.error(f'_stop_service: {repr(e)}')
def stopService(self):
self.stop_task = asyncio.create_task(self._stop_service())

Loading…
Cancel
Save