def createList(self):
        dados = self.generateHistory()
        campoHist = Listbox()
        for pos, dado in enumerate(dados):
            campoHist.insert(
                pos,
                f"Id: {dado[0]} - valor(contraposta): {dado[1]} - servico: {dado[2]} - aceito: {dado[3]} - situaçao: {dado[4]}"
            )
            print()

        campoHist.place(relx=0.105, rely=0.180, width=450, height=200)
        campoHist.update()
    def createList(self):
        dados = self.generateHistory()
        campoHist = Listbox()
        for pos, dado in enumerate(dados):
            campoHist.insert(
                pos,
                f"Id: {dado[0]} | Servico: {dado[1]} | valor: {dado[2]} | endereco: {dado[3]} | vagas: {dado[4]} | Descrição: {dado[-1]} "
            )
            print()

        campoHist.place(relx=0.105, rely=0.180, width=450, height=200)
        campoHist.update()
示例#3
0
class StartPage(ttk.Frame):
    """
    初始界面
    """

    def __init__(self, parent, mainframe):
        ttk.Frame.__init__(self, parent)
        self.mainframe = mainframe
        self.mainframe.title("网络测试(NetworkTest)")

        # 菜单栏
        self.mainframe.option_add('*tearOff', FALSE)
        menubar = Menu(self.mainframe)
        self.mainframe['menu'] = menubar
        menu_tools = Menu(menubar)
        menu_help = Menu(menubar)
        menubar.add_cascade(menu=menu_tools, label='工具库(Tools)')
        menubar.add_cascade(menu=menu_help, label='帮助(H)')
        menu_tools.add_command(label='IP地址测试(IP Test)',
                               command=lambda: mainframe.show_frame("StartPage"))
        menu_help.add_command(
            label='关于(About)', command=lambda: self.About_view())
        menu_tools.add_command(label='网段扫描(Network scanning)',
                               command=lambda: mainframe.show_frame("Network_scan"))
        menu_tools.add_command(label='自定义扫描(Auto Test)',
                               command=lambda: mainframe.show_frame("ALL_IPtest"))

        # 单个地址测试
        self.one_IPtest_img = ImageTk.PhotoImage(one_IPtest_image)
        self.IPtest = ttk.Label(self, text='IP地址测试',
                                image=self.one_IPtest_img, compound='left', font=TITLE_FONT, foreground='#1296db')

        self.Ip_start = ttk.Label(self, text='输入地址:', compound='left')
        self.one_iptest = StringVar()
        self.one_Ip_Entry = ttk.Entry(self, textvariable=self.one_iptest)
        self.one_scanning = ttk.Button(
            self, text="测试", command=lambda: self.One_IPtest())

        self.clear_views = ttk.Button(
            self, text="清空", command=lambda: self.cleane_view())

        self.Stop_test = ttk.Button(
            self, text="停止", command=lambda: self.Stop_Popen())

        self.choie_N = ttk.Label(self, text="选择测试次数:", compound='left')
        self.view_title = ttk.Label(self, text="测试结果", compound='left')

        # stop_popen
        self.stop_IPtest = StringVar()
        self.stop_IPtest.set('1')

        # 选择ping次数
        self.count_IPtest = StringVar()
        self.country_one = ttk.Combobox(self, textvariable=self.count_IPtest)
        self.country_one.bind('<< ComboboxSelected >>', function)
        self.country_one['values'] = ('2', '4', '10', '100', '∞')
        self.count_IPtest.set('4')

        # 结果显示
        VERTICAL = "vertical"
        self.Scanning_one = Listbox(self, height=20, width=100)
        self.ScanViews_one = ttk.Scrollbar(
            self, orient=VERTICAL, command=self.Scanning_one.yview)
        self.Scanning_one['yscrollcommand'] = self.ScanViews_one.set
        ttk.Sizegrip().grid(column=2, row=4, sticky="se")

        # 布局
        self.IPtest.grid(column=0, row=0, sticky="nwes", padx=5, pady=5)
        self.Ip_start.grid(column=1, row=1, sticky="nwes", padx=5, pady=5)
        self.one_Ip_Entry.grid(column=2, row=1, sticky="nwes", padx=5, pady=5)
        self.choie_N.grid(column=3, row=1, sticky="nwes", padx=5, pady=5)
        self.country_one.grid(column=4, row=1, sticky="nwes", padx=5, pady=5)
        self.one_scanning.grid(column=5, row=1, sticky="nwes", padx=5, pady=5)
        self.view_title.grid(column=1, row=2, sticky="nwes", padx=5, pady=5)
        self.ScanViews_one.grid(column=21, row=3, sticky="ns")
        self.Scanning_one.grid(
            column=1, row=3, sticky="nwes", columnspan=10, padx=5, pady=5)
        self.Stop_test.grid(column=1, row=11, sticky="nwes",
                            columnspan=1, rowspan=1, padx=5, pady=5)
        self.clear_views.grid(column=10, row=11, sticky="nwes",
                              columnspan=1, rowspan=1, padx=5, pady=5)

    # 开始ping测试

    def One_IPtest(self):
        """
        获取IP,开始Ping测试,结果实时输出到窗口
        """
        one_ip = self.one_iptest.get()  # 获取IP
        count_testnum = self.count_IPtest.get()  # 获取测试次数
        self.stop_IPtest.set('1')
        if(platform.system() == 'Windows'):       # Windows系统
            if count_testnum == '∞':
                add_num = "ping -t -w 600 "
            else:
                add_num = "ping -n {0} -w 600 ".format(count_testnum)
            cmd = add_num+"{0}".format(one_ip)
            p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
                                 stderr=subprocess.STDOUT, shell=True)
            while p.poll() is None:
                control = self.stop_IPtest.get()
                if control == '0':
                    cmd_close = "taskkill /t /f /pid {0}".format(p.pid)
                    subprocess.Popen(cmd_close, stdout=subprocess.PIPE,
                                     stderr=subprocess.STDOUT, shell=True)
                    break
                else:
                    line = p.stdout.readline().strip().decode('gbk')
                    if line:
                        Time_Print = str(datetime.datetime.now())
                        Test_Print = Time_Print+':'+line
                        self.Scanning_one.insert('end', Test_Print)
                        self.Scanning_one.update()
            for i in range(5):
                line = p.stdout.readline().strip().decode('gbk')
                Time_Print = str(datetime.datetime.now())
                if line:
                    Test_Print = Time_Print+':'+line
                else:
                    Test_Print = line
                self.Scanning_one.insert('end', Test_Print)
                self.Scanning_one.update()
        elif(platform.system() == 'Linux'):  # Linux系统
            if count_testnum == '∞':
                add_num = "ping -w 10 "
            else:
                add_num = "ping -c {0} -w {0} ".format(count_testnum)
            cmd = add_num+"{0}".format(one_ip)
            p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
                                 stderr=subprocess.STDOUT, shell=True)
            while p.poll() is None:
                control = self.stop_IPtest.get()
                if control == '0':
                    cmd_close = "pkill -9 {0}".format(p.pid)
                    subprocess.Popen(cmd_close, stdout=subprocess.PIPE,
                                     stderr=subprocess.STDOUT, shell=True)
                    break
                else:
                    line = p.stdout.readline().strip().decode('utf-8')
                    if line:
                        Time_Print = str(datetime.datetime.now())
                        Test_Print = Time_Print+':'+line
                        self.Scanning_one.insert('end', Test_Print)
                        self.Scanning_one.update()
            for i in range(5):
                line = p.stdout.readline().strip().decode('utf-8')
                Time_Print = str(datetime.datetime.now())
                if line:
                    Test_Print = Time_Print+':'+line
                else:
                    Test_Print = line
                self.Scanning_one.insert('end', Test_Print)
                self.Scanning_one.update()
        else:
            messagebox.showinfo('不支持该操作系统!')

    def cleane_view(self):
        self.Scanning_one.delete('0', 'end')

    def Stop_Popen(self):
        self.stop_IPtest.set('0')

    def About_view(self):
        messagebox.showinfo('网络测试', """    版本: 0.2
    日期: 2019-02-05 11:30
    Python: 3.7.0
    源码发布于: https://github.com/ErickQian/NetworkScanning
    """)
