Compare commits

...

4 Commits

Author SHA1 Message Date
tecnovert bc0183ef7f more debug messages. 5 months ago
tecnovert d91b869759 Add debug msg 5 months ago
tecnovert 815e54ea69
Fix zmq stuck in off mode. 5 months ago
tecnovert 5c4c5089cb
Add debug messages and smsg polling mode. 5 months ago
  1. 94
      basicswap/basicswap.py
  2. 2
      basicswap/ui/page_encryption.py

94
basicswap/basicswap.py

@ -244,6 +244,10 @@ class BasicSwap(BaseApp):
self._possibly_revoked_offers = collections.deque([], maxlen=48) # TODO: improve
self._updating_wallets_info = {}
self._last_updated_wallets_info = 0
self._zmq_queue_enabled = self.settings.get('zmq_queue_enabled', True)
self._poll_smsg = self.settings.get('poll_smsg', False)
self.check_smsg_seconds = self.settings.get('check_smsg_seconds', 10)
self._last_checked_smsg = 0
self._notifications_enabled = self.settings.get('notifications_enabled', True)
self._disabled_notification_types = self.settings.get('disabled_notification_types', [])
@ -336,11 +340,12 @@ class BasicSwap(BaseApp):
session.close()
session.remove()
self.zmqContext = zmq.Context()
self.zmqSubscriber = self.zmqContext.socket(zmq.SUB)
if self._zmq_queue_enabled:
self.zmqContext = zmq.Context()
self.zmqSubscriber = self.zmqContext.socket(zmq.SUB)
self.zmqSubscriber.connect(self.settings['zmqhost'] + ':' + str(self.settings['zmqport']))
self.zmqSubscriber.setsockopt_string(zmq.SUBSCRIBE, 'smsg')
self.zmqSubscriber.connect(self.settings['zmqhost'] + ':' + str(self.settings['zmqport']))
self.zmqSubscriber.setsockopt_string(zmq.SUBSCRIBE, 'smsg')
for c in Coins:
if c in chainparams:
@ -388,7 +393,8 @@ class BasicSwap(BaseApp):
else:
self.thread_pool.shutdown()
self.zmqContext.destroy()
if self._zmq_queue_enabled:
self.zmqContext.destroy()
self.swaps_in_progress.clear()
close_all_sessions()
@ -908,28 +914,37 @@ class BasicSwap(BaseApp):
self._is_encrypted, self._is_locked = self.ci(Coins.PART).isWalletEncryptedLocked()
def unlockWallets(self, password: str, coin=None) -> None:
self._read_zmq_queue = False
for c in self.getListOfWalletCoins():
if coin and c != coin:
continue
self.ci(c).unlockWallet(password)
if c == Coins.PART:
self._is_locked = False
self.log.debug('[rm] unlockWallets')
try:
self._read_zmq_queue = False
self.log.debug('[rm] getListOfWalletCoins {}'.format(self.getListOfWalletCoins()))
for c in self.getListOfWalletCoins():
if coin and c != coin:
continue
self.ci(c).unlockWallet(password)
if c == Coins.PART:
self._is_locked = False
self.loadFromDB()
self._read_zmq_queue = True
self.loadFromDB()
except Exception as e:
self.log.error(f'[rm] unlockWallets failed {e}')
raise (e)
finally:
self._read_zmq_queue = True
def lockWallets(self, coin=None) -> None:
self._read_zmq_queue = False
self.swaps_in_progress.clear()
try:
self._read_zmq_queue = False
self.swaps_in_progress.clear()
for c in self.getListOfWalletCoins():
if coin and c != coin:
continue
self.ci(c).lockWallet()
if c == Coins.PART:
self._is_locked = True
self._read_zmq_queue = True
for c in self.getListOfWalletCoins():
if coin and c != coin:
continue
self.ci(c).lockWallet()
if c == Coins.PART:
self._is_locked = True
finally:
self._read_zmq_queue = True
def initialiseWallet(self, coin_type, raise_errors: bool = False) -> None:
if coin_type == Coins.PART:
@ -4236,7 +4251,7 @@ class BasicSwap(BaseApp):
self.log.error(traceback.format_exc())
now: int = self.getTime()
options = {'encoding': 'none'}
options = {'encoding': 'none', 'setread': False}
inbox_messages = ci_part.json_request(rpc_conn, 'smsginbox', ['all', '', options])['messages']
for msg in inbox_messages:
remove_if_expired(msg)
@ -6055,15 +6070,28 @@ class BasicSwap(BaseApp):
self.processMsg(msg)
def update(self) -> None:
try:
if self._read_zmq_queue:
message = self.zmqSubscriber.recv(flags=zmq.NOBLOCK)
if message == b'smsg':
self.processZmqSmsg()
except zmq.Again as ex:
pass
except Exception as ex:
self.logException(f'smsg zmq {ex}')
if self._zmq_queue_enabled:
try:
if self._read_zmq_queue:
message = self.zmqSubscriber.recv(flags=zmq.NOBLOCK)
self.log.debug('[rm] zmq msg {}'.format(message))
if message == b'smsg':
self.processZmqSmsg()
except zmq.Again as ex:
pass
except Exception as ex:
self.logException(f'smsg zmq {ex}')
if self._poll_smsg:
now: int = self.getTime()
if now - self._last_checked_smsg >= self.check_smsg_seconds:
self.log.debug('[rm] self._read_zmq_queue {}'.format(self._read_zmq_queue))
self._last_checked_smsg = now
options = {'encoding': 'hex', 'setread': True}
msgs = self.callrpc('smsginbox', ['unread', '', options])
self.log.debug('[rm] len msgs {}'.format(len(msgs['messages'])))
for msg in msgs['messages']:
self.processMsg(msg)
self.mxDB.acquire()
try:

2
basicswap/ui/page_encryption.py

@ -61,6 +61,8 @@ def page_unlock(self, url_split, post_string):
self.end_headers()
return bytes()
except Exception as e:
if swap_client.debug is True:
swap_client.log.error(str(e))
err_messages.append(str(e))
template = server.env.get_template('unlock.html')

Loading…
Cancel
Save