cm

class steam.core.cm.CMClient(protocol=0)

Bases: eventemitter.EventEmitter

CMClient provides a secure message channel to Steam CM servers Can be used as mixing or on it’s own.

Incoming messages are parsed and emitted as events using their steam.enums.emsg.EMsg as event identifier

EVENT_CONNECTED = 'connected'

Connection establed to CM server

EVENT_DISCONNECTED = 'disconnected'

Connection closed

EVENT_RECONNECT = 'reconnect'

Delayed connect

Parameters:delay (int) – delay in seconds
EVENT_CHANNEL_SECURED = 'channel_secured'

After successful completion of encryption handshake

EVENT_ERROR = 'error'

When login is denied

Parameters:eresult (EResult) – reason
EVENT_EMSG = 0

All incoming messages are emitted with their EMsg number.

PROTOCOL_TCP = 0

TCP protocol enum

PROTOCOL_UDP = 1

UDP protocol enum

verbose_debug = False

print message connects in debug

current_server_addr = None

(ip, port) tuple

connected = False

True if connected to CM

channel_secured = False

True once secure channel handshake is complete

channel_key = None

channel encryption key

channel_hmac = None

HMAC secret

steam_id = SteamID(id=0, type='Invalid', universe='Invalid', instance=0)

SteamID of the current user

session_id = None

session id when logged in

cm_servers = None

a instance of CMServerList

emit(event, *args)
connect(retry=0, delay=0)

Initiate connection to CM. Blocks until connected unless retry is specified.

Parameters:
  • retry (int) – number of retries before returning. Unlimited when set to None
  • delay (int) – delay in secnds before connection attempt
Returns:

successful connection

Return type:

bool

disconnect()

Close connection

send(message)

Send a message

Parameters:message (steam.core.msg.Msg, steam.core.msg.MsgProto) – a message instance
sleep(seconds)

Yeild and sleep N seconds. Allows other greenlets to run

idle()

Yeild in the current greenlet and let other greenlets run

class steam.core.cm.CMServerList(bad_timespan=300)

Bases: object

Managing object for CM servers

Comes with built in list of CM server to bootstrap a connection

To get a server address from the list simply iterate over it

servers = CMServerList()
for server_addr in servers:
    pass

The good servers are returned first, then bad ones. After failing to connect call mark_bad() with the server addr. When connection succeeds break out of the loop.

Good = 1
Bad = 2
clear()

Clears the server list

bootstrap_from_builtin_list()

Resets the server list to the built in one. This method is called during initialization.

bootstrap_from_webapi(cellid=0)

Fetches CM server list from WebAPI and replaces the current one

Parameters:cellid (int) – cell id (0 = global)
Returns:booststrap success
Return type:bool
reset_all()

Reset status for all servers in the list

mark_good(server_addr)

Mark server address as good

Parameters:server_addr (tuple) – (ip, port) tuple
mark_bad(server_addr)

Mark server address as bad, when unable to connect for example

Parameters:server_addr (tuple) – (ip, port) tuple
merge_list(new_list)

Add new CM servers to the list

Parameters:new_list (list) – a list of (ip, port) tuples