mirror of
https://github.com/Xevion/tcp-chat.git
synced 2025-12-06 13:16:42 -06:00
cleanup and remove unusued/old files
This commit is contained in:
@@ -1,2 +0,0 @@
|
||||
[DEFAULT]
|
||||
HeaderLength = 10
|
||||
@@ -1,5 +0,0 @@
|
||||
from configparser import ConfigParser
|
||||
|
||||
|
||||
config = ConfigParser()
|
||||
config.read('config.ini')
|
||||
43
oclient.py
43
oclient.py
@@ -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()
|
||||
145
oserver.py
145
oserver.py
@@ -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()
|
||||
82
out.py
82
out.py
@@ -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"))
|
||||
Reference in New Issue
Block a user