def create(): r_email = request.form.get('r_email') r_password = request.form.get('r_password') acc = Account(email=r_email, password=r_password, private_key=r_email) if acc.validate(): print("user already exist") return redirect(url_for('login')) acc.create() if acc.is_valid(): session['data'] = acc.get_info() return redirect(url_for('dashboard')) print("problem creating account") return redirect(url_for('index'))
def handle(self): global server sock = self.request socket_descriptor = sock.fileno() command = "" while command != "exit": response = "" command = self.receive() command_parts = command.split(maxsplit=1) if re.match(r"signup", command): # Separa as duas partes dos dados: usuário e senha username_password = command_parts[1].split() # Cria a nova conta com os dados informados username = username_password[0] password = username_password[1] account = Account() account_created = account.create(username, password) # Se a conta foi criada com sucesso, mantem ela em memória na lista de clientes if account_created: if socket_descriptor not in server.clients: server.clients[socket_descriptor] = dict() server.clients[socket_descriptor]["socket"] = sock self.account = server.clients[socket_descriptor][ "account"] = account # Verifica se o cliente já está conectado, através do descritor do socket response = account_created elif re.match(r"signin", command): # Separa as duas partes dos dados: usuário e senha username_password = command_parts[1].split() # Cria a nova conta com os dados informados username = username_password[0] password = username_password[1] # Instancia a conta e carrega a última versão do arquivo da conta do jogador account = Account() account_signedin = account.signin(username, password) if account_signedin: if socket_descriptor not in server.clients: server.clients[socket_descriptor] = dict() server.clients[socket_descriptor]["socket"] = sock self.account = server.clients[socket_descriptor][ "account"] = account_signedin self.player = server.clients[socket_descriptor][ "player"] = self.account.player response = self.account.player.name else: self.set_response_buffer('0') elif re.match(r"character_create", command): # Obtem o nome do jogador, enviado pelo cliente, instancia a classe e armazena name = command_parts[1] player = Player(name, self.account) # Cria uma referência do jogador para facilitar acesso if player: server.clients[socket_descriptor]["player"] = player self.player = player response = "1" elif re.match(r"character_description", command): # Seta a descrição do personagem enviada pelo player self.player.set_description(command_parts[1]) # Após criar o personagem por completo, move ele para a sala inicial self.player.move(server.world.default_room_id) # Adiciona uma referência do player na sua conta self.account.set_player(self.player) notification = "# {} entrou no jogo! #".format(player.name) border = "" for i in range(len(notification)): border += "#" self.broadcast_message("{}\n{}\n{}".format( border, notification, border)) response = player.name elif re.match(r"player_command", command): # O comando que o jogador inseriu arguments = [] player_command = command_parts[1] splited_player_command = player_command.split() if len(splited_player_command) > 1: player_command = splited_player_command[0] arguments = splited_player_command[1:] # Mantem um histórico dos comandos inseridos pelo jogador self.player.last_commands.append((player_command, arguments)) # Começa a verificar os comandos existentes if player_command == "help": global commands response += "Lista de comandos:\n" for command in commands: response += "{}: {}\n".format(command, commands[command]) elif player_command == "me": response += self.player.get_info_response() # Informações sobre um jogador elif player_command == "player_info": if len(arguments) < 1: response += "Informe o nome do jogador" else: player_name = arguments[0] found = False for client in server.clients: if server.clients[client][ "player"].name == player_name: found = True response += server.clients[client][ "player"].get_info_response() if not found: response += "Jogador não encontrado (nome incorreto ou offline)" elif player_command == "room": # Obtem a sala em que o jogador se encontra e envia room = server.world.rooms[self.player.current_room_id] # String descrevendo a sala response = room.get_response_string() elif player_command == "playercount": # Envia o número de clientes conectados response = "{} jogadores conectados".format( len(server.clients)) elif player_command == "move": # Obtem a direção para onde o player quer se mover direction = arguments[0] # Se a direção for inválida if direction not in server.world.directions: response = "Direção inválida!" else: try: # Saidas possíveis para a sala atual exits = server.world.exits[ self.player.current_room_id] # Valor do indíce que a direção representa nas saídas direction_index = server.world.directions[ direction] # Nova sala do jogador self.player.move(exits[direction_index]) # Envia a descrição da nova sala para o jogador room = server.world.rooms[ self.player.current_room_id] response = room.get_response_string() except Exception as e: print(e) response = "Direção inválida!" elif player_command == "get_item": item_name = arguments[0] #Inicio de seção crítica server.lock.acquire() item = server.world.rooms[ self.player.current_room_id].item_in_room(item_name) server.lock.release() # Fim de seção crítica if item is False: response = "Item não encontrado" else: response = self.player.add_item(item) elif player_command == "inventory": response = self.player.get_inventory_response() elif player_command == "npc": # Se o npc tiver um nome composto, junta os argumentos para compor o nome npc_name = " ".join(arguments) # Busca a sala do player atual e encontra o npc nela pelo seu nome room = server.world.rooms[self.player.current_room_id] npc = room.get_npc_by_name(npc_name) # Mantem em memória o npc que o usuário está interagindo self.interacting_with = ("npc", npc) response = npc.get_npc_response() elif re.match(r"^\d$", player_command): if self.interacting_with[0] == "npc": npc = self.interacting_with[1] if npc.__class__.__name__ == "NpcShop": item_id = player_command item = npc.find_item_by_id(item_id) if item: if self.player.gold < item.value: response = "Você não tem dinheiro suficiente!" else: self.player.add_item(deepcopy(item)) response = "Item comprado com sucesso!" else: response = "Este item não está a venda no NPC" elif player_command == "equip": item_name = arguments[0] equiped = self.player.equip_item(item_name) if not equiped: response = "Item não encontrado no seu inventario!" else: response = equiped elif player_command == "attack": # Busca um monstro com o nome informado no mapa atual do player monster_name = npc_name = " ".join(arguments) room = server.world.rooms[self.player.current_room_id] monster = room.get_monster_by_name(monster_name) if not monster: response = "Monstro não encontrado na sala atual" else: response += "Batalha iniciada:\n" # Enquanto alguem estiver vivo, dalhe pau while monster.is_alive() and self.player.is_alive(): self.player.attack(monster) monster.attack(self.player) response += "\tSua hp: {}\n\tHP do monstro:{}\n".format( self.player.hp, monster.hp) if not self.player.is_alive(): response += "\nVocê perdeu a batalha" elif not monster.is_alive(): response += "\nVocê venceu a batalha" self.player.inventory += server.world.get_items_from_ids( monster.drops) room.remove_monster(monster) del monster elif player_command == "exit": # Quando o jogador sair, remove ele da lista de clientes server.clients[socket_descriptor].pop("socket") server.clients[socket_descriptor].pop("player") server.clients.pop(socket_descriptor) server.tcpServer.shutdown() else: response = "0" self.set_response_buffer(response) try: self.send() except Exception as e: print(e) break
def test_create(self): con = Connection("http://127.0.0.1:9888") xpub = Keys.find_by_alias(con, "test").xpub account = Account.create(con, [xpub], "shengsheng", 1) print(account.id, account.alias, account.xpubs, account.key_index, account.quorum)