Add CLI run options, update README

This commit is contained in:
mirai
2023-11-27 06:50:16 +03:00
parent 8c4799c634
commit c5fa982f65
7 changed files with 76 additions and 25 deletions
+30 -16
View File
@@ -1,4 +1,5 @@
import asyncio
import argparse
from cmd_chat.server.server import app
from cmd_chat.client.client import Client
@@ -28,23 +29,36 @@ async def run_client(
async def run() -> None:
action: int = int(
input("Choose action:\n1. Run server\n2. Run client\nAction: ")
parser = argparse.ArgumentParser(
description='Command-line chat application'
)
if action == 1:
await run_server(
input("IP: "),
int(input("PORT: "))
)
if action == 2:
await run_client(
input("USERNAME: "),
input("IP: "),
int(input("PORT: "))
)
parser.add_argument(
'command',
choices=['serve', 'connect'],
help='Command to execute'
)
parser.add_argument(
'ip_address',
help='IP address to serve or connect'
)
parser.add_argument(
'port',
help='PORT of server'
)
parser.add_argument(
'username',
nargs='?',
default='',
help='Username for connection (required for connect command)'
)
args = parser.parse_args()
if args.command == 'serve':
await run_server(args.ip_address, int(args.port))
elif args.command == 'connect':
if not args.username:
parser.error("Username is required for 'connect' command")
await run_client(args.username, args.ip_address, int(args.port))
if __name__ == '__main__':
asyncio.run(
run()
)
asyncio.run(run())
+4 -3
View File
@@ -9,7 +9,8 @@ from websocket import create_connection
from cmd_chat.client.core.crypto import RSAService
from cmd_chat.client.config import (
COLORS
COLORS,
RENDER_TIME
)
@@ -109,13 +110,13 @@ class Client(RSAService):
def update_info(self):
""" connecting to websocket,
wating for updates,
updating every 0.05 seconds
updating every RENDER_TIME seconds
"""
ws = create_connection(f"{self.ws_url}/update")
last_try = None
while True:
try:
time.sleep(0.05)
time.sleep(RENDER_TIME)
response = ast.literal_eval(ws.recv().decode('utf-8'))
if last_try == response:
continue
+3 -1
View File
@@ -5,4 +5,6 @@ COLORS = {
"my_username_color": Fore.MAGENTA,
"ip_color": Fore.MAGENTA,
"username_color": Fore.GREEN
}
}
RENDER_TIME = 0.05
+1 -2
View File
@@ -6,8 +6,7 @@ from cmd_chat.server.models import Message
async def _get_bytes_and_serialize(
ws: Websocket
) -> dict:
ws_data = await ws.recv()
return ast.literal_eval(ws_data.decode('utf-8'))
return ast.literal_eval(await ws.recv())
async def _check_ws_for_close_status(