From 4e110730567c0afe69d95b12243da852d9e865a1 Mon Sep 17 00:00:00 2001 From: Rossen Georgiev Date: Sat, 22 Jul 2017 12:34:30 +0300 Subject: [PATCH] SteamClient: use of sleep & idle methods fix #89 --- steam/client/__init__.py | 18 +++++------------- steam/core/cm.py | 16 ++++++++++++---- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/steam/client/__init__.py b/steam/client/__init__.py index 6d15d76..3fb2c4d 100644 --- a/steam/client/__init__.py +++ b/steam/client/__init__.py @@ -193,7 +193,7 @@ class SteamClient(CMClient, BuiltinBase): if self.logged_on: self.send(resp) - gevent.idle() + self.idle() self.login_key = message.body.login_key self.emit(self.EVENT_NEW_LOGIN_KEY) @@ -519,7 +519,7 @@ class SteamClient(CMClient, BuiltinBase): resp = self.wait_msg(EMsg.ClientLogOnResponse, timeout=30) if resp.body.eresult == EResult.OK: - gevent.sleep(0.5) + self.sleep(0.5) return EResult(resp.body.eresult) if resp else EResult.Fail @@ -555,7 +555,7 @@ class SteamClient(CMClient, BuiltinBase): self.logged_on = False self.send(MsgProto(EMsg.ClientLogOff)) self.wait_event('disconnected') - gevent.idle() + self.idle() def run_forever(self): """ @@ -564,15 +564,7 @@ class SteamClient(CMClient, BuiltinBase): This is useful when the application is setup and ment to run for a long time """ while True: - gevent.sleep(300) - - def sleep(self, seconds): - """Yeild and sleep N seconds. Allows other greenlets to run""" - gevent.sleep(seconds) - - def idle(self): - """Yeild in the current greenlet and let other greenlets run""" - gevent.idle() + self.sleep(300) def cli_login(self, username='', password=''): """Generates CLI prompts to complete the login process @@ -612,7 +604,7 @@ class SteamClient(CMClient, BuiltinBase): EResult.TryAnotherCM, EResult.ServiceUnavailable, EResult.InvalidPassword, ): - gevent.sleep(0.1) + self.sleep(0.1) if result == EResult.InvalidPassword: password = getpass("Invalid password for %s. Enter password: " % repr(username)) diff --git a/steam/core/cm.py b/steam/core/cm.py index 3167608..603b5d7 100644 --- a/steam/core/cm.py +++ b/steam/core/cm.py @@ -116,7 +116,7 @@ class CMClient(EventEmitter): if delay: self._LOG.debug("Delayed connect: %d seconds" % delay) self.emit(self.EVENT_RECONNECT, delay) - gevent.sleep(delay) + self.sleep(delay) self._LOG.debug("Connect initiated.") @@ -134,7 +134,7 @@ class CMClient(EventEmitter): self._LOG.debug("Failed to connect. Retrying...") if diff < 5: - gevent.sleep(5 - diff) + self.sleep(5 - diff) self.current_server_addr = server_addr self.connected = True @@ -219,7 +219,7 @@ class CMClient(EventEmitter): message = crypto.symmetric_decrypt(message, self.channel_key) gevent.spawn(self._parse_message, message) - gevent.idle() + self.idle() if not self._seen_logon and self.channel_secured: if self.wait_event('disconnected', timeout=5) is not None: @@ -334,7 +334,7 @@ class CMClient(EventEmitter): message = MsgProto(EMsg.ClientHeartBeat) while True: - gevent.sleep(interval) + self.sleep(interval) self.send(message) def _handle_logon(self, msg): @@ -370,6 +370,14 @@ class CMClient(EventEmitter): new_servers = zip(map(ip_from_int, msg.body.cm_addresses), msg.body.cm_ports) self.cm_servers.merge_list(new_servers) + def sleep(self, seconds): + """Yeild and sleep N seconds. Allows other greenlets to run""" + gevent.sleep(seconds) + + def idle(self): + """Yeild in the current greenlet and let other greenlets run""" + gevent.idle() + class CMServerList(object): """