def play(request):
    obj = None
    user_id = None
    if request.POST:
        if "user_id" in request.COOKIES:
            user_id = request.COOKIES["user_id"]
            user = User.objects.get(id=user_id)
        else:
            user = User()
            user.save()
        if "image-data" in request.POST:
            obj = Drawing()
            obj.image = request.POST["image-data"]
        elif "caption" in request.POST:
            obj = Caption()
            obj.content = request.POST["caption"]
        if "previous-id" in request.POST:
            obj.previous_id = request.POST["previous-id"]

        obj.user = user
        obj.save()
    is_drawing = obj.__class__ == Caption
    response = render(request, 'index.html', {
        'drawing': is_drawing,
        'obj': obj
    })
    if user_id is None and request.POST:
        response.set_cookie("user_id", user.id)
    return response
Exemple #2
0
def sinalogin(request):
    """a method for sina login"""

    #use the access_token to get uid from sina server    
    #TODO:this appkey should be written in the conf file
    appkey = "2600055104"
    access_token = request.POST['access_token']
    payload = {'source': appkey, 'access_token': access_token}
    r = requests.get('https://api.weibo.com/2/account/get_uid.json', params = payload)
    response = r.json()
    if ("uid" in response):
        uid = str(response['uid'])
    else:
        result = __resultToJson('1', '', {})
        return HttpResponse(result, content_type = 'application/json')

    #get the userinfo according to the access_token and uid
    payload = {'source': appkey, 'access_token': access_token, 'uid': uid}
    r = requests.get('https://api.weibo.com/2/users/show.json', params = payload)
    userinfo = r.json()
    if ('name' in userinfo):
        count = User.objects.filter(uid = uid).count()
        if (count == 0):
            user = User(uid, userinfo['name'], userinfo['profile_image_url'])
            user.save()
        request.session["mid"] = uid
        result = __resultToJson('0', '', {'uid': uid, 'nickname': userinfo['name'], 'imageUrl': userinfo['profile_image_url']}) 
        return HttpResponse(result, content_type = 'application/json')
    else:
        result = __resultToJson('2', '', {})
        return HttpResponse(result, content_type = 'application/json')
Exemple #3
0
def qqlogin(request):
    """a method for qq login"""

    #use the access_token to get the openid from qq server
    access_token = request.POST['access_token']
    payload = {'access_token': access_token}
    r = requests.get("https://graph.qq.com/oauth2.0/me", params = payload)
    callback = r.text
    if (callback.find("openid") == -1):
        result = __resultToJson('1', '', {})
        return HttpResponse(result, content_type = 'application/json')

    try:
        openid = str(callback.split("{")[1].split("}")[0].split(",")[1].split(":")[1].split("\"")[1])
    except:
       result = __resultToJson('2', '', {})
       return HttpResponse(result, content_type = 'application/json')

    #get the userinfo according to the access_token and openid
    #TODO:this appid should be written in the conf file
    appid = "100510779"
    payload = {'access_token': access_token, 'oauth_consumer_key': appid, 'openid': openid}
    r = requests.get('https://graph.qq.com/user/get_user_info?', params = payload)
    userinfo = r.json()
    if ("nickname" in userinfo):
        count = User.objects.filter(uid = openid).count()
        if (count == 0):
            user = User(openid, userinfo['nickname'], userinfo['figureurl'])
            user.save()
        request.session['mid'] = openid
        result = __resultToJson('0', '', {'uid':openid, 'nickname': userinfo['nickname'], 'imageUrl': userinfo['figureurl']})
        return HttpResponse(result, content_type = 'application/json')
    else:
        result = __resultToJson('2', '', {})
        return HttpResponse(result, content_type = 'application/json')
Exemple #4
0
def create_room(nickname):
    room = Room(code=generate_room_code(), state=Room.WAITING)
    room.save()
    user = User(room=room,
                nickname=nickname,
                is_owner=True,
                unique_id=uuid.uuid4().__str__())
    user.save()
    return CreateRoomResult(room, user)
Exemple #5
0
def _create_new_user(rm, device_id):
    """
    Creates a new user and returns its instance
    :param rm:
    :param device_id:
    :return: user object (django model),
    """

    while True:
        try:

            with transaction.atomic():

                temp_room = Room.objects.select_for_update().filter(
                    id=rm.id).first()

                tablet_id = ConnectedTablet.objects.filter(
                    device_id=device_id).first().tablet_id

                player_id = temp_room.counter

                pseudo = parameters.pseudos[player_id]

                u = User(player_id=player_id,
                         pseudo=pseudo,
                         room_id=rm.id,
                         training_done=False,
                         score=0,
                         training_score=0,
                         state=game.room.state.states.WELCOME,
                         tablet_id=tablet_id)

                u.save()

                u.production_good = _get_user_production_good(rm, u)

                # prod i - 1 rule
                u.consumption_good = (u.production_good + 1) % rm.n_type

                u.save(update_fields=["production_good", "consumption_good"])

                temp_room.counter += 1
                temp_room.save(update_fields=['counter'])

                return u

        except (django.db.IntegrityError, django.db.OperationalError,
                django.db.utils.OperationalError, psycopg2.IntegrityError,
                psycopg2.OperationalError) as e:
            print("*" * 50)
            print("INTEGRITY ERROR" + "!" * 10)
            print(str(e))
            print("*" * 50)
            threading.Event().wait(1 + np.random.random() * 4)
            continue
