From 15d92e9f3a76f7cf3e032000bf7010e9ba9c6857 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=BB=D1=8C=D1=8F=20=D0=93=D0=BB=D0=B0=D0=B7=D1=83?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2?= Date: Sun, 11 Jan 2026 02:45:34 +0300 Subject: [PATCH] added REPL mode to python client --- client.py | 51 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 45 insertions(+), 6 deletions(-) diff --git a/client.py b/client.py index 187b069..6a7a1f1 100644 --- a/client.py +++ b/client.py @@ -3,6 +3,18 @@ import struct import argparse +def print_logo(): + print(r""" +╔════════════════════════════════════════════════════════════╗ +║ _ _____ ______ _____ _____ _____ ║ +║ | | | __ \| ____| __ \_ _|/ ____|║ +║ _ __ ___ | |_ __ _ | |__) | |__ | | | || | | (___ ║ +║| '_ \ / _ \| __| / _` | | _ /| __| | | | || | \___ \ ║ +║| | | | (_) | |_ | (_| | | | \ \| |____| |__| || |_ ____) |║ +║|_| |_|\___/ \__| \__,_| |_| \_\______|_____/_____|_____/ ║ +╚════════════════════════════════════════════════════════════╝ +""") + def recv_exact(sock: socket.socket, n: int) -> bytes: data = b'' while len(data) < n: @@ -24,23 +36,50 @@ def recv_frame(sock: socket.socket) -> bytes: return recv_exact(sock, length) def main(): + print_logo() parser = argparse.ArgumentParser(description='NOT(Redis) client') parser.add_argument('-H', '--host', type=str, required=False, default='127.0.0.1', help='Server host') parser.add_argument('-P', '--port', type=int, required=False, default=6379, help='Server port') - parser.add_argument('-M', '--message', type=str, required=False, default='hello', help='Message to send') + parser.add_argument('-M', '--message', type=str, required=False, default=None, help='Message to send (if not provided, starts interactive shell)') args = parser.parse_args() try: with socket.create_connection((args.host, args.port)) as sock: - send_frame(sock, args.message.encode()) - response = recv_frame(sock) - print('Message sent:', args.message) - print('Server says:', response.decode("utf-8", errors='replace')) + if args.message: + send_frame(sock, args.message.encode()) + response = recv_frame(sock) + print('Message sent:', args.message) + print('Server says:', response.decode("utf-8", errors='replace')) + else: + print(f"Connected to {args.host}:{args.port}") + print("Type 'quit' or 'exit' to leave.") + import readline + + while True: + try: + prompt = f"{args.host}:{args.port}> " + cmd_line = input(prompt).strip() + + if not cmd_line: + continue + + if cmd_line.lower() in ('quit', 'exit'): + break + + send_frame(sock, cmd_line.encode()) + response = recv_frame(sock) + print(response.decode("utf-8", errors='replace')) + + except KeyboardInterrupt: + print("\nType 'quit' or 'exit' to leave.") + except EOFError: + break + except ConnectionRefusedError as e: print('Connection refused by server:', e) exit(1) except ConnectionError as e: - print('Failed to connect to server:', e) + print('Connection error:', e) exit(1) except Exception as e: print('Unexpected error:', e)