def itemChange(self, item): value = item.text() if str(value).isdigit(): if len(value) < 2: value = "0" + value item.setText(value) row = item.row() count = 0 for card in self.cardList: if count == row: FileHelper().deleteCard(card) newCard = Card(card.name,card.card,card.rank,card.cardType,card.attribute,card.speedDuel,card.atkPoints,card.defPoints,value) FileHelper().saveCard(newCard) count = count + 1 elif len(value) == 2: item.setText(value) row = item.row() count = 0 for card in self.cardList: if count == row: FileHelper().deleteCard(card) newCard = Card(card.name,card.card,card.rank,card.cardType,card.attribute,card.speedDuel,card.atkPoints,card.defPoints,value) FileHelper().saveCard(newCard) count = count + 1 else: QMessageBox.about(self.tableWidget,"Error", "Anzahl darf nur Zahlen enthalten. Wert wurde nicht gespeicher.")
def createTableViewButton(self): tableViewThread = threading.Thread( target=TableViewWindow().createTableViewWindow( FileHelper().loadCards(), self.dontShowCardsWithQuantityZero.get())) tableViewThread.daemon = True tableViewThread.start()
def importScripts(self): self.decEncHelper = DecodingEncodingHelper() self.channelManager = ChannelManager() self.clientManager = ClientManager() self.inputHandler = InputHandler(self.upTime) self.fileHelper = FileHelper() self.logHelper = LogHelper()
def createSearchWindowButton(self): searchEditThread = threading.Thread( target=SearchWindow().createSearchWindow( FileHelper().loadCards(), self.dontShowCardsWithQuantityZero.get())) searchEditThread.daemon = True searchEditThread.start()
def importScripts(self): self.decEncHelper = DecodingEncodingHelper() self.channelManager = ChannelManager() self.clientManager = ClientManager() self.fileHelper = FileHelper() self.logHelper = LogHelper() self.mysqlHelper = MysqlHelper()
def deleteRow(self): for row in self.tableWidget.selectedIndexes(): rowCount = row.row() count = 0 for card in self.cardList: if count == rowCount: FileHelper().deleteCard(card) count = count + 1 messagebox.showinfo("Info", "Zum Hauptmenu zurückkehren um aktualisierte tabelle zu erhalten.")
def createCard(self): self.verifyEntry() if self.creatCardBool: rank = str(self.rankEntry.get()) if len(rank) < 2: rank = "0" + rank quantity = str(self.quantityEntry.get()) if len(quantity) < 2: quantity = "0" + quantity atkPoints = str(self.atkPointsEntry.get()) if len(atkPoints) == 1: atkPoints = "000" + atkPoints elif len(atkPoints) == 2: atkPoints = "00" + atkPoints elif len(atkPoints) == 3: atkPoints = "0" + atkPoints defPoints = str(self.defPointsEntry.get()) if len(defPoints) == 1: defPoints = "000" + defPoints elif len(defPoints) == 2: defPoints = "00" + defPoints elif len(defPoints) == 3: defPoints = "0" + defPoints card = Card(str(self.nameEntry.get()), str(self.cardEntryVariable.get()), rank, str(self.typeEntryVariable.get()), str(self.attributeEntryVariable.get()), str(self.speedDuelEntryVariable.get()), atkPoints, defPoints, quantity) FileHelper().saveCard(card) self.cardList.append(card) self.cardCreatorWindow.destroy() FileHelper().backupCards() try: if self.mode.get() == 1: self.createCardCreatorWindow(self.cardList, self.mode) except AttributeError: var = None self.creatCardBool = True
def __init__(self): self.fileHelper = FileHelper() self.logHelper = LogHelper() config = self.fileHelper.getConfig("Mysql Server Config") try: self.connection = mysql.connector.connect(user=config.username, password=config.password, host=config.ip, database=config.database) except: print("Couldn't establish connection to mysql database(" + config.database + ") with ip: " + config.ip) #TODO: find a way to handle with this
def __init__(self): msg = QMessageBox() msg.setText("Hinweis: Nur Codes Deutscher Karten verwenden.") msg.exec() super(Main, self).__init__() self.mainWindow = uic.loadUi("CardOrganizer3.ui", self) self.cardList = FileHelper().loadCards() self.codeEntry = self.mainWindow.codeEntry self.quantityEntry = self.mainWindow.quantityEntry self.speedDualEntry = self.mainWindow.speedDualEntry self.mainWindow.addButton.clicked.connect(self.addCard)
def __init__(self, announce): self.mysqlMode = 0 # 0 = Mysql; 1 = MysqlLite self.fileHelper = FileHelper() self.logHelper = LogHelper() config = self.fileHelper.getConfig("Mysql Server Config") try: self.connection = mysql.connector.connect(user=config.username, password=config.password, host=config.ip, database=config.database) except: self.mysqlMode = 1 if (announce): print( "[" + datetime.datetime.now().strftime("%H:%M:%S") + " ERROR]: Couldn't establish connection to mysql database(" + config.database + ") with ip: " + config.ip) print("[" + datetime.datetime.now().strftime("%H:%M:%S") + " INFO]: Falling back to MysqlLite.") #sqllite self.conn = self.create_connection("data/database.db") checkForAccountsTable = "SELECT * FROM accounts" result = self.executeCommandOnLite(self.conn, checkForAccountsTable) try: for row in result: if row[0] == 1: result = True else: result = False except: result = False if result == False: createTableStatement = "CREATE TABLE accounts (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, username TEXT NOT NULL, password TEXT NOT NULL, email TEXT NOT NULL, rank TEXT NOT NULL, loggedIn TINYINT NOT NULL DEFAULT '0');" print("[" + datetime.datetime.now().strftime("%H:%M:%S") + " INFO]: Created accounts table in MysqlLite database.") self.executeCommandOnLite(self.conn, createTableStatement)
def handle(self): logHelper = LoggingHelper() fileHelper = FileHelper() self.client = self.request self.clients = Clients() if self.appendClient: logHelper.printAndWriteServerLog("[Server/Info] " + str(self.client_address[0]) + ":" + str(self.client_address[1]) + " connected to the server") for clientInList in fileHelper.readTXTFile("data/", "banList"): clientInListString = clientInList.split(":") try: banTime = clientInListString[1] except IndexError: var = None if self.client_address[0] + "\n" in clientInList: logHelper.printAndWriteServerLog( "[Server/Info] " + str(self.client_address[0]) + ":" + str(self.client_address[1]) + " is permanantly banned on the server") self.client.sendall( self.StringToBytes( "405[Client/Info] You are permanantly banned on this server" )) self.client.close() self.appendClient = False elif self.client_address[0] + ":" + banTime in clientInList: currTime = datetime.datetime.now().timestamp() banTime = banTime[:-1] if (currTime > float(banTime)): print("1") else: print("2") logHelper.printAndWriteServerLog( "[Server/Info] " + str(self.client_address[0]) + ":" + str(self.client_address[1]) + " is temporary banned on the server. Remaining Time: " + str(int((float(banTime) - currTime) / 60)) + "Minutes") self.client.sendall( self.StringToBytes( "405[Client/Info] You are temporary banned on this server. Remaining Time: " + str(int((float(banTime) - currTime) / 60)) + "Minutes")) self.client.close() self.appendClient = False else: self.clients.addClient(self.client, "None") self.appendClient = False try: self.data = self.BytesToString(self.client.recv(1024).strip()) if len(self.data[6:]) == 0: logHelper.printAndWriteServerLog("[Server/Info] " + str(self.client_address[0]) + ":" + str(self.client_address[1]) + " sent client informations") self.handleRequest(self.data, self.client) else: logHelper.printAndWriteChannelLog("[Server/Channel/Info] " + str(self.client_address[0]) + ":" + str(self.client_address[1]) + " " + self.data[3:]) self.handleRequest(self.data, self.client) except: logHelper.printAndWriteServerLog("[Server/Error] " + str(self.client_address[0]) + ":" + str(self.client_address[1]) + " closed connection unexpectedly") self.clients.removeClient(self.client, self.username)
def __init__(self): self.cardList = FileHelper().loadCards() self.app = QApplication([]) msg = QMessageBox() msg.setText("Hinweis: Nur Codes Deutscher Karten verwenden.") msg.exec() window = QWidget() layout = QGridLayout() self.codeEntry = QLineEdit() self.quantityEntry = QLineEdit() self.speedDualEntry = QCheckBox("Speed Dual") addButton = QPushButton("Hinzufügen") addButton.clicked.connect(self.addCard) self.trapCardsTable = QTableWidget() rows = 0 for card in self.cardList: if card.cardObject == "trap": rows = rows + 1 self.trapCardsTable.setRowCount(rows) self.trapCardsTable.setColumnCount(5) self.trapCardsTable.setHorizontalHeaderLabels( ["Name:", "Typ:", "Text:", "Speed Dual:", "Anzahl:"]) self.trapCardsTable.setSortingEnabled(True) self.trapCardsTable.resizeColumnsToContents() self.trapCardsTable.resizeRowsToContents() header = self.trapCardsTable.horizontalHeader() header.setSectionResizeMode(0, QtWidgets.QHeaderView.ResizeToContents) header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents) header.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeToContents) header.setSectionResizeMode(4, QtWidgets.QHeaderView.ResizeToContents) count = 0 for card in self.cardList: if card.cardObject == "trap": self.trapCardsTable.setItem(count, 0, QTableWidgetItem(card.name)) self.trapCardsTable.setItem(count, 1, QTableWidgetItem(card.trapType)) self.trapCardsTable.setItem(count, 2, QTableWidgetItem(card.text)) self.trapCardsTable.setItem(count, 3, QTableWidgetItem(card.speedDuel)) self.trapCardsTable.setItem(count, 4, QTableWidgetItem(card.quantity)) count = count + 1 self.spellCardsTable = QTableWidget() rows = 0 for card in self.cardList: if card.cardObject == "spell": rows = rows + 1 self.spellCardsTable.setRowCount(rows) self.spellCardsTable.setColumnCount(5) self.spellCardsTable.setHorizontalHeaderLabels( ["Name:", "Typ:", "Text:", "Speed Dual:", "Anzahl:"]) self.spellCardsTable.setSortingEnabled(True) self.spellCardsTable.resizeColumnsToContents() self.spellCardsTable.resizeRowsToContents() header = self.spellCardsTable.horizontalHeader() header.setSectionResizeMode(0, QtWidgets.QHeaderView.ResizeToContents) header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents) header.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeToContents) header.setSectionResizeMode(4, QtWidgets.QHeaderView.ResizeToContents) count = 0 for card in self.cardList: if card.cardObject == "spell": self.spellCardsTable.setItem(count, 0, QTableWidgetItem(card.name)) self.spellCardsTable.setItem(count, 1, QTableWidgetItem(card.spellType)) self.spellCardsTable.setItem(count, 2, QTableWidgetItem(card.text)) self.spellCardsTable.setItem(count, 3, QTableWidgetItem(card.speedDuel)) self.spellCardsTable.setItem(count, 4, QTableWidgetItem(card.quantity)) count = count + 1 self.monsterCardsTable = QTableWidget() rows = 0 for card in self.cardList: if card.cardObject == "monster": rows = rows + 1 self.monsterCardsTable.setRowCount(rows) self.monsterCardsTable.setColumnCount(10) self.monsterCardsTable.setHorizontalHeaderLabels([ "Name:", "Attribut:", "Level:", "Monstertyp:", "Kartentyp:", "ATK:", "DEF:", "Text:", "Speed Duel:", "Anzahl:" ]) self.monsterCardsTable.setSortingEnabled(True) self.monsterCardsTable.resizeColumnsToContents() self.monsterCardsTable.resizeRowsToContents() header = self.monsterCardsTable.horizontalHeader() header.setSectionResizeMode(0, QtWidgets.QHeaderView.ResizeToContents) header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents) header.setSectionResizeMode(2, QtWidgets.QHeaderView.ResizeToContents) header.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeToContents) header.setSectionResizeMode(4, QtWidgets.QHeaderView.ResizeToContents) header.setSectionResizeMode(5, QtWidgets.QHeaderView.ResizeToContents) header.setSectionResizeMode(6, QtWidgets.QHeaderView.ResizeToContents) header.setSectionResizeMode(8, QtWidgets.QHeaderView.ResizeToContents) header.setSectionResizeMode(9, QtWidgets.QHeaderView.ResizeToContents) count = 0 for card in self.cardList: if card.cardObject == "monster": self.monsterCardsTable.setItem(count, 0, QTableWidgetItem(card.name)) self.monsterCardsTable.setItem( count, 1, QTableWidgetItem(card.attribute)) self.monsterCardsTable.setItem(count, 2, QTableWidgetItem(card.level)) self.monsterCardsTable.setItem( count, 3, QTableWidgetItem(card.monsterType)) self.monsterCardsTable.setItem(count, 4, QTableWidgetItem(card.cardType)) self.monsterCardsTable.setItem( count, 5, QTableWidgetItem(card.atkPoints)) self.monsterCardsTable.setItem( count, 6, QTableWidgetItem(card.defPoints)) self.monsterCardsTable.setItem(count, 7, QTableWidgetItem(card.text)) self.monsterCardsTable.setItem( count, 8, QTableWidgetItem(card.speedDuel)) self.monsterCardsTable.setItem(count, 9, QTableWidgetItem(card.quantity)) count = count + 1 layout.addWidget(QLabel('Karten Code:'), 0, 0) layout.addWidget(self.codeEntry, 0, 1) layout.addWidget(self.speedDualEntry, 2, 0) layout.addWidget(QLabel("Anzahl:"), 1, 0) layout.addWidget(self.quantityEntry, 1, 1) layout.addWidget(addButton, 3, 0) trapCardsLabel = QLabel("Fallen Karten:") trapCardsLabel.setStyleSheet('color: purple') layout.addWidget(trapCardsLabel, 4, 0) spellCardsLabel = QLabel("Zauber Karten:") spellCardsLabel.setStyleSheet('color: green') layout.addWidget(spellCardsLabel, 4, 1) layout.addWidget(self.trapCardsTable, 5, 0) layout.addWidget(self.spellCardsTable, 5, 1) monsterCardsLabel = QLabel("Monster Karten:") monsterCardsLabel.setStyleSheet('color: #662907') layout.addWidget(monsterCardsLabel, 6, 0) layout.addWidget(self.monsterCardsTable, 7, 0, 8, 0) window.setLayout(layout) window.show() self.app.exec_()
def addCard( self ): #make ad many function eg code,code,code all with quanitity given codeList = list() quantity = self.quantityEntry.text() code = self.codeEntry.text() codes = code.split(",") for code in codes: codeList.append(code) if len(code) == 0: msg = QMessageBox() msg.setText("Fehler: Code darf nicht leer sein.") msg.exec() else: if len(quantity) == 0: msg = QMessageBox() msg.setText("Fehler: Anzahl darf nicht leer sein.") msg.exec() else: if str(quantity).isdigit(): if self.speedDualEntry.isChecked(): speedDuel = "Jan" else: speedDuel = "Nein" for code in codeList: url = "https://www.db.yugioh-card.com/yugiohdb/card_search.action?ope=1&sess=1&keyword=" + code + "&stype=4&ctype=&starfr=&starto=&pscalefr=&pscaleto=&linkmarkerfr=&linkmarkerto=&link_m=2&atkfr=&atkto=&deffr=&defto=&othercon=2" if platform == "darwin": driver = webdriver.Chrome( "/Users/jangj/Desktop/OneDrive/Desktop/Workspace/Privat/Python/Leonard/CardOrganizer2/chromedriver" ) elif platform == "win32": driver = webdriver.Chrome( "B:\Programme\cardsorter2\chromedriver.exe") driver.get(url) typeOfCard = driver.find_element_by_class_name( "box_card_attribute") if typeOfCard.text == "FALLE": nameSourced = driver.find_element_by_class_name( "card_status") name = nameSourced.text name = str(name).replace("\n", "") name = str(name).replace(":", "") trapType = "Normal" try: trapTypeSourced = driver.find_element_by_class_name( "box_card_effect") trapType = trapTypeSourced.text except: var = None textSourced = driver.find_element_by_class_name( "box_card_text") text = textSourced.text text = str(text).replace("\n", "") text = str(text).replace(":", "") if "\u25cf" in text: text = str(text).replace("\u25cf", "-") trapCardObject = TrapCard("trap", name, trapType, text, speedDuel, quantity) for card in self.cardList: if card.name == trapCardObject.name: msg = QMessageBox( ) #TODO:add buttons with add quantity that was given, add card as new uniq, not add msg.setText( "Hinweis: Fallen Karte mit dem selben Namen exisitert bereits." ) msg.exec() self.cardList.append(trapCardObject) FileHelper().saveCard(trapCardObject) self.addRow(trapCardObject) elif typeOfCard.text == "ZAUBER": nameSourced = driver.find_element_by_class_name( "card_status") name = nameSourced.text name = str(name).replace("\n", "") name = str(name).replace(":", "") spellType = "Normal" try: spellTypeSourced = driver.find_element_by_class_name( "box_card_effect") spellType = spellTypeSourced.text except: var = None textSourced = driver.find_element_by_class_name( "box_card_text") text = textSourced.text text = str(text).replace("\n", "") text = str(text).replace(":", "") if "\u25cf" in text: text = str(text).replace("\u25cf", "-") spellCardObject = SpellCard( "spell", name, spellType, text, speedDuel, quantity) for card in self.cardList: if card.name == spellCardObject.name: msg = QMessageBox( ) #TODO:add buttons with add quantity that was given, add card as new uniq, not add msg.setText( "Hinweis: Zauber Karte mit dem selben Namen exisitert bereits." ) msg.exec() self.cardList.append(spellCardObject) FileHelper().saveCard(spellCardObject) self.addRow(spellCardObject) else: nameSourced = driver.find_element_by_class_name( "card_status") name = nameSourced.text name = str(name).replace("\n", "") name = str(name).replace(":", "") attributeSourced = driver.find_element_by_class_name( "box_card_attribute") attribute = attributeSourced.text try: levelSourced = driver.find_element_by_css_selector( "span.box_card_level_rank.level") level = levelSourced.text except: try: levelSourced = driver.find_element_by_class_name( "box_card_linkmarker") level = levelSourced.text except: var = None infoSourced = driver.find_element_by_class_name( "card_info_species_and_other_item") info = infoSourced.text info = str(info).strip("[") info = str(info).strip("]") info = str(info).strip() info = str(info).split("/") if len(info) == 1: monsterType = info[0] cardType = "Normal" elif len(info) == 2: monsterType = info[0] cardType = str(info[1]).strip() else: monsterType = info[0] cardType = str(info[1]).strip() + "/" + str( info[2]).strip() atkPointsSourced = driver.find_element_by_class_name( "atk_power") atkPoints = atkPointsSourced.text atkPoints = str(atkPoints).replace("ATK ", "") defPointsSourced = driver.find_element_by_class_name( "def_power") defPoints = defPointsSourced.text defPoints = str(defPoints).replace("DEF ", "") textSourced = driver.find_element_by_class_name( "box_card_text") text = textSourced.text text = str(text).replace("\n", "") text = str(text).replace(":", "") if "\u25cf" in text: text = str(text).replace("\u25cf", "-") monsterCardObject = MonsterCard( "monster", name, attribute, level, monsterType, cardType, atkPoints, defPoints, text, speedDuel, quantity) for card in self.cardList: if card.name == monsterCardObject.name: msg = QMessageBox( ) #TODO:add buttons with add quantity that was given, add card as new uniq, not add msg.setText( "Hinweis: Monster Karte mit dem selben Namen exisitert bereits." ) msg.exec() self.cardList.append(monsterCardObject) FileHelper().saveCard(monsterCardObject) self.addRow(monsterCardObject) driver.close() FileHelper().backupCards() self.codeEntry.setText("") self.quantityEntry.setText("") else: msg = QMessageBox() msg.setText("Fehler: Anzahl muss eine Zahl sein.") msg.exec()
def handle( self ): #overwrite TODO: find a way to import script only once not once per handle call self.decEncHelper = DecodingEncodingHelper() self.channelManager = ChannelManager() self.clientManager = ClientManager() self.mysqlHelper = MysqlHelper() self.fileHelper = FileHelper() self.logHelper = LogHelper() if self.appendClient: self.clientObject = Client(self.request, "*NOT_ASSIGNED*", "*NOT_ASSIGNED*", "*NOT_ASSIGNED*") if len(self.fileHelper.readTXTFile("data/", "banList")) > 1: for client in self.fileHelper.readTXTFile("data/", "banList"): try: banTime = client.split(":")[1] except IndexError: pass if self.clientObject.ip + "\n" == client: self.logHelper.log( "info", self.clientObject.ip + ":" + str(self.clientObject.port) + " is permanantly banned on the server") self.clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "405[Client/Info] You are permanantly banned on this server" )) self.clientObject.socketObject.close() self.appendClient = False elif self.clientObject.ip + ":" + banTime == client: currentTimeStamp = datetime.datetime.now().timestamp() banTime = banTime[:-1] if (currentTimeStamp > float(banTime)): self.fileHelper.removeClientFromBanList( self.clientObject.ip) self.clientManager.addClient(self.clientObject) self.logHelper.log( "info", str(self.clientObject.ip) + ":" + str(self.clientObject.port) + " connected to the server") print( self.mysqlHelper.getAccountRank( self.clientObject)) if len( self.mysqlHelper.getAccountRank( self.clientObject)) < 3: self.clientObject.rank = "user" self.mysqlHelper.updateAccountRank( self.clientObject) self.appendClient = False self.tryRecv = True else: self.logHelper.log( "info", self.clientObject.ip + ":" + str(self.clientObject.port) + " is temporary banned on the server. Remaining Time: " + str( int((float(banTime) - currentTimeStamp) / 60)) + "Minutes") self.clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "405[Client/Info] You are temporary banned on this server. Remaining Time: " + str( int((float(banTime) - currentTimeStamp) / 60)) + " Minutes")) self.channelManager.removeChannelMember( self.clientObject.channelObject, self.clientObject) self.clientObject.socketObject.close() self.appendClient = False break elif "BanList:\n" == client: pass else: self.clientManager.addClient(self.clientObject) self.logHelper.log( "info", str(self.clientObject.ip) + ":" + str(self.clientObject.port) + " connected to the server.") self.appendClient = False self.tryRecv = True else: self.clientManager.addClient(self.clientObject) self.logHelper.log( "info", str(self.clientObject.ip) + ":" + str(self.clientObject.port) + " connected to the server.") self.appendClient = False self.tryRecv = True if self.tryRecv: try: self.data = self.decEncHelper.bytesToString( self.clientObject.socketObject.recv(1024)) self.handleRequest(self.data, self.clientObject) except: for clientObjectInList in self.clientManager.clientList: if clientObjectInList != self.clientObject: if self.loggedIn: if self.channelManager.channelContains( clientObjectInList, self.clientObject.channelObject.name): clientObjectInList.socketObject.sendall( self.decEncHelper.stringToBytes( "811[Client/Info] " + self.clientObject.username + " quit.")) self.logHelper.log( "info", self.clientObject.ip + ":" + str(self.clientObject.port) + " Disconnected") self.mysqlHelper.logoutAccount(self.clientObject) self.clientManager.removeClient(self.clientObject) if self.loggedIn: self.channelManager.removeChannelMember( self.clientObject.channelObject, self.clientObject)
def backupCardFileDataButton(self): FileHelper().backupCards() messagebox.showinfo("Info", "Backup wurde erstellt.")
def createCardWindowButton(self): cardCreatorThread = threading.Thread( target=CardCreatorWindow().createCardCreatorWindow( FileHelper().loadCards(), self.addCardsMode)) cardCreatorThread.daemon = True cardCreatorThread.start()
class Server(): inptHandler = None logHelper = None server = None ip = "" #config t = FileHelper().getConfig()[2] port = int(t[5:]) #helper def BytesToString(self, bytes): return str(bytes, "utf-8") def StringToBytes(self, string): return bytes(string, "utf-8") def __init__(self): self.inptHandler = InputHandler() self.logHelper = LoggingHelper() self.ip = str(socket.gethostbyname(socket.gethostname())) self.server = ServerThread((self.ip, self.port), RequestHandler) serverThread = threading.Thread(target=self.server.serve_forever) serverThread.daemon = True serverThread.start() self.logHelper.printAndWriteServerLog("[Server/Info] Started on ip: " + str(self.ip) + " with port: " + str(self.port) + " in " + serverThread.name) self.askForInput() def askForInput(self): while True: try: message = input() except KeyboardInterrupt: self.logHelper.printAndWriteServerLog( "[Server/Info] Gracefully stopping server...") from utils.RequestHandler import Clients #pylint: disable=E0611 if len(Clients().clientList) < 1: self.logHelper.printAndWriteServerLog( "[Server/Info] Gracefully stopped server") break else: for client in Clients().clientList: for key in client.keys(): key.sendall( self.StringToBytes( "403" + "[Client/Info] Server shut down")) self.logHelper.printAndWriteServerLog( "[Server/Info] Gracefully stopped server") break if str(message).startswith("/"): self.inptHandler.handleInput(str(message[1:])) else: self.logHelper.printAndWriteServerLog( "[Server/Error] Unknown command: (" + str(message) + ")") self.logHelper.printAndWriteServerLog( "[Server/Error] type /help for a list of commands")
def __init__(self): self.fileHelper = FileHelper() self.logHelper = LoggingHelper() self.clients = Clients()
def createStatWindowButton(self): tableViewThread = threading.Thread( target=StatWindow().createStatWindow(FileHelper().loadCards())) tableViewThread.daemon = True tableViewThread.start()
def importScripts(self): self.decEncHelper = DecodingEncodingHelper() self.inputHandler = InputHandler(self.output) self.fileHelper = FileHelper(self.output) self.guiHelper = GUIHelper(self.output)
def handle(self): logHelper = LoggingHelper() fileHelper = FileHelper() self.client = self.request self.clients = Clients() if self.appendClient: logHelper.printAndWriteServerLog("[Server/Info] " + str(self.client_address[0]) + ":" + str(self.client_address[1]) + " connected to the server") for clientInList in fileHelper.readTXTFile("data/", "banList"): clientInListString = clientInList.split(":") try: banTime = clientInListString[1] except IndexError: var = None #pylint: disable=W0612 if self.client_address[0] + "\n" in clientInList: logHelper.printAndWriteServerLog( "[Server/Info] " + str(self.client_address[0]) + ":" + str(self.client_address[1]) + " is permanantly banned on the server") self.client.sendall( self.StringToBytes( "405[Client/Info] You are permanantly banned on this server" )) self.client.close() self.appendClient = False elif self.client_address[ 0] + ":" + banTime in clientInList: #FIX_ME_DEPLETED:decrease banntime overtime logHelper.printAndWriteServerLog( "[Server/Info] " + str(self.client_address[0]) + ":" + str(self.client_address[1]) + " is temporary banned on the server. Remaining Time: " + clientInListString[1] + "Minutes") self.client.sendall( self.StringToBytes( "405[Client/Info] You are temporary banned on this server. Remaining Time: " + str(int(clientInListString[1])) + "Minutes")) self.client.close() self.appendClient = False else: self.clients.addClient(self.client, "None") self.appendClient = False try: self.data = self.BytesToString(self.client.recv(1024).strip()) if len(self.data[6:]) == 0: logHelper.printAndWriteServerLog("[Server/Info] " + str(self.client_address[0]) + ":" + str(self.client_address[1]) + " sent client informations") self.handleRequest(self.data) else: logHelper.printAndWriteChannelLog("[Server/Channel/Info] " + str(self.client_address[0]) + ":" + str(self.client_address[1]) + " " + self.data[3:]) self.handleRequest(self.data) except: logHelper.printAndWriteServerLog("[Server/Error] " + str(self.client_address[0]) + ":" + str(self.client_address[1]) + " closed connection unexpectedly") self.clients.removeClient(self.client, self.username)
def __init__(self): FileHelper().backupCards() MainWindow().createMainWindow()