Рефакторинг

This commit is contained in:
Евгений Александрович 2025-03-28 20:30:15 +03:00
parent 1ef959b606
commit 752710a167
4 changed files with 6 additions and 24 deletions

View File

@ -12,7 +12,6 @@ import locale
class ChatClient:
def __init__(self, host='127.0.0.1', port=5555):
# Настройка локализации
locale.setlocale(locale.LC_ALL, '')
os.environ['LANG'] = 'ru_RU.UTF-8'
@ -28,9 +27,8 @@ class ChatClient:
self.input_history = []
self.history_index = -1
self.last_update = time.time()
self.update_interval = 5 # Интервал обновления в секундах
self.update_interval = 5
# Цветовая схема
self.palette = [
('header', 'white', 'dark blue'),
('chat', 'light gray', 'black'),
@ -64,12 +62,10 @@ class ChatClient:
self.chat_content = urwid.SimpleListWalker([])
self.chat_list = urwid.ListBox(self.chat_content)
# Исправленная строка - правильно закрываем скобки Frame
chat_frame = urwid.Frame(
urwid.AttrMap(self.chat_list, 'chat'),
header=urwid.AttrMap(urwid.Text(" ЧАТ "), 'header'))
# Поле ввода
self.input_edit = urwid.Edit(caption="Сообщение: ")
input_pile = urwid.Pile([
urwid.AttrMap(self.input_edit, 'input'),
@ -126,7 +122,6 @@ class ChatClient:
if not msg.strip():
return
# Добавляем в историю
self.input_history.append(msg)
if len(self.input_history) > 100:
self.input_history.pop(0)
@ -151,10 +146,8 @@ class ChatClient:
elif msg.startswith('/file'):
self.send_file(msg)
else:
# Отображаем свое сообщение
self.add_message(f"{self.nickname}: {msg}", 'own')
# Отправляем на сервер
try:
encrypted_msg = rsa.encrypt(msg.encode('utf-8'), self.server_public_key)
self.client.send(encrypted_msg)
@ -201,18 +194,14 @@ class ChatClient:
def receive(self):
try:
# Получаем публичный ключ сервера
self.server_public_key = rsa.PublicKey.load_pkcs1(self.client.recv(2048))
# Отправляем свой публичный ключ
self.client.send(self.client_public_key.save_pkcs1())
# Получаем никнейм
self.set_status("Введите ваш никнейм и нажмите Enter")
while not self.nickname:
time.sleep(0.1)
# Отправляем никнейм на сервер
encrypted_nickname = rsa.encrypt(self.nickname.encode('utf-8'), self.server_public_key)
self.client.send(encrypted_nickname)
self.set_status(f"Подключено как {self.nickname}")
@ -223,7 +212,6 @@ class ChatClient:
if not encrypted_msg:
break
# Расшифровываем сообщение
msg = rsa.decrypt(encrypted_msg, self.client_private_key).decode('utf-8')
if msg.startswith('/file_notification'):
@ -287,7 +275,6 @@ class ChatClient:
else:
self.chat_content.append(urwid.Text(text))
# Автопрокрутка вниз
if len(self.chat_content) > 0:
self.chat_list.set_focus(len(self.chat_content) - 1)
@ -297,15 +284,11 @@ class ChatClient:
threading.Timer(timeout, lambda: self.set_status("")).start()
def update_ui(self, loop=None, user_data=None):
"""Функция для обновления интерфейса"""
current_time = time.time()
if current_time - self.last_update >= self.update_interval:
self.last_update = current_time
# Здесь можно добавить любые обновления интерфейса
# Например, обновление времени в статус баре
self.loop.draw_screen()
# Планируем следующее обновление
self.loop.set_alarm_in(self.update_interval, self.update_ui)
def show_help(self):
@ -351,8 +334,7 @@ class ChatClient:
self.loop.unhandled_input = exit_help
def run(self):
# Получаем никнейм
self.set_status("Введите ваш никнейм и нажмите Enter")
self.set_status("Введите Ваш никнейм и нажмите Enter")
def set_nickname(edit, new_edit_text):
if new_edit_text.strip():
@ -361,7 +343,6 @@ class ChatClient:
self.loop.unhandled_input = self.handle_input
self.set_status(f"Подключено как {self.nickname}")
self.input_edit.set_caption("Сообщение: ")
# Запускаем периодическое обновление интерфейса
self.loop.set_alarm_in(self.update_interval, self.update_ui)
self.input_edit.set_caption("Никнейм: ")
@ -369,11 +350,9 @@ class ChatClient:
key == 'enter' and set_nickname(None, self.input_edit.get_edit_text())
)
# Запускаем поток для получения сообщений
receive_thread = threading.Thread(target=self.receive, daemon=True)
receive_thread.start()
# Запускаем главный цикл
self.loop.run()

0
CLIENT/config_с.csrsa Normal file
View File

View File

@ -1,3 +1,5 @@
#!/usr/bin/env python
import socket
import threading
import rsa
@ -136,8 +138,9 @@ class Server:
print("\nСервер останавливается...")
finally:
self.server.close()
print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] Сервер остановлен.")
if __name__ == "__main__":
server = Server()
server.run()
server.run()

0
SERVER/config_s.csrsa Normal file
View File