Exemple #1
0
def logout_and_cleanup(uid=None, next_url=None, logout=False):
   online_students = StudentRecord.online_students()

   if uid is None:
      user = auth.get_logged_in_user()
      auth.logout_user(user)
   else:
      user = auth.User.get(auth.User.id == uid)
      auth.logout_user(user, self_logout=False)

   user_record = StudentRecord(user.id)
   user_record.open_board = False
   user_record.online = False
   user_record.save()

   listening_clients = sse.listening_clients(user.id)

   # Turn off menu/tabs of all listeners and tell them to go home
   mesg = {}
   for cid in online_students:
      mesg[cid] = dict(cid=user.id)
      if cid in listening_clients or cid==user.id:
         mesg[cid].update(home_cid = cid)
         sse.listen_to(cid, cid)
   sse.notify(mesg, event="log-out")

   sse.close(user_record.id, logout)

   return redirect( next_url or url_for('index') )
Exemple #2
0
def logout_and_cleanup(uid=None, next_url=None, logout=False):
    online_students = StudentRecord.online_students()

    if uid is None:
        user = auth.get_logged_in_user()
        auth.logout_user(user)
    else:
        user = auth.User.get(auth.User.id == uid)
        auth.logout_user(user, self_logout=False)

    user_record = StudentRecord(user.id)
    user_record.open_board = False
    user_record.online = False
    user_record.save()

    listening_clients = sse.listening_clients(user.id)

    # Turn off menu/tabs of all listeners and tell them to go home
    mesg = {}
    for cid in online_students:
        mesg[cid] = dict(cid=user.id)
        if cid in listening_clients or cid == user.id:
            mesg[cid].update(home_cid=cid)
            sse.listen_to(cid, cid)
    sse.notify(mesg, event="log-out")

    sse.close(user_record.id, logout)

    return redirect(next_url or url_for('index'))
Exemple #3
0
def event_join(host, guest):
   online_students = StudentRecord.online_students()
   ## Key error is possible
   guest_record = online_students[int(guest)]
   host_record = online_students[int(host)]
   host_channel = sse.current_channel(host)
   guest_channel = sse.current_channel(guest)
   sse.listen_to(host, guest)

   m = dict(cid=guest, host_cid=host, board_status=host_record.open_board)

   if host!=guest and int(host)!=int(host_channel):
      # host is elsewhere
      host_of_host = online_students[int(host_channel)]
      m.update(notice = "%s is visiting %s's sandbox" % (host_record.username, host_of_host.username))

   if guest_record.is_teacher:
      pids = sorted(int(i) for i in red.smembers('published-problems'))
      scores = [ [p, host_record.scores.get(p,0)] for p in pids ]
      m.update(scores=scores, brownies=host_record.brownies)

   sse.notify( { guest : m } , event='join')

   ## Inform old channel and new channel of updated listeners list
   guest_listeners = [ online_students[int(i)].username for i in sse.listening_clients(guest_channel) ]
   m = dict(host_cid=guest_channel, listeners=guest_listeners)
   sse.broadcast(guest_channel, m, m, event='listeners-update')

   host_listeners = [ online_students[int(i)].username for i in sse.listening_clients(host) ]
   m = dict(host_cid=host, listeners=host_listeners)
   sse.broadcast(host, m, m, event='listeners-update')
Exemple #4
0
def event_toggle_board(message, cid):
   user = StudentRecord(cid)
   if user.username:
      record = StudentRecord(user.id)
      record.open_board = not record.open_board
      record.save()

      all_records = StudentRecord.online_students()

      message_to_all = {}
      listening_clients = sse.listening_clients(cid)
      for c, r in all_records.items():
         m = dict(cid=cid, board_status=record.open_board)
         if record.open_board == False and int(cid) != int(c):
            if not r.is_teacher and c in listening_clients:
               m.update(back_to_homeboard=True)
               sse.listen_to(c, c)
         message_to_all[c] = m

      sse.notify(message_to_all, event="toggle-board")
Exemple #5
0
def event_toggle_board(message, cid):
    user = StudentRecord(cid)
    if user.username:
        record = StudentRecord(user.id)
        record.open_board = not record.open_board
        record.save()

        all_records = StudentRecord.online_students()

        message_to_all = {}
        listening_clients = sse.listening_clients(cid)
        for c, r in all_records.items():
            m = dict(cid=cid, board_status=record.open_board)
            if record.open_board == False and int(cid) != int(c):
                if not r.is_teacher and c in listening_clients:
                    m.update(back_to_homeboard=True)
                    sse.listen_to(c, c)
            message_to_all[c] = m

        sse.notify(message_to_all, event="toggle-board")
Exemple #6
0
def event_join(host, guest):
    online_students = StudentRecord.online_students()
    ## Key error is possible
    guest_record = online_students[int(guest)]
    host_record = online_students[int(host)]
    host_channel = sse.current_channel(host)
    guest_channel = sse.current_channel(guest)
    sse.listen_to(host, guest)

    m = dict(cid=guest, host_cid=host, board_status=host_record.open_board)

    if host != guest and int(host) != int(host_channel):
        # host is elsewhere
        host_of_host = online_students[int(host_channel)]
        m.update(notice="%s is visiting %s's sandbox" %
                 (host_record.username, host_of_host.username))

    if guest_record.is_teacher:
        pids = sorted(int(i) for i in red.smembers('published-problems'))
        scores = [[p, host_record.scores.get(p, 0)] for p in pids]
        m.update(scores=scores, brownies=host_record.brownies)

    sse.notify({guest: m}, event='join')

    ## Inform old channel and new channel of updated listeners list
    guest_listeners = [
        online_students[int(i)].username
        for i in sse.listening_clients(guest_channel)
    ]
    m = dict(host_cid=guest_channel, listeners=guest_listeners)
    sse.broadcast(guest_channel, m, m, event='listeners-update')

    host_listeners = [
        online_students[int(i)].username for i in sse.listening_clients(host)
    ]
    m = dict(host_cid=host, listeners=host_listeners)
    sse.broadcast(host, m, m, event='listeners-update')