示例#4
0
class ALL_IPtest(ttk.Frame):
    """
    任意IP地址扫描
    扫描结显示到窗口
    也可以选择导出到文本文件
    """
    def __init__(self, parent, mainframe):
        ttk.Frame.__init__(self, parent)
        self.mainframe = mainframe
        # 获取图片
        self.ALLIP_img = ImageTk.PhotoImage(ALL_IPimg_image)
        self.infile_img = ImageTk.PhotoImage(infile_image)
        self.outFile_img = ImageTk.PhotoImage(outFile_image)
        self.go_img = ImageTk.PhotoImage(go_image)
        self.IPtest = ttk.Label(self,
                                text='自定义扫描',
                                image=self.ALLIP_img,
                                compound='left',
                                font=TITLE_FONT,
                                foreground='#1296db')
        self.Get_IPtxt = ttk.Button(self,
                                    text="导入IP文件",
                                    image=self.infile_img,
                                    compound='left',
                                    command=lambda: self.start_ping()())
        self.Go_Scanning = ttk.Button(self,
                                      text="开始扫描",
                                      image=self.go_img,
                                      compound='left')
        self.Out_ScanningTxt = ttk.Button(self,
                                          text="导出结果",
                                          image=self.outFile_img,
                                          compound='left',
                                          command=lambda: self.save_view())
        self.Clean_ScanningTxt = ttk.Button(self,
                                            text="清空",
                                            command=lambda: self.cleane_view())
        self.TestView = ttk.Label(self,
                                  text='扫描结果:',
                                  font=TITLE_FONT,
                                  foreground='#1296db')

        self.ping_test = []
        # 结果显示
        VERTICAL = "vertical"
        self.Scanning_L = Listbox(self, height=20, width=100)
        self.ScanViews = ttk.Scrollbar(self,
                                       orient=VERTICAL,
                                       command=self.Scanning_L.yview)
        self.Scanning_L['yscrollcommand'] = self.ScanViews.set
        ttk.Sizegrip().grid(column=2, row=4, sticky="se")

        self.ScanViews.grid(column=21, row=3, sticky="ns")
        self.Scanning_L.grid(column=1,
                             row=3,
                             sticky="nwes",
                             columnspan=20,
                             padx=5,
                             pady=5)
        self.IPtest.grid(column=0, row=0, sticky="nwes", padx=5, pady=5)
        self.Get_IPtxt.grid(column=1,
                            row=1,
                            sticky="nwes",
                            columnspan=1,
                            rowspan=1,
                            padx=5,
                            pady=5)
        self.Go_Scanning.grid(column=2,
                              row=1,
                              sticky="nwes",
                              columnspan=1,
                              rowspan=1,
                              padx=5,
                              pady=5)
        self.Out_ScanningTxt.grid(column=20,
                                  row=20,
                                  sticky="nwes",
                                  columnspan=1,
                                  rowspan=1,
                                  padx=5,
                                  pady=5)
        self.Clean_ScanningTxt.grid(column=1,
                                    row=20,
                                    sticky="nwes",
                                    columnspan=1,
                                    rowspan=1,
                                    padx=5,
                                    pady=5)
        self.TestView.grid(column=1, row=2, sticky="nwes", padx=5, pady=5)

    # 获取IP
    def check_file(self):
        """
         askopenfilename获取IP地址文件
        """
        self.open_filename = askopenfilename(title='打开文件',
                                             filetypes=[('All Files', '*')])
        with open(self.open_filename, 'r') as f:
            self.startip = f.readlines()
        return (self.startip)

    # 处理IP

    def start_ping(self):
        """
        启动多线程
        检查IP地址合法性
        """
        get_ALLip = self.check_file()
        pthread_list = []

        self.Scanning_L.insert(
            'end',
            '时间                                                            IP地址                              测试次数                    通信状态'
        )
        for line in get_ALLip:
            if len(line.strip()):
                ip = line.strip('\n')
                # 开始测试
                pthread_list.append(
                    threading.Thread(target=self.get_ping_result, args=(ip, )))
        for item in pthread_list:
            item.setDaemon(True)
            item.start()
        self.ping_test = [['时间', 'IP地址', 'Ping次数', '通信情况']]

    def get_ping_result(self, ip):
        """
        检查对应的IP是否被占用
        """
        cmd_str = "ping {0} -n 4 -w 600".format(ip)
        DETACHED_PROCESS = 0x00000008  # 不创建cmd窗口
        time_now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        try:
            subprocess.run(cmd_str, creationflags=DETACHED_PROCESS,
                           check=True)  # 仅用于windows系统
        except subprocess.CalledProcessError as err:
            self.Scanning_L.insert(
                'end',
                '%s                       %s                      4                           通信失败'
                % (str(time_now), ip))
            self.ping_test.append([time_now, ip, 4, '通信失败'])
        else:
            self.ping_test.append([time_now, ip, 4, '通信正常'])
            self.Scanning_L.insert(
                'end',
                '%s                       %s                     4                            通信正常'
                % (str(time_now), ip))
        self.Scanning_L.update()

    def cleane_view(self):
        self.Scanning_L.delete('0', 'end')

    def save_view(self):
        PingTest = xlwt.Workbook()  # 新建一个excel
        sheet = PingTest.add_sheet('Ping测试数据结果')  # 添加一个sheet页
        row = 0  # 控制行
        for stu in self.ping_test:
            col = 0  # 控制列
            for s in stu:  # 再循环里面list的值,每一列
                sheet.write(row, col, s)
                col += 1
            row += 1
        PingTest.save('Ping测试数据结果.xls')  # 保存到当前目录下
        messagebox.showinfo('提示', '数据已导出到程序可执行文件目录下的(Ping测试数据结果.xls)文件中!')
