From 64a5dd8c20ae585bae7ede7d2e00941b9a61bfc5 Mon Sep 17 00:00:00 2001 From: Xevion Date: Sun, 12 Jun 2022 13:17:26 -0500 Subject: [PATCH] Move shared constants, exceptions & helpers.py into /shared/ --- client/dialog.py | 15 +++++++-------- client/gui.py | 16 ++++++++-------- client/worker.py | 4 ++-- server/commands.py | 2 +- server/db.py | 2 +- server/handler.py | 6 +++--- server/main.py | 12 ++++++++++-- constants.py => shared/constants.py | 0 exceptions.py => shared/exceptions.py | 0 helpers.py => shared/helpers.py | 2 +- 10 files changed, 33 insertions(+), 26 deletions(-) rename constants.py => shared/constants.py (100%) rename exceptions.py => shared/exceptions.py (100%) rename helpers.py => shared/helpers.py (98%) diff --git a/client/dialog.py b/client/dialog.py index da9c790..1287806 100644 --- a/client/dialog.py +++ b/client/dialog.py @@ -4,10 +4,9 @@ from typing import Tuple from PyQt5.QtCore import QEvent from PyQt5.QtWidgets import QDialog, QStatusBar -import constants +from shared.constants import ConnectionOptions, DEFAULT_IP, DEFAULT_PORT from client.ui.ConnectionDialog import Ui_ConnectionDialog from client.nickname import Ui_NicknameDialog -from constants import ConnectionOptions class NicknameDialog(QDialog, Ui_NicknameDialog): @@ -26,7 +25,7 @@ class NicknameDialog(QDialog, Ui_NicknameDialog): self.show() def controlSubmit(self): - """Updates whether or not the dialog box is allowed to proceed""" + """Updates whether the dialog box is allowed to proceed""" if len(self.lineEdit.text()) > 2: if self.disabled: self.disabled = False @@ -43,7 +42,7 @@ class NicknameDialog(QDialog, Ui_NicknameDialog): class ConnectionDialog(QDialog, Ui_ConnectionDialog): - def __init__(self, nickname: str = None, *args, **kwargs): + def __init__(self, nickname: str = None, *args, **kwargs): super(ConnectionDialog, self).__init__(*args, **kwargs) self.setupUi(self) @@ -77,8 +76,8 @@ class ConnectionDialog(QDialog, Ui_ConnectionDialog): @property def settings(self) -> ConnectionOptions: - return ConnectionOptions(ip=self.server_address_input.text() or constants.DEFAULT_IP, - port=int(self.port_input.text() or constants.DEFAULT_PORT), + return ConnectionOptions(ip=self.server_address_input.text() or DEFAULT_IP, + port=int(self.port_input.text() or DEFAULT_PORT), nickname=self.nickname_input.text(), password=self.password_input.text(), remember=self.remember_checkbox.checkState()) @@ -105,8 +104,8 @@ class ConnectionDialog(QDialog, Ui_ConnectionDialog): def validate_address(self) -> Tuple[bool, bool]: """Returns True if the server address and port combination is valid""" - address = self.server_address_input.text() or constants.DEFAULT_IP - port = self.port_input.text() or str(constants.DEFAULT_PORT) + address = self.server_address_input.text() or DEFAULT_IP + port = self.port_input.text() or str(DEFAULT_PORT) valid_address = len(address) > 0 and re.match(r'^\d{1,4}\.\d{1,4}\.\d{1,4}\.\d{1,4}|localhost$', address) is not None diff --git a/client/gui.py b/client/gui.py index b6e9ab7..ad03066 100644 --- a/client/gui.py +++ b/client/gui.py @@ -6,8 +6,8 @@ from PyQt5.QtCore import Qt, QEvent from PyQt5.QtWidgets import QMainWindow, QLabel from sortedcontainers import SortedList -import constants -import helpers +from shared import constants +from shared import helpers from client.ui.MainWindow import Ui_MainWindow from client.worker import ReceiveWorker @@ -65,7 +65,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): else: self.received += change self.data_stats.setText(f'{helpers.sizeof_fmt(self.sent)} Sent, ' - f'{helpers.sizeof_fmt(self. received)} Received') + f'{helpers.sizeof_fmt(self.received)} Received') @staticmethod def log(log_data: dict) -> None: @@ -96,7 +96,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): at_maximum = last_position == scrollbar.maximum() self.messageHistory.setText('
'.join( - msg['compiled'] for msg in self.messages + msg['compiled'] for msg in self.messages )) scrollbar.setValue(scrollbar.maximum() if at_maximum else last_position) @@ -126,10 +126,10 @@ class MainWindow(QMainWindow, Ui_MainWindow): message = message.strip() if len(message) > 0: self.send(helpers.prepare_json( - { - 'type': constants.Types.MESSAGE, - 'content': message - } + { + 'type': constants.Types.MESSAGE, + 'content': message + } )) def update_connections(self, users: List[dict]): diff --git a/client/worker.py b/client/worker.py index e95923d..df1c623 100644 --- a/client/worker.py +++ b/client/worker.py @@ -4,8 +4,8 @@ import socket from PyQt5.QtCore import QThread, pyqtSignal -import constants -import helpers +from shared import constants +from shared import helpers class ReceiveWorker(QThread): diff --git a/server/commands.py b/server/commands.py index 955349e..be8f77f 100644 --- a/server/commands.py +++ b/server/commands.py @@ -5,7 +5,7 @@ import random from typing import List, Optional, Callable from typing import TYPE_CHECKING -import constants +from shared import constants if TYPE_CHECKING: from server.handler import Client diff --git a/server/db.py b/server/db.py index e0df0e1..fd5319f 100644 --- a/server/db.py +++ b/server/db.py @@ -5,7 +5,7 @@ import sqlite3 import threading from typing import List, Optional, Union -import constants +from shared import constants logger = logging.getLogger('database') logger.setLevel(logging.DEBUG) diff --git a/server/handler.py b/server/handler.py index 847efca..e421b3e 100644 --- a/server/handler.py +++ b/server/handler.py @@ -7,10 +7,10 @@ import uuid from json import JSONDecodeError from typing import Any, List, Optional -import constants -import helpers +from shared import constants +from shared import helpers # noinspection PyUnresolvedReferences -from exceptions import DataReceptionException +from shared.exceptions import DataReceptionException from server import db from server.commands import CommandHandler diff --git a/server/main.py b/server/main.py index 494cf15..dd229ec 100644 --- a/server/main.py +++ b/server/main.py @@ -1,8 +1,9 @@ import logging import socket +import sys import threading -import constants +from shared import constants from server import handler host = constants.DEFAULT_IP @@ -10,7 +11,7 @@ port = constants.DEFAULT_PORT server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind((host, port)) -server.listen() +server.listen(1) logger = logging.getLogger('server') logger.setLevel(logging.DEBUG) @@ -21,8 +22,11 @@ clients = [] # Receiving / Listening Function def receive(): while True: + conn = None + try: # Accept Connection + logger.debug('Waiting for connections...') conn, address = server.accept() logger.info(f"New connection from {address}") @@ -39,8 +43,12 @@ def receive(): thread.start() except KeyboardInterrupt: logger.info('Server closed by user.') + if conn: + conn.close() + break except Exception as e: logger.critical(e, exc_info=e) + break if __name__ == '__main__': diff --git a/constants.py b/shared/constants.py similarity index 100% rename from constants.py rename to shared/constants.py diff --git a/exceptions.py b/shared/exceptions.py similarity index 100% rename from exceptions.py rename to shared/exceptions.py diff --git a/helpers.py b/shared/helpers.py similarity index 98% rename from helpers.py rename to shared/helpers.py index eaa2ed3..0df6abd 100644 --- a/helpers.py +++ b/shared/helpers.py @@ -3,7 +3,7 @@ import json import time from typing import List, Tuple, Any -import constants +from shared import constants HEADER_LENGTH = 10