Рефакторинг
This commit is contained in:
parent
1ef959b606
commit
752710a167
@ -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
0
CLIENT/config_с.csrsa
Normal 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
0
SERVER/config_s.csrsa
Normal file
Loading…
Reference in New Issue
Block a user