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