Beispiel #1
0
  def get(self):
    user_key = self.get_current_user_key()
    queries = models.Query.get(self.request.get_all('q')[:2])
    user_key_0 = queries[0].parent_key()
    user_key_1 = queries[1].parent_key()

    if len(queries) != 2 \
      or user_key_0 == user_key_1 \
      or (user_key_0 != user_key and user_key_1 != user_key):
      self.response.set_status(403)
      return

    if user_key_0 == user_key:
      my_query = queries[0]
      peer_query = queries[1]
      peer_key = user_key_1
    else:
      my_query = queries[1]
      peer_query = queries[0]
      peer_key = user_key_0

    title_1 = peer_query.query_string
    title_2 = my_query.query_string

    my_userchat, peer_userchat = create_chat(user_key, peer_key, title_1 = title_1, title_2 = title_2)

    self.redirect('/chat/' + my_userchat.name)
Beispiel #2
0
def random_chat(user_key):
    def hookup(user_key, queue_key):
        now = datetime.datetime.now()
        q = db.get(queue_key)
        timediff = now - q.timestamp
        if q is not None:
            if q.timestamp < (
                    now - datetime.timedelta(seconds=config.RANDOM_CHAT_WAIT)):
                db.delete(q)
                return False
            if common.get_ref_key(q, 'peer') is None:
                q.peer = user_key
                q.put()
                return True
        return False

    peer_key = None
    q_key = db.Key.from_path('RandomChatQueue', user_key.id_or_name())
    q = models.RandomChatQueue.get(q_key)
    if q:
        peer_key = common.get_ref_key(q, 'peer')
    else:
        peers = db.Query(models.RandomChatQueue,
                         keys_only=True).filter('peer =', None)
        for p in peers:
            if db.run_in_transaction(hookup, user_key, p):
                peer_key = db.Key.from_path('User', p.id_or_name())
                break
        if not peer_key:
            q = models.RandomChatQueue(key=q_key)
            q.put()

    if peer_key is None:
        return None

    if q:
        db.delete(q)
        time.sleep(0.05)  # wait for peer to finish creating UserChat instances

    my_userchat, peer_userchat = create_chat(user_key,
                                             peer_key,
                                             title_1="random",
                                             title_2="random")

    return my_userchat.name
Beispiel #3
0
def random_chat(user_key):
  def hookup(user_key, queue_key):
    now = datetime.datetime.now()
    q = db.get(queue_key)
    timediff = now - q.timestamp
    if q is not None:
      if q.timestamp < (now - datetime.timedelta(seconds = config.RANDOM_CHAT_WAIT)):
        db.delete(q)
        return False
      if common.get_ref_key(q, 'peer') is None:
        q.peer = user_key
        q.put()
        return True
    return False

  peer_key = None
  q_key = db.Key.from_path('RandomChatQueue', user_key.id_or_name())
  q = models.RandomChatQueue.get(q_key)
  if q:
    peer_key = common.get_ref_key(q, 'peer')
  else:
    peers = db.Query(models.RandomChatQueue, keys_only = True).filter('peer =', None)
    for p in peers:
      if db.run_in_transaction(hookup, user_key, p):
        peer_key = db.Key.from_path('User', p.id_or_name())
        break
    if not peer_key:
      q = models.RandomChatQueue(key = q_key)
      q.put()

  if peer_key is None:
    return None

  if q:
    db.delete(q)
    time.sleep(0.05) # wait for peer to finish creating UserChat instances

  my_userchat, peer_userchat = create_chat(user_key, peer_key, title_1 = "random", title_2 = "random")

  return my_userchat.name