Пример #1
0
 def __init__(self):
     self.props = {}
     self.uid = uuid.uuid4()
     namer = funkybob.RandomNameGenerator(separator=' ')
     it = iter(namer)
     self.name = next(it).title()
     self.dist = Distribution()
Пример #2
0
def generate_users():
    users = []
    for i in range(NUM_USERS):
        gen = iter(funkybob.RandomNameGenerator())

        # UserID
        id = str(uuid.uuid4())

        # Username
        name = next(gen).split('_')
        numseq = "".join([str(random.randint(0, 9)) for i in range(3)])
        username = name[0] + name[1] + numseq

        # Password
        password = "".join([str(random.randint(0, 9)) for i in range(6)])

        # Email
        email = name[0] + "".join(
            [str(random.randint(0, 9)) for i in range(6)]) + "@gmail.com"

        # FirstName
        firstname = name[0]

        # LastName
        lastname = name[1]

        # Credit
        credit = 50

        user = {
            "id": id,
            "username": username,
            "password": password,
            "email": email,
            "firstname": firstname,
            "lastname": lastname,
            "credit": credit
        }

        users.append(user)
        print(
            f'id={id}, username={username}, password={password}, email={email}, firstname={firstname}, lastname={lastname}'
        )

    return users
async def connect(websocket, path):
    try:
        async for message in websocket:
            CONNECTED.add(websocket)
            message = message_data.decodeJSON(
                message)  #converts message into Object
            print(
                f'[{message.sender}]: {message.message_type} | {message.content}'
            )  #log

            if message.recipient != "Server":  #echos msg if recipient not server
                await asyncio.create_task(broadcast(message.encodeJSON()))

            if message.sender == "Client":  #checks if sender is client
                if message.message_type == "client_connect":
                    print(f'[Client] Connected')
                elif "dig" in message.content:
                    with open(os.path.join(FILE_DIR, 'turtle.json'),
                              'r') as db:
                        turtledatabase = json.load(db)
                    turtle = Turtle.jsonToObject(
                        turtledatabase[message.recipient], True)
                    turtleloc = turtle.location
                    x, y, z, rot = turtleloc
                    with open(os.path.join(FILE_DIR, "world.json"), "r") as db:
                        worlddatabase = json.load(db)
                    if message.content == "dig up":
                        del worlddatabase[f"{x},{y+1},{z}"]
                    elif message.content == "dig down":
                        del worlddatabase[f"{x},{y-1},{z}"]
                    elif message.content == "dig front":
                        if rot == 0: z -= 1
                        elif rot == 90: x += 1
                        elif rot == 180: z += 1
                        elif rot == 270: x -= 1
                        del worlddatabase[f"{x},{y},{z}"]

                    with open(os.path.join(FILE_DIR, 'world.json'), 'w') as db:
                        json.dump(worlddatabase, db, indent=4)

            else:  #thus sender is turtle if not client or server
                TURTLES[
                    message.
                    sender] = websocket  #adds turtle to current working list of connected turtles

                if message.message_type == "turtle_connect":
                    print(f'[{message.sender}] Connected')
                    with open(os.path.join(FILE_DIR, 'turtle.json'),
                              'r') as db:
                        database = json.load(db)

                    if message.sender == "Unnamed":
                        with open(os.path.join(FILE_DIR, 'turtle.json'),
                                  'r') as db:  #opens turtle database
                            database = json.load(db)

                        while True:  #checks if name matches any existing turtles
                            name = next(
                                iter(
                                    funkybob.RandomNameGenerator(
                                        members=2, separator='_')))
                            if name in database.keys():
                                continue
                            else:
                                break

                        renamecommand = message_data(
                            "Server", "Unnamed", "turtle_command",
                            f"rename {name}")  #sends rename command
                        print(renamecommand.encodeJSON())
                        await websocket.send(renamecommand.encodeJSON())
                        database[name] = {"location": [0, 0, 0, 0]}
                        with open(os.path.join(FILE_DIR, 'turtle.json'),
                                  'w') as db:  #opens turtle database
                            json.dump(database, db, indent=4)

                    else:
                        connectedmessage = message_data(
                            "Server", "Client", "turtle_connect",
                            database[message.sender])
                        await asyncio.create_task(
                            broadcast(connectedmessage.encodeJSON())
                        )  #tells client that bot connected

                        database[message.sender]["connected"] = True
                        with open(os.path.join(FILE_DIR, 'turtle.json'),
                                  'w') as db:  #changes database to connected
                            json.dump(database, db, indent=4)

                elif message.message_type == "information":
                    if message.sender == 'Unnamed':  #renames unnamed turtle
                        with open(os.path.join(FILE_DIR, 'turtle.json'),
                                  'r') as db:  #opens turtle database
                            database = json.load(db)
                        turtle = Turtle.luaJsonToObject(message.content, True)

                        while True:  #checks if name matches any existing turtles
                            name = next(
                                iter(
                                    funkybob.RandomNameGenerator(
                                        members=2, separator='_')))
                            if name in database.keys():
                                continue
                            else:
                                break

                        renamecommand = message_data(
                            "Server", "Unnamed", "turtle_command",
                            f"rename {name}")  #sends rename command
                        print(renamecommand.encodeJSON())
                        await websocket.send(renamecommand.encodeJSON())
                        turtle.label = name  #updates turtle object to match
                        database[turtle.label] = turtle.__dict__
                        database[turtle.label]["connected"] = True

                        with open(os.path.join(FILE_DIR, 'turtle.json'),
                                  'w') as db:  #adds turtle to database
                            json.dump(database, db, indent=4)

                        connectedmessage = message_data(
                            "Server", "Client", "turtle_connect",
                            turtle.__dict__)
                        await asyncio.create_task(
                            broadcast(connectedmessage.encodeJSON())
                        )  #tells client that bot connected

                    else:
                        infomessage = message_data(
                            "Server", "Client", "information",
                            Turtle.information(
                                message))  #sends client the information
                        await asyncio.create_task(
                            broadcast(infomessage.encodeJSON()))

                elif message.message_type == "map":
                    Turtle.map(message)
                    await asyncio.create_task(broadcast(message.encodeJSON()))

                elif message.message_type == "query":
                    query = message.content

                    with open(os.path.join(FILE_DIR, 'turtle.json'),
                              'r') as db:
                        database = json.load(db)
                    if query == "location":
                        locationdata = ' '.join([
                            str(i) for i in database[message.sender][query]
                        ]).strip()  #converts table to space-sep. string
                        result = message_data("Server", message.sender,
                                              "turtle_command",
                                              f"location {locationdata}")
                    else:
                        result = message_data(
                            "Server", message.sender, "query_response", {
                                "query": query,
                                "response": database[message.sender][query]
                            })
                    await websocket.send(result.encodeJSON())

                elif message.message_type == "error":
                    print(message.content)
                    infomessage = message_data(
                        "Server", "Client", "error",
                        {message.sender: message.content
                         })  #sends client the information
                    await asyncio.create_task(
                        broadcast(infomessage.encodeJSON()))

                elif message.message_type == "custom_command_response":
                    print(message.content)

    except Exception as e:
        print(e)
        pass

    finally:
        print(f'[{message.sender}] Disconnected')
        CONNECTED.remove(websocket)

        if websocket in TURTLES.values():
            print(f'[{message.sender}] Removed from Active Turtles')
            del TURTLES[message.sender]

            dcnotification = message_data("Server", "Client",
                                          "turtle_disconnect", message.sender)
            await asyncio.create_task(
                broadcast(dcnotification.encodeJSON())
            )  #sends notification to client that turtle disconnected

            with open(os.path.join(FILE_DIR, 'turtle.json'),
                      'r') as db:  #removes connected tag
                database = json.load(db)
            database[message.sender]["connected"] = False

            with open(os.path.join(FILE_DIR, 'turtle.json'), 'w') as db:
                json.dump(database, db, indent=4)
Пример #4
0
def get_random_handle():
    generator = funkybob.RandomNameGenerator(members=2, separator='-')
    it = iter(generator)
    return it.next()
Пример #5
0
 def test_basic(self):
     generator = funkybob.RandomNameGenerator(members=2, separator='-')
     it = iter(generator)
     blah = it.next()
Пример #6
0
 def test_known_fail_3_members(self):
     generator = funkybob.RandomNameGenerator(members=3, separator='-')
     it = iter(generator)
     blah = it.next()