Skip to content

Instantly share code, notes, and snippets.

@mthurlin
Created February 12, 2012 15:19
Show Gist options
  • Select an option

  • Save mthurlin/1809025 to your computer and use it in GitHub Desktop.

Select an option

Save mthurlin/1809025 to your computer and use it in GitHub Desktop.

Revisions

  1. Markus Thurlin created this gist Feb 12, 2012.
    62 changes: 62 additions & 0 deletions bpclient.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,62 @@
    import gevent
    from gevent import socket
    import re
    import json
    import traceback
    import datetime
    ip = "1.2.3.4"

    def beaconPushClient(callback, apiKey, channels):

    def listen(seqId):
    s = socket.create_connection((ip, 80))
    s.sendall("GET /spheres/%s/users/guest_123?sequenceId=%d&authToken=t&channels=%s HTTP/1.0\r\n" % (apiKey, seqId, ",".join(channels)))
    s.sendall("Host: server1.beaconpush.com\r\n")
    s.sendall("\r\n")
    buffer = ""
    while True:
    buf = s.recv(1024)
    if not buf:
    break
    buffer += buf
    if "\r\n\r\n" in buffer:
    break

    header, body = buffer.split("\r\n\r\n", 1)
    length = int(re.findall("content-length:\s*(\d+)", header.lower())[0])

    length = length - len(body)

    while length > 0:
    buf = s.recv(length)
    if not buf:
    break
    body += buf
    length -= len(buf)

    s.close()


    return body

    seqId = 0
    while True:
    try:
    body = listen(seqId)
    data = json.loads(body)
    seqId = data["seqId"]
    for msg in data["messages"]:
    gevent.spawn(callback, msg)
    except Exception:
    traceback.print_exc()

    gevent.sleep(1)


    def handle(msg):
    now = datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")
    out = "%s, %d, %d, %d" % (now, msg["playing"], msg["users"], msg["rps"])



    beaconPushClient(handle, "abcdef", ["rupps"])