示例#5
0
class ConfigMgr(Dialog):
    def __init__(self, x, y, board):
        self.root = Toplevel()
        self.root.title("Config Manager")

        self.board = board

        f1 = Frame(self.root)
        f2 = Frame(self.root)
        f3 = Frame(f2)
        f1.pack(side=LEFT)
        f2.pack(side=LEFT)
        f3.pack(side=TOP)

        self.listbox = Listbox(f1)
        self.files = []
        self.loadFileList()
        self.listbox.pack()

        l1 = Label(f3, text="new File name:")
        l1.pack(side=LEFT)

        self.e = Entry(f3)
        self.e.delete(0, END)
        self.e.insert(0, "FILENAME")
        self.e.pack(side=LEFT)

        buttons = []
        buttons.append(
            Button(f2, text="Save to selected", command=self.saveConf))
        buttons.append(
            Button(f2, text="Save to new File", command=self.newConf))
        buttons.append(
            Button(f2, text="Load selected File", command=self.loadConf))
        buttons.append(
            Button(f2, text="Delete selected File", command=self.delConf))
        buttons.append(Button(f2, text="Continue", command=self.root.destroy))
        for b in buttons:
            b.pack(side=TOP)

        self.align(x, y)
        self.root.mainloop()

    def loadFileList(self):
        if (not os.path.exists("./CONF")):
            os.mkdir("./CONF")
        self.files = os.listdir("./CONF/")
        self.listbox.delete(0, END)
        for item in self.files:
            self.listbox.insert(END, item)
        self.listbox.selection_set(0)
        self.listbox.update()

    def saveConf(self):
        f = open(self.listbox.selection_get(), "wb")
        data = BoardConfig(copy(self.board))
        data_b = pickle.dumps(data)
        f.write(data_b)
        f.close()
        self.loadConf()

    def newConf(self):
        f = open("./CONF/" + self.e.get(), "wb")
        data = BoardConfig(copy(self.board))
        data_b = pickle.dumps(data)
        f.write(data_b)
        f.close()
        self.loadFileList()
        print(self.files)
        f = open("./CONF/" + self.e.get(), "rb")
        data_b = f.read()
        data = pickle.loads(data_b)
        data.load(self.board)
        f.close()
        self.redraw(0)

    def loadConf(self):
        f = open("./CONF/" + self.listbox.selection_get(), "rb")
        data_b = f.read()
        data = pickle.loads(data_b)
        data.load(self.board)
        f.close()
        self.redraw(0)

    def delConf(self):
        MsgBox = messagebox.askquestion(
            'WARNING',
            'Are you sure you want to delete this file?',
            icon='warning')
        if (MsgBox == "yes"):
            os.remove("./CONF/" + self.listbox.selection_get())
            self.loadFileList()
        self.root.lift()

    def redraw(self, p):
        self.board.setHighlight(p)
        self.board.drawBoard(320, 320)
        self.board.drawPieces()
