Browse Source

SteamClient: use of sleep & idle methods

fix #89
pull/121/head
Rossen Georgiev 8 years ago
parent
commit
4e11073056
  1. 18
      steam/client/__init__.py
  2. 16
      steam/core/cm.py

18
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))

16
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):
"""

Loading…
Cancel
Save