예제 #1
0
 def restart_server(self):
     if not self.server.isAlive():
         return
     self.server.stop_server()
     self.server = Server()
     self.start_button.setText('Start')
     self.start_server()
예제 #2
0
def main():
    sock = Server(("", 50000))
    sock.accept()

    p_read = Process(target=read, args=(sock, ))
    p_read.daemon = True

    p_read.start()
    write(sock)
    print("通信を終了しました")
예제 #3
0
def write(sock: Server):
    while True:
        content = input()

        message = Message(content=content)

        body = Body(message=message)

        sock.send_body(body)

        if content == 'bye':
            break
예제 #4
0
 def set_server(self):
     if self.server.isAlive():
         self.server.stop_server()
         self.server = Server()
         self.start_button.setText('Start')
     self.json.set_server(self.current_config_combo_box.currentText())
     self.min_ram_slider.setValue(self.json.last_server['min-ram'])
     self.max_ram_slider.setValue(self.json.last_server['max-ram'])
     self.java_version_combo_box.setCurrentText(self.json.last_server['java-version'])
     self.jar_file_line_edit.setText(self.json.last_server['jar-file'])
     self.server_options_table.setRowCount(0)
     self.clear_server_options()
     self.setup_server_options()
예제 #5
0
def read(sock: Server):
    while True:
        body = sock.recv_body()
        print(f"{body.message.content.rjust(80)} < Partner")

        if body.message.content == 'bye':
            print("byeされました。通信を終了します")
            break
예제 #6
0
    def start_server(self):
        text = self.start_button.text()
        if text == 'Start':
            directory_dict = self.json.get_directory()
            path = directory_dict['full-path']
            if ' ' in path[0]:
                path[0] = "\"" + path[0] + "\""
            self.server.set_directory(directory_dict['working-directory'])
            self.server.set_args(path)
            self.server.set_window(self)

            self.server.start()
            self.start_button.setText('Stop')
        elif text == "Stop":
            self.server.stop_server()
            self.server = Server()
            self.start_button.setText('Start')
예제 #7
0
def bbs(sock: Server):
	body = sock.recv_body()
	log = Log(LOG_FILE_PATH)

	if body.action == Action.READ.value:
		log_messages = log.read_messages()
		messages = [remove_password(message) for message in log_messages]
		response = Response(
			state=State.SUCCESS.value,
			messages=messages
		)
		sock.send_response(response)

	elif body.action == Action.WRITE.value:
		message = body.message
		log_messages = log.read_messages()
		log_messages.append(message)
		log.write_messages(log_messages)

		response = Response(
			state=State.SUCCESS.value
		)
		sock.send_response(response)

	elif body.action == Action.DELETE.value:
		message = body.message
		log_messages = log.read_messages()
		messages = delete_message(log_messages, message)
		log.write_messages(messages)

		if len(log_messages) == len(messages):  # IDまたはPASSWORDが間違っている
			response = Response(
				state=State.FAILED.value
			)
			sock.send_response(response)
		else:
			response = Response(
				state=State.SUCCESS.value
			)
			sock.send_response(response)