Exemple #6
0
class IRepositoryPlayer:
    def __init__(self):
        self.user = None

    def save_player(self, username, room):
        self.user = User(game=Game.objects.get(room_name=room),
                         username=username,
                         date_created=datetime.datetime.now())
        self.user.save()
        return self.user

    def get_player_by_id(self, user_id):
        self.user = User.objects.get(id=user_id)
        return self.user

    def get_players_by_username_and_room(self, username, room):
        self.user = User.objects.filter(
            username=username, game=Game.objects.get(room_name=room).id)
        return self.user

    def update_player_username_by_id(self, user_id, name):
        self.user = User.objects.get(id=user_id)
        self.user.username = name
        self.user.save()
        return self.user

    def update_player_username_by_username(self, username, name):
        self.user = User.objects.get(username=username)
        self.user.username = name
        self.user.save()
        return self.user

    def update_player_monster_name_by_id(self, user_id, monster):
        self.user = User.objects.get(id=user_id)
        self.user.monster_name = monster
        self.user.save()
        return self.user

    def update_player_monster_name_by_username(self, username, monster):
        self.user = User.objects.get(username=username)
        self.user.monster_name = monster
        self.user.save()
        return self.user

    def delete_player_by_id(self, user_id):
        self.user = User.objects.get(id=user_id)
        self.user.delete()
        return None

    def delete_player_by_username(self, username):
        self.user = User.objects.get(username=username)
        self.user.delete()
        return None
Exemple #7
0
def register(request):
    if request.GET:
        username = request.GET.get('username')
        pwd = request.GET.get('password')
        email = request.GET.get('email')

        u = User.objects.filter(UserName=username)
        if u:
            return HttpResponse("The name has already been used.")
        else:
            u = User(UserName=username, Password=pwd, Email=email)
            u.save()
            return HttpResponseRedirect("/game/")
Exemple #8
0
def register(request):
    if request.GET:
        username = request.GET.get('username')
        pwd = request.GET.get('password')
        email = request.GET.get('email')

        u = User.objects.filter(UserName = username)
        if u:
            return HttpResponse("The name has already been used.")
        else:
            u = User(UserName = username,Password = pwd,Email = email)
            u.save()
            return HttpResponseRedirect("/game/")
Exemple #9
0
def index(request):
  if request.method == 'POST':
    post = (request.POST)
    form = GameForm(post)
    if form.is_valid():
      #create the user if they don't exist already
      user = User.objects.filter(name=post['name'])[:1]
      if not user:
        new_user = User(name=post['name'])
        new_user.save()
      try:
        user = User.objects.get(name=post['name'])
      except User.DoesNotExist:
        return HttpResponse('database error', status=404)  

      #create the game including minefield then save it to database
      if post['difficulty'] == 'beginner':
        game = Game(width=9,height=9,number_of_mines=10,difficulty='beginner',user=user)
      elif post['difficulty'] == 'intermediate':
        game = Game(width=16,height=16,number_of_mines=40,difficulty='intermediate',user=user)
      elif post['difficulty'] == 'expert':
        game = Game(width=30,height=16,number_of_mines=99,difficulty='expert',user=user)
      game.create_minefield()
      game.fields_left = game.width * game.height
      game.save()

      #redirect to the game page
      args = {'name': user.name, 'game_id': str(game.id)}
      return HttpResponseRedirect(reverse('game_start', kwargs=args))
  else:
    form = GameForm()

  top_beginner_users = User.objects.filter(game__difficulty='beginner', game__won=True).order_by('game__won')
  beginner_dict = create_high_scores(top_beginner_users)

  top_inter_users = User.objects.filter(game__difficulty='intermediate', game__won=True)
  inter_dict = create_high_scores(top_inter_users)

  top_expert_users = User.objects.filter(game__difficulty='expert', game__won=True)
  expert_dict = create_high_scores(top_expert_users)

  return render(request, 'index.html', {
      'form': form, 
      'beginner_dict': beginner_dict, 
      'inter_dict': inter_dict,
      'expert_dict': expert_dict
      })
Exemple #10
0
def join_room(roomCode, nickname):

    room = Room.objects.filter(code=roomCode).first()
    if not room:
        raise NotFound()

    if room.state == room.PLAYING:
        raise APIException(code=400)

    if room.user_set.count() > 8:
        raise APIException(code=400)

    user = User(room=room,
                nickname=nickname,
                is_owner=False,
                unique_id=uuid.uuid4().__str__())
    user.save()
    return JoinRoomResult(room, user)