示例#6
0
class Server(Tk):
    """
	TPC server getting messages and sending it to differents rooms
	"""
    def __init__(self):
        # Initialisation de l'héritage
        Tk.__init__(self)

        # Création des objets du serveur
        self.conn = socket(AF_INET, SOCK_STREAM)
        self.logger = logger.Logger(self, directory=LOG_FOLDER)
        self.logger.log(0, "Initialising the server")

        # Création des salles du serveur
        self.room_names = []
        self.rooms = {}
        self.bans = {}
        self.clients = []

        # Création des files d'attente du serveur
        self.send_queue = Queue()
        self.recv_queue = Queue()
        self.accept_conn_queue = Queue()

        # Initialisation des attributs d'étât du serveur
        self.running = True
        self.selected_room = None

        # Initialisation des travailleurs chinois jaunes du serveur
        self.workers = [
            Thread(target=self.serve_forever),
            Thread(target=self.accept_conn),
            Thread(target=self.process_sending),
            Thread(target=self.process_messages)
        ]

        # Initialisation de la liste des salles de la GUI
        self.room_list = Listbox(self)

        # Initialisation de la liste des clients de la GUI
        self.client_list = Listbox(self)
        self.ban_list = Listbox(self)

        # Initialisation de la zone de commande de la GUI
        self.input_frame = Frame(self)
        self.input_label = Label(self.input_frame, text=">>")
        self.input_command = Entry(self.input_frame, width=150)

        # Affchage des différents éléments
        self.client_list.grid(row=0, column=0, rowspan=3, sticky="nsew")
        self.ban_list.grid(row=0, column=1, rowspan=3, sticky="nsew")
        self.input_label.grid(row=0, column=0, sticky="nsew")
        self.input_command.grid(row=0, column=1, sticky="nsew")
        self.input_frame.grid(row=3, column=0, columnspan=3, sticky="nsew")
        self.logger.grid(row=0, column=2, sticky="nsew")
        self.room_list.grid(row=1, rowspan=2, column=2, sticky="nsew")

        # Initialisation des salles
        for room in listdir(BAN_FOLDER):
            self.add_room(room[:-5])

    def add_room(self, room_name):
        self.rooms[room_name] = Room(self)
        self.room_names.append(room_name)
        self.load_banlist(room_name)
        self.logger.log(0, "Adding room {} to server".format(room_name))

    def close_room(self, room):
        for client_name in self.rooms[room].clients:
            self.kick(room, client_name, message="Closing the room")
        self.save_banlist(room)
        self.logger.log(0, "Closing room {}".format(room))

    def accept_conn(self):
        while self.running:
            if not self.accept_conn_queue.empty():
                try:
                    conn, conn_infos = self.accept_conn_queue.get(timeout=0.05)
                except Empty:
                    conn, conn_infos = None, None
                if conn and conn_infos:
                    msg = conn.recv(9999).decode()
                    if ";" in msg:
                        if msg[:5] == "ASKCO":
                            room, name = msg.split(";")[1:]
                            if room in self.room_names:
                                if not name in self.bans[room]:
                                    self.rooms[room].add_client(
                                        name, conn, conn_infos)
                                    self.clients.append(conn)
                                    self.logger.log(
                                        1,
                                        "Say Hello to {} joining the server with {}"
                                        .format(name, conn_infos))
                                else:
                                    conn.send(
                                        "BANED;Your are baned from this server"
                                        .encode())
                                    conn.close()
                                    self.logger.log(
                                        2,
                                        "Client {} tryied to come but probably forget that he was baned"
                                        .format(name))
                            else:
                                self.add_room(room)
                                self.rooms[room].add_client(
                                    name, conn, conn_infos)
                                self.clients.append(conn)
                                self.logger.log(
                                    1,
                                    "Say Hello to {} joining the server with {}"
                                    .format(name, conn_infos))
                        else:
                            conn.send("KICKD;Bad indetifying".encode())
                            conn.close()
                            self.logger.log(
                                2,
                                "Something tryed to access server without identifying itself"
                            )
                    else:
                        conn.send("KICKD;Bad indetifying".encode())
                        conn.close()
                        self.logger.log(
                            2,
                            "Something tryed to access server without identifying itself"
                        )
        self.logger.log(1, "Server stop accept connection")

    def connected(self, client_name):
        for room in self.room_names:
            if client_name in self.rooms[room].clients:
                return True, room
        return False, None

    def kick(self, room, client_name, message=""):
        if self.connected(client_name)[0]:
            self.rooms[room].send("KICKD;{}".format(message),
                                  client_names=[client_name])
        self.rooms[room].remove_client(client_name)
        self.logger.log(
            1, "Kicking [{}] from room [{}]".format(client_name, room))

    def ban(self, room, client_name, message=""):
        self.kick(room, client_name, message)
        if not client_name in self.bans[room]:
            self.bans[room].append(client_name)
        self.logger.log(2, "Banning {} from room {}".format(client_name, room))

    def pardon(self, room, client_name):
        if client_name in self.bans[room]:
            self.bans[room].remove(client_name)
        self.logger.log(
            2, "Server know how to say pardon to {} of room {}".format(
                client_name, room))

    def send(self, msg, room, client_names=[]):
        self.send_queue.put((msg, room, client_names))

    def load_banlist(self, room):
        if not exists(BAN_FOLDER):
            mkdir(BAN_FOLDER)
        self.bans[room] = []
        if exists(join(BAN_FOLDER, "{}.data".format(room))):
            with open(join(BAN_FOLDER, "{}.data".format(room)), "r") as file:
                for line in file:
                    self.bans[room].append(line[:-1])
                file.close()
        self.logger.log(0, "Loading banlist of the room {}".format(room))

    def save_banlist(self, room):
        if not exists(BAN_FOLDER):
            mkdir(BAN_FOLDER)
        with open(join(BAN_FOLDER, "{}.data".format(room)), "w") as file:
            for ban in self.bans[room]:
                file.write("{}\n".format(ban))
            file.close()
        self.logger.log(0, "Save banlist of the room {}".format(room))

    def process_sending(self):
        while self.running:
            if not self.send_queue.empty():
                try:
                    msg, room, client_names = self.send_queue.get(timeout=0.05)
                except Empty:
                    msg, room, client_names = None, None, None
                if msg and room:
                    self.rooms[room].send(msg, client_names)
                    self.logger.log(
                        1, "Sending {} to room {} to clients {}".format(
                            msg, room, client_names))
        self.logger.log(1, "Server stop sending messages")

    def serve_forever(self):
        self.conn.bind(SERVER_HOST)
        self.logger.log(1, "Server is running on {}".format(SERVER_HOST))
        self.conn.listen(5)
        while self.running:
            try:
                askcos, _, _ = select([self.conn], [], [], 0.05)
                for askco in askcos:
                    conn, conn_infos = askco.accept()
                    self.accept_conn_queue.put((conn, conn_infos))
            except error:
                pass

            to_read = []
            try:
                to_read, _, _ = select(self.clients, [], [], 0.05)
            except error:
                pass
            except ValueError:
                pass
            else:
                try:
                    for conn in to_read:
                        msg = conn.recv(9999999).decode()
                        self.logger.log(
                            0, "Server recieved message '{}'".format(msg))
                        self.recv_queue.put(msg)
                except OSError:
                    conn.close()
        self.logger.log(1, "Server is now offline")

    def start(self):
        self.logger.log(2, "Starting the server")
        for worker in self.workers:
            worker.start()

    def shutdown(self):
        self.running = False
        self.logger.log(2, "The server has been shutdowned")

    def stop(self):
        self.logger.log(2, "stopping the server")
        for worker in self.workers:
            worker.join()
        print("Chinois morts")
        for conn in self.clients:
            conn.close()
        print("Tout est fermé")
        self.logger.save()

        del self

    def exec_command(self, event=None):
        command = self.input_command.get()
        self.input_command.delete(0, END)
        self.logger.log(1, "Recieving command {} from GUI".format(command))
        infos = command.split(" ")
        if infos[0] == "kick":
            self.kick(infos[1],
                      infos[2],
                      message="you have been kicked by the server GUI")
        if infos[0] == "ban":
            self.ban(infos[1],
                     infos[2],
                     message="you have been kicked by the server GUI")

    def process_messages(self):
        while self.running:
            if not self.recv_queue.empty():
                try:
                    msg = self.recv_queue.get(timeout=0.05)
                except Empty:
                    msg = None
                if msg:
                    cmd = msg.split(";")
                    if cmd[0] == "MESSA":
                        self.logger.log(
                            1,
                            "recieved [{}] from user [{}] of room [{}]".format(
                                cmd[3], cmd[1], cmd[2]))
                    elif cmd[0] == "CLOSE":
                        self.kick(cmd[1], cmd[2], "closing connection")
                    else:
                        pass
                else:
                    pass

    def set_room_selection(self, event=None):
        room = self.room_list.curselection()
        if room and room != self.selected_room:
            self.selected_room = room[0]
        print(self.selected_room)

    def update_display(self):
        self.room_list.delete(0, END)
        self.client_list.delete(0, END)
        self.ban_list.delete(0, END)
        for i, name in enumerate(self.room_names):
            self.room_list.insert(i, name)
        if self.selected_room:
            self.room_list.selection_set(self.selected_room)
        self.room_list.update()
        if self.selected_room:
            for i, name in enumerate([
                    name for name in self.rooms[self.room_names[
                        self.selected_room]].clients.keys()
            ]):
                self.client_list.insert(i, name)
            self.client_list.update()
            for i, name in enumerate(
                    self.bans[self.room_names[self.selected_room]]):
                self.ban_list.insert(i, name)
            self.ban_list.update()
        self.logger.update_display()
        self.input_command.update()

    def mainloop(self):
        for room in self.rooms:
            self.load_banlist(room)
        self.start()

        self.title("Ward-Community | Server")
        self.resizable(False, False)
        self.protocol("WM_DELETE_WINDOW", self.shutdown)
        self.input_command.bind("<Return>", self.exec_command)
        self.room_list.bind("<Button-1>", self.set_room_selection)

        while self.running:
            self.update_idletasks()
            self.update_display()

        for room in self.rooms:
            self.save_banlist(room)
        self.stop()
        exit()