예제 #8
0
    def __init__(self, parent=None):
        super().__init__(parent=parent)
        self.setupUi(self)
        self.start_button.clicked.connect(self.start_server)
        self.execute_button.clicked.connect(self.execute_command)
        self.restart_button.clicked.connect(self.restart_server)
        self.reload_button.clicked.connect(self.reload_server)
        self.kill_button.clicked.connect(self.kill_server)
        self.listWidget.set_window(self)
        self.max_ram = round(psutil.virtual_memory().total / 1000 / 1000 - 1000)
        self.qt_threads = []

        self.max_ram_label.setText('Max. Ram: %sMB' % str(self.max_ram))
        self.json = JsonHandler()
        self.server = Server()
        self.min_ram_label.setText('Min. Ram: 0MB')
        self.max_ram_slider.setMaximum(self.max_ram)
        self.min_ram_slider.setMaximum(self.max_ram)

        java_versions = []
        for folder in os.listdir("C:/Program Files/Java"):
            if folder.startswith('jre'):
                java_versions.append(folder)

        self.java_version_combo_box.addItems(sorted(java_versions))
        self.java_version_combo_box.setCurrentIndex(
            self.java_version_combo_box.findText(self.json.last_server['java-version']))
        self.java_version_combo_box.currentTextChanged.connect(self.java_version_selected)

        self.min_ram_slider.valueChanged.connect(self.min_slider_moving)
        self.max_ram_slider.valueChanged.connect(self.max_slider_moving)
        self.create_server_config_button.clicked.connect(self.create_server_configuration)
        self.max_ram_slider.setValue(self.json.last_server['max-ram'])
        self.min_ram_slider.setValue(self.json.last_server['min-ram'])
        self.current_config_combo_box.addItems(self.json.servers().keys())
        self.current_config_combo_box.setCurrentIndex(
            self.current_config_combo_box.findText(self.json.current_server()))
        self.current_config_combo_box.currentTextChanged.connect(self.set_server)
        self.launch_server_button.clicked.connect(self.start_server)
        self.add_whitelist_button.clicked.connect(self.add_player_to_whitelist)

        self.jar_file_line_edit.setText(self.json.get_directory()["full-path"][0])

        header = self.tableWidget.horizontalHeader()
        for i in range(0, 5):
            header.setSectionResizeMode(i, QtWidgets.QHeaderView.Stretch)
        header = self.server_options_table.horizontalHeader()
        for i in range(0, 3):
            header.setSectionResizeMode(i, QtWidgets.QHeaderView.Stretch)
        self.server_options_table.verticalHeader().setVisible(False)
        self.splitter.setSizes([100, 600])
        self.server_options_table.itemChanged.connect(self.update_server_options)
        self.server_options_table.itemDoubleClicked.connect(self.show_edit_warning)
        self.setup_server_options()

        self.cpu_worker = CpuWorker()
        self.cpu_worker_thread = QThread()
        self.cpu_worker.intReady.connect(self.cpu_value_ready)
        self.cpu_worker.moveToThread(self.cpu_worker_thread)
        self.cpu_worker_thread.started.connect(self.cpu_worker.procCounter)
        self.cpu_worker_thread.start()
        self.qt_threads.append(self.cpu_worker_thread)

        self.ram_worker = RamWorker()
        self.ram_worker_thread = QThread()
        self.ram_worker.intReady.connect(self.ram_value_ready)
        self.ram_worker.moveToThread(self.ram_worker_thread)
        self.ram_worker_thread.started.connect(self.ram_worker.procCounter)
        self.ram_worker_thread.start()
        self.qt_threads.append(self.ram_worker_thread)

        self.gui_worker = GuiWorker()
        self.gui_worker_thread = QThread()
        self.gui_worker.intReady.connect(self.gui_value_ready)
        self.gui_worker.moveToThread(self.gui_worker_thread)
        self.gui_worker_thread.started.connect(self.gui_worker.procCounter)
        self.gui_worker_thread.start()
        self.qt_threads.append(self.gui_worker_thread)

        self.server.set_window(self)
