diff --git a/config.ini b/config.ini deleted file mode 100644 index 3ecc730..0000000 --- a/config.ini +++ /dev/null @@ -1,2 +0,0 @@ -[DEFAULT] -HeaderLength = 10 diff --git a/config.py b/config.py deleted file mode 100644 index 8e8fa13..0000000 --- a/config.py +++ /dev/null @@ -1,5 +0,0 @@ -from configparser import ConfigParser - - -config = ConfigParser() -config.read('config.ini') diff --git a/oclient.py b/oclient.py deleted file mode 100644 index 699a9de..0000000 --- a/oclient.py +++ /dev/null @@ -1,43 +0,0 @@ -import socket -import threading - -import constants -import helpers -from config import config - -HEADER_LENGTH = int(config['DEFAULT']['HeaderLength']) - -nickname = input("Nickname: ") - -client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) -client.connect(('127.0.0.1', 55555)) - - -def receive(): - while True: - try: - length = int(client.recv(HEADER_LENGTH).decode('utf-8')) - message = client.recv(length).decode('utf-8') - if message == constants.Requests.REQUEST_NICK: - client.send(helpers.prepare(nickname)) - else: - print(message) - except: - print("Error! Disconnecting.") - client.close() - break - - -# Sending Messages To Server -def write(): - while True: - message = input('> ') - client.send(helpers.prepare(message)) - - -# Starting Threads For Listening And Writing -receive_thread = threading.Thread(target=receive) -receive_thread.start() - -write_thread = threading.Thread(target=write) -write_thread.start() diff --git a/oserver.py b/oserver.py deleted file mode 100644 index 5ba3619..0000000 --- a/oserver.py +++ /dev/null @@ -1,145 +0,0 @@ -import json -import random -import socket -import threading -import time -import traceback -import uuid -import logging -from pprint import pprint - -import constants -import helpers - -# Connection Data -host = '127.0.0.1' -port = 55555 -HEADER_LENGTH = 10 - -# Starting Server -server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) -server.bind((host, port)) -server.listen() - -logging.basicConfig(level=logging.DEBUG, - format='[%(asctime)s] [%(name)s] [%(threadName)s] %(message)s') -logger = logging.getLogger('server') - -# Lists For Clients and Their Nicknames -clients = {} - - -def broadcast_data(data): - for client in clients.values(): - client['client'].send(data) - - -# Handling Messages From Clients -def handle(client_id): - logger.info(f'Beginning handling of {client_id}') - client = clients[client_id]['client'] - nickname = clients[client_id]['nickname'] - - while True: - try: - # Broadcasting Messages - length = int(client.recv(HEADER_LENGTH).decode('utf-8')) - logger.debug(f'Header received - Length {length}') - message = json.loads(client.recv(length).decode('utf-8')) - logger.info(f'Data received/parsed, type: {message["type"]}') - - if message['type'] == constants.Types.REQUEST: - if message['request'] == constants.Requests.REFRESH_CONNECTIONS_LIST: - client.send(helpers.prepare_json( - { - 'type': constants.Types.USER_LIST, - 'users': [ - { - 'nickname': other['nickname'], - 'color': other['color'] - } for other in clients.values() - ] - } - )) - elif message['type'] == constants.Types.NICKNAME: - nickname = message['nickname'] - if not clients[client_id]['has_nickname']: - logger.info("Nickname is {}".format(nickname)) - broadcast_data(helpers.prepare_server_message( - nickname='Server', - message=f'{nickname} joined!', - color=constants.Colors.BLACK - )) - clients[client_id]['has_nickname'] = True - else: - logger.info(f'{clients[client_id]["nickname"]} changed their name to {nickname}') - clients[client_id]['nickname'] = nickname - elif message['type'] == constants.Types.MESSAGE: - broadcast_data(helpers.prepare_server_message( - nickname=nickname, - message=message['content'], - color=clients[client_id]['color'] - )) - - # Basic command processing - if message['content'] == '/reroll': - color = random.choice(constants.Colors.ALL) - colorName = constants.Colors.ALL_NAMES[constants.Colors.ALL.index(color)] - clients[client_id]['color'] = color - broadcast_data(helpers.prepare_server_message( - nickname='Server', - message=f'Changed your color to {colorName} ({color})', - color=constants.Colors.BLACK - )) - except: - traceback.print_exc() - logger.info(f'Client {client_id} closed. ({clients[client_id]["nickname"]})') - client.close() - del clients[client_id] - broadcast_data(helpers.prepare_server_message( - nickname='Server', - message=f'{nickname} left!', - color=constants.Colors.BLACK - )) - break - - -# Receiving / Listening Function -def receive(): - while True: - # Accept Connection - client, address = server.accept() - logger.info("New Client from {}".format(str(address))) - - # Request And Store Nickname - client_id = str(uuid.uuid4()) - client.send(helpers.prepare_json( - { - 'type': constants.Types.REQUEST, - 'request': constants.Requests.REQUEST_NICK - } - )) - - clients[client_id] = { - 'client': client, - 'id': client_id, - 'nickname': client_id[:10], - 'first_seen': int(time.time()), - 'has_nickname': False, - 'color': random.choice(constants.Colors.ALL) - } - # pprint(clients[client_id]) - - client.send(helpers.prepare_json( - { - 'type': constants.Types.SERVER_MESSAGE, - 'content': 'Connected to server!' - } - )) - - # Start Handling Thread For Client - thread = threading.Thread(target=handle, args=(client_id,), name=client_id[:8]) - thread.start() - - -receive() diff --git a/out.py b/out.py deleted file mode 100644 index 9fbbec8..0000000 --- a/out.py +++ /dev/null @@ -1,82 +0,0 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'client\gui.ui' -# -# Created by: PyQt5 UI code generator 5.15.2 -# -# WARNING: Any manual changes made to this file will be lost when pyuic5 is -# run again. Do not edit this file unless you know what you are doing. - - -from PyQt5 import QtCore, QtGui, QtWidgets - - -class Ui_MainWindow(object): - def setupUi(self, MainWindow): - MainWindow.setObjectName("MainWindow") - MainWindow.resize(800, 609) - self.centralwidget = QtWidgets.QWidget(MainWindow) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.centralwidget.sizePolicy().hasHeightForWidth()) - self.centralwidget.setSizePolicy(sizePolicy) - self.centralwidget.setObjectName("centralwidget") - self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) - self.gridLayout.setObjectName("gridLayout") - self.horizontalLayout_2 = QtWidgets.QHBoxLayout() - self.horizontalLayout_2.setObjectName("horizontalLayout_2") - self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.textBrowser.sizePolicy().hasHeightForWidth()) - self.textBrowser.setSizePolicy(sizePolicy) - self.textBrowser.setMaximumSize(QtCore.QSize(16777215, 16777215)) - self.textBrowser.setObjectName("textBrowser") - self.horizontalLayout_2.addWidget(self.textBrowser) - self.gridLayout.addLayout(self.horizontalLayout_2, 0, 0, 1, 1) - self.horizontalLayout = QtWidgets.QHBoxLayout() - self.horizontalLayout.setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint) - self.horizontalLayout.setObjectName("horizontalLayout") - self.textEdit = QtWidgets.QTextEdit(self.centralwidget) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.textEdit.sizePolicy().hasHeightForWidth()) - self.textEdit.setSizePolicy(sizePolicy) - self.textEdit.setMaximumSize(QtCore.QSize(16777215, 70)) - self.textEdit.setObjectName("textEdit") - self.horizontalLayout.addWidget(self.textEdit) - self.gridLayout.addLayout(self.horizontalLayout, 1, 0, 1, 1) - MainWindow.setCentralWidget(self.centralwidget) - self.menubar = QtWidgets.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21)) - self.menubar.setObjectName("menubar") - self.menuFile = QtWidgets.QMenu(self.menubar) - self.menuFile.setObjectName("menuFile") - MainWindow.setMenuBar(self.menubar) - self.statusbar = QtWidgets.QStatusBar(MainWindow) - self.statusbar.setObjectName("statusbar") - MainWindow.setStatusBar(self.statusbar) - self.actionConnect_to = QtWidgets.QAction(MainWindow) - self.actionConnect_to.setObjectName("actionConnect_to") - self.actionSave_chat_to = QtWidgets.QAction(MainWindow) - self.actionSave_chat_to.setObjectName("actionSave_chat_to") - self.actionQuit = QtWidgets.QAction(MainWindow) - self.actionQuit.setObjectName("actionQuit") - self.menuFile.addAction(self.actionConnect_to) - self.menuFile.addAction(self.actionSave_chat_to) - self.menuFile.addAction(self.actionQuit) - self.menubar.addAction(self.menuFile.menuAction()) - - self.retranslateUi(MainWindow) - QtCore.QMetaObject.connectSlotsByName(MainWindow) - - def retranslateUi(self, MainWindow): - _translate = QtCore.QCoreApplication.translate - MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) - self.menuFile.setTitle(_translate("MainWindow", "File")) - self.actionConnect_to.setText(_translate("MainWindow", "Connect to...")) - self.actionSave_chat_to.setText(_translate("MainWindow", "Export chat...")) - self.actionQuit.setText(_translate("MainWindow", "Quit"))