Skip to content

BNCS Client

David edited this page Oct 5, 2018 · 1 revision

BNCS Client

A basic implementation of the BNCS protocol.

Constructor

  • BncsClient() - creates a new BNCS client

Methods

  • connect(host, [port]) - connects to the specified host and port (default port is 6112)
  • disconnect() - disconnects the client
  • send_packet(id, payload) - sends a packet with the given ID and payload
  • wait_for_packet(id, [timeout]) - blocks until a packet with the given ID is received, or the timeout is exceeded
  • authenticate(product, [keys], [owner], [bnls server]) - authenticates as the specified product
    • For products requiring CD keys, 'keys' should be a list of the keys as strings
    • 'Owner' is the name displayed if someone tries to login with your key while you're using it.
    • 'bnls server' is the server to use for performing the authentication. Default is jbls.davnit.net
    • Returns True/False and a message explaining the result
  • login(username, password) - logs into an account
    • Returns True/False and a message explaining the result
  • create_account(username, password) - attempts to create an account
    • Returns True/False and a message explaining the result
  • enter_chat() - enters the chat environment and joins the default channel
  • leave_chat() - leaves the chat environment without disconnecting from the server
  • chat_command(text) - sends a chat command to the server

Properties

  • connected() - returns TRUE if the client is connected to a server
  • verified() - returns TRUE if the server has been verified as an official Blizzard server
  • authenticated() - returns TRUE if the client has authenticated with the server (passed version check)
  • logged_on() - returns TRUE if the client has logged into an account
  • in_chat() - returns TRUE if the client is in the chat environment
  • get_username() - returns the client's active username
    • This may be different from the name used to login
  • packet_handlers - a map of packet ID's to handler functions (see below)

Custom packet handling

The client can be extended with custom packet handling by adding packet ID's to the packet_handlers property and assigning a function the them.

  • The function should have 2 arguments: packet_id and payload.
  • 'packet_id' will be the byte ID of the packet received (useful if multiple packets can be handled by the same handler function)
  • 'payload' is the DataReader object containing the packet's data (with the read position at the start of the payload).

Example

def _handle_message_box(packet_id, payload):
    payload.get_dword()
    text = payload.get_string()
    caption = payload.get_string()

    print("MSG - %s: %s" % (caption, text))

client = BncsClient()
client.packet_handlers[SID_MESSAGEBOX] = _handle_message_box

A sample program implementing this client can be found here: https://github.com/Davnit/bncs.py/blob/master/scripts/bncs_client.py

Clone this wiki locally