예제 #9
0
class ServerGui(QMainWindow, Ui_ServerGui):
    def __init__(self, parent=None):
        super().__init__(parent=parent)
        self.setupUi(self)
        self.start_button.clicked.connect(self.start_server)
        self.execute_button.clicked.connect(self.execute_command)
        self.restart_button.clicked.connect(self.restart_server)
        self.reload_button.clicked.connect(self.reload_server)
        self.kill_button.clicked.connect(self.kill_server)
        self.listWidget.set_window(self)
        self.max_ram = round(psutil.virtual_memory().total / 1000 / 1000 - 1000)
        self.qt_threads = []

        self.max_ram_label.setText('Max. Ram: %sMB' % str(self.max_ram))
        self.json = JsonHandler()
        self.server = Server()
        self.min_ram_label.setText('Min. Ram: 0MB')
        self.max_ram_slider.setMaximum(self.max_ram)
        self.min_ram_slider.setMaximum(self.max_ram)

        java_versions = []
        for folder in os.listdir("C:/Program Files/Java"):
            if folder.startswith('jre'):
                java_versions.append(folder)

        self.java_version_combo_box.addItems(sorted(java_versions))
        self.java_version_combo_box.setCurrentIndex(
            self.java_version_combo_box.findText(self.json.last_server['java-version']))
        self.java_version_combo_box.currentTextChanged.connect(self.java_version_selected)

        self.min_ram_slider.valueChanged.connect(self.min_slider_moving)
        self.max_ram_slider.valueChanged.connect(self.max_slider_moving)
        self.create_server_config_button.clicked.connect(self.create_server_configuration)
        self.max_ram_slider.setValue(self.json.last_server['max-ram'])
        self.min_ram_slider.setValue(self.json.last_server['min-ram'])
        self.current_config_combo_box.addItems(self.json.servers().keys())
        self.current_config_combo_box.setCurrentIndex(
            self.current_config_combo_box.findText(self.json.current_server()))
        self.current_config_combo_box.currentTextChanged.connect(self.set_server)
        self.launch_server_button.clicked.connect(self.start_server)
        self.add_whitelist_button.clicked.connect(self.add_player_to_whitelist)

        self.jar_file_line_edit.setText(self.json.get_directory()["full-path"][0])

        header = self.tableWidget.horizontalHeader()
        for i in range(0, 5):
            header.setSectionResizeMode(i, QtWidgets.QHeaderView.Stretch)
        header = self.server_options_table.horizontalHeader()
        for i in range(0, 3):
            header.setSectionResizeMode(i, QtWidgets.QHeaderView.Stretch)
        self.server_options_table.verticalHeader().setVisible(False)
        self.splitter.setSizes([100, 600])
        self.server_options_table.itemChanged.connect(self.update_server_options)
        self.server_options_table.itemDoubleClicked.connect(self.show_edit_warning)
        self.setup_server_options()

        self.cpu_worker = CpuWorker()
        self.cpu_worker_thread = QThread()
        self.cpu_worker.intReady.connect(self.cpu_value_ready)
        self.cpu_worker.moveToThread(self.cpu_worker_thread)
        self.cpu_worker_thread.started.connect(self.cpu_worker.procCounter)
        self.cpu_worker_thread.start()
        self.qt_threads.append(self.cpu_worker_thread)

        self.ram_worker = RamWorker()
        self.ram_worker_thread = QThread()
        self.ram_worker.intReady.connect(self.ram_value_ready)
        self.ram_worker.moveToThread(self.ram_worker_thread)
        self.ram_worker_thread.started.connect(self.ram_worker.procCounter)
        self.ram_worker_thread.start()
        self.qt_threads.append(self.ram_worker_thread)

        self.gui_worker = GuiWorker()
        self.gui_worker_thread = QThread()
        self.gui_worker.intReady.connect(self.gui_value_ready)
        self.gui_worker.moveToThread(self.gui_worker_thread)
        self.gui_worker_thread.started.connect(self.gui_worker.procCounter)
        self.gui_worker_thread.start()
        self.qt_threads.append(self.gui_worker_thread)

        self.server.set_window(self)

    def add_player_to_whitelist(self):
        if self.add_whitelist_line_edit.text() == '':
            return
        if self.json.add_player_to_whitelist(self.add_whitelist_line_edit.text()):
            self.whitelist_list_widget.clear()
            self.setup_whitelisted_players_widget()
            self.add_whitelist_line_edit.setText('')

    def update_server_options(self, item):
        if self.loading_server_options:
            return
        key = self.server_options_table.item(item.row(), 0).text()
        item = item.text()
        directory_dict = self.json.get_directory()
        path = directory_dict['working-directory'] + '/server.properties'
        lines = [line.strip() for line in open(path, 'r')]
        for index, line in enumerate(lines):
            if line.startswith('#'):
                continue
            split_line = line.split('=')
            if split_line[0] == key:
                lines[index] = "%s=%s" % (key, item)
        with open(path, 'w') as f:
            for line in lines:
                f.write(line + '\n')
            f.close()

    def show_edit_warning(self):
        global showed_server_options_warning
        if not showed_server_options_warning and self.server.isAlive():
            QMessageBox.about(self, 'Python Server Gui Dialog',
                              'You are about to modify a server option, these changes will not take affect until the server is restarted.')
            showed_server_options_warning = True

    def set_server(self):
        if self.server.isAlive():
            self.server.stop_server()
            self.server = Server()
            self.start_button.setText('Start')
        self.json.set_server(self.current_config_combo_box.currentText())
        self.min_ram_slider.setValue(self.json.last_server['min-ram'])
        self.max_ram_slider.setValue(self.json.last_server['max-ram'])
        self.java_version_combo_box.setCurrentText(self.json.last_server['java-version'])
        self.jar_file_line_edit.setText(self.json.last_server['jar-file'])
        self.server_options_table.setRowCount(0)
        self.clear_server_options()
        self.setup_server_options()

    def clear_server_options(self):
        self.ops_list_widget.clear()
        self.banned_ips_list_widget.clear()
        self.banned_players_list_widget.clear()

    def setup_server_options(self):
        self.loading_server_options = True
        directory_dict = self.json.get_directory()
        path = directory_dict['working-directory'] + '/server.properties'
        if not os.path.exists(path):
            self.server_options_table.setRowCount(0)
            return
        lines = [line.strip() for line in open(directory_dict['working-directory'] + '/server.properties', 'r') if
                 not line.startswith('#') and line != '']
        self.server_options_table.setRowCount(len(lines))
        row = 0
        column = 0
        for line in lines:
            key, value = line.split('=')
            if column == 2:
                column = 0
                row += 1
            if column == 0:
                item = QTableWidgetItem(key)
                item.setFlags(Qt.ItemIsEnabled)
                self.server_options_table.setItem(row, column, item)
                column += 1
            self.server_options_table.setItem(row, column, QTableWidgetItem(value))
            column += 1
        self.setup_whitelisted_players_widget()
        self.setup_banned_players_widget()
        self.setup_banned_ips()
        self.setup_operators()
        self.loading_server_options = False

    def setup_whitelisted_players_widget(self):
        whitelisted_players = self.json.whitelisted_players()
        if whitelisted_players is None:
            return
        for player in whitelisted_players:
            self.whitelist_list_widget.addItem(QListWidgetItem(player['name']))

    def setup_operators(self):
        operators = self.json.operators()
        if operators is None:
            return
        for player in operators:
            self.ops_list_widget.addItem(QListWidgetItem(player['name']))

    def setup_banned_players_widget(self):
        banned_players = self.json.banned_players()
        if banned_players is None:
            return
        for player in banned_players:
            self.banned_players_list_widget.addItem(QListWidgetItem(player['name']))

    def setup_banned_ips(self):
        banned_ips = self.json.banned_ips()
        if banned_ips is None:
            return
        for ip in banned_ips:
            self.banned_ips_list_widget.addItem(QListWidgetItem(str(ip['ip'])))

    def java_version_selected(self):
        self.json.set_java_version(self.java_version_combo_box.currentText())

    def cpu_value_ready(self, i):
        vbar = self.scrollArea.verticalScrollBar()
        vbar.setValue(vbar.maximum())
        self.cpu_progress_bar.setValue(i)

    def ram_value_ready(self, i):
        self.ram_progress_bar.setValue(i)

    def gui_value_ready(self, i):
        self.gui_usage_progress_bar.setValue(i)

    def min_slider_moving(self):
        self.min_ram_label.setText("Min Ram: %sMB" % str(self.min_ram_slider.value()))
        self.json.set_min_ram(self.min_ram_slider.value())
        if self.min_ram_slider.value() >= self.max_ram_slider.value():
            self.max_ram_slider.setValue(self.min_ram_slider.value())
            self.max_ram_slider.update()

    def max_slider_moving(self):
        self.max_ram_label.setText("Max Ram: %sMB" % str(self.max_ram_slider.value()))
        self.json.set_max_ram(self.max_ram_slider.value())
        if self.max_ram_slider.value() <= self.min_ram_slider.value():
            self.min_ram_slider.setValue(self.max_ram_slider.value())

    def update_players(self):
        for i in range(0, self.tableWidget.rowCount()):
            self.tableWidget.removeRow(i)
        self.tableWidget.setRowCount(len(self.server.get_players()))

        row = 0
        column = 0
        for player in self.server.get_players():
            for item in player.values():
                self.tableWidget.setItem(row, column, QTableWidgetItem(str(item)))
                column += 1
            row += 1
            column = 0

    def closeEvent(self, e):
        if self.server.isAlive():
            self.server.stop_server()
        for thread in self.qt_threads:
            thread.quit()

    def keyPressEvent(self, e):
        key = e.key()
        if key == Qt.Key_Enter or key == Qt.Key_Return:
            self.execute_command()
        elif key == Qt.Key_Up:
            if len(ran_commands) == 0:
                return
            self.input_lineedit.setText(ran_commands[-1])

    def start_server(self):
        text = self.start_button.text()
        if text == 'Start':
            directory_dict = self.json.get_directory()
            path = directory_dict['full-path']
            if ' ' in path[0]:
                path[0] = "\"" + path[0] + "\""
            self.server.set_directory(directory_dict['working-directory'])
            self.server.set_args(path)
            self.server.set_window(self)

            self.server.start()
            self.start_button.setText('Stop')
        elif text == "Stop":
            self.server.stop_server()
            self.server = Server()
            self.start_button.setText('Start')

    def execute_command(self):
        if not self.server.isAlive():
            self.input_lineedit.setText('')
            return
        self.execute_input(self.input_lineedit.text())

    def execute_input(self, input):
        if not self.server.isAlive():
            return
        self.server.execute_input(input)
        self.input_lineedit.setText('')

    def restart_server(self):
        if not self.server.isAlive():
            return
        self.server.stop_server()
        self.server = Server()
        self.start_button.setText('Start')
        self.start_server()

    def reload_server(self):
        if not self.server.isAlive():
            return
        self.server.execute_input('reload')
        self.server.execute_input('reload confirm')

    def kill_server(self):
        if not self.server.isAlive():
            return
        self.server.stop_server()
        self.server = Server()
        self.start_button.setText('Start')

    def create_server_configuration(self):
        name = QInputDialog.getText(self, 'Python Server Gui Dialog',
                                    'Please give this new server configuration a name', QLineEdit.Normal)[0]
        if name == '':
            return
        jar_file = QFileDialog.getOpenFileName(self, 'Select Jar File', '', 'JAR File (*.jar)')[0]
        if jar_file == '':
            return
        file = '\\'.join(jar_file.split('/'))
        min_ram = 0
        max_ram = 0
        server = {
            "min-ram": min_ram,
            "max-ram": max_ram,
            "java-version": self.java_version_combo_box.currentText(),
            "jar-file": file,
            "custom-arguments": None
        }
        self.max_ram_slider.setValue(0)
        self.min_ram_slider.setValue(0)
        self.json.create_server(name, server)
        self.current_config_combo_box.clear
        self.current_config_combo_box.addItems(self.json.servers().keys())
        self.current_config_combo_box.setCurrentIndex(self.current_config_combo_box.findText(name))
예제 #10
0
def main():
	sock = Server(("", 50000))
	while True:
		sock.accept()
		p = multiprocessing.Process(target=bbs, args=(sock,))
		p.start()