39 lines
1.4 KiB
Python
39 lines
1.4 KiB
Python
import asyncio
|
|
import argparse
|
|
from cmd_chat.server.server import run_server
|
|
from cmd_chat.client.client import Client
|
|
|
|
def run_http_server(ip: str, port: int, password: str | None) -> None:
|
|
run_server(ip, int(port), False, password)
|
|
|
|
async def run_client(username: str, server: str, port: int, password: str | None) -> None:
|
|
Client(server=server, port=port, username=username, password=password).run()
|
|
|
|
async def run() -> None:
|
|
parser = argparse.ArgumentParser(description='Command-line chat application')
|
|
subparsers = parser.add_subparsers(dest='command', required=True)
|
|
|
|
serve_p = subparsers.add_parser('serve', help='Run server')
|
|
serve_p.add_argument('ip_address')
|
|
serve_p.add_argument('port')
|
|
serve_p.add_argument('--password', '-p', required=True, help='Admin password required for clients')
|
|
|
|
connect_p = subparsers.add_parser('connect', help='Connect to server')
|
|
connect_p.add_argument('ip_address')
|
|
connect_p.add_argument('port')
|
|
connect_p.add_argument('username')
|
|
connect_p.add_argument('password', help='Password to auth on server')
|
|
|
|
args = parser.parse_args()
|
|
|
|
if args.command == 'serve':
|
|
run_http_server(args.ip_address, args.port, args.password)
|
|
elif args.command == 'connect':
|
|
await run_client(args.username, args.ip_address, int(args.port), args.password)
|
|
|
|
def main():
|
|
asyncio.run(run())
|
|
|
|
if __name__ == '__main__':
|
|
main()
|