Exemple #1
0
async def handle_echo(reader, writer):
    """
    TCP SERVER connections are binded to this method
    this method utilizes the ServerManager module to handle all the read
    and write operations for the connected clients
    """
    addr = writer.get_extra_info('peername')
    message = f"{addr} is connected !!!!"
    writer.write(
        ('Proceed with command(login <username> <password>).\n').encode())
    await writer.drain()
    writer.write((
        'To register a new user, use command (register <username> <password> <privilige>)\n'
    ).encode())
    await writer.drain()
    manager = ServerManager()
    try:
        while True:
            data = await reader.read(100)
            message = data.decode().strip()
            if message == 'quit':
                break
            elif message.startswith('help'):
                data = manager.help()
            elif message.startswith('change_folder'):
                if len(message.split(' ')) == 2:
                    data = manager.changeFolder(message.split(' ')[1])
                else:
                    data = "Please provide a folder name"
            elif message.startswith('list'):
                if len(message.split(' ')) == 1:
                    data = manager.list()
                else:
                    data = "Please provide a filename"
            elif message.startswith('read_file'):
                if len(message.split(' ')) == 2:
                    data = manager.readFile(message.split(' ')[1])
                else:
                    data = "Please provide a filename"
            elif message.startswith('write_file'):
                if len(message.split(' ')) == 3:
                    data = manager.writeFile(
                        message.split(' ')[1],
                        message.split(' ')[2])
                else:
                    data = "Please provide a filename and data"
            elif message.startswith('create_folder'):
                if len(message.split(' ')) == 2:
                    data = manager.createFolder(message.split(' ')[1])
                else:
                    data = "Please provide a foldername"
            elif message.startswith('register'):
                if len(message.split(' ')) == 4:
                    data = manager.register(
                        message.split(' ')[1],
                        message.split(' ')[2],
                        message.split()[3])
                else:
                    data = "Please provide a username, password and privilege."
            elif message.startswith('login'):
                if len(message.split(' ')) == 3:
                    data = manager.login(
                        message.split(' ')[1],
                        message.split(' ')[2])
                else:
                    data = "Please provide a username and password."
            elif message.startswith('delete'):
                if len(message.split(' ')) == 3:
                    data = manager.delete(
                        message.split(' ')[1],
                        message.split(' ')[2])
                else:
                    data = "Please provide a username and password."
            else:
                data = 'Command not recognized'
            if data:
                writer.write((data + '\n').encode())
                await writer.drain()
            else:
                writer.write((
                    'There was an error. you can user command help to get available commands'
                    + '\n').encode())
                await writer.drain()
    except ConnectionRefusedError:
        await asyncio.sleep(0.1)
        return
    except asyncio.CancelledError:
        return
    except ConnectionAbortedError:
        print("A Connection was closed")
        return
    except ConnectionResetError:
        print(f"A Connection was closed :{addr}")
        return
    except Exception:
        raise
    else:
        print("Close the connection")
        writer.close()