Example #1
0
def run():
    thread = Thread(target=getConnections)
    thread.setDaemon(True)
    thread.start()

    global players
    global socket

    while True:
        inp = input()

        if game_running:
            continue

        try:
            inp = inp.lower()
        except:
            continue

        if inp == "start":
            thread._delete()
            print("Starting Game...")
            return startGame()
            id = 1
            #thread.start()

        if inp == "quit":
            disconnect()
            break
Example #2
0
class MainWindow(QWidget, Ui_Form):
    '''create mainwindow'''
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)

        self.videoPath = ''
        self.outPath = ''
        self.videoLenth = 0
        self.framesEverySeconds = 0
        self.frames_num = 0
        self.h_pixel = 0
        self.v_pixel = 0
        self.step = 0
        self.shrink = 0
        self.begin = 0
        self.end = 0

        self.img_num = 0

        self.thread1 = Thread(target=self.extract_write)

        self.pushButton_selectVideoPath.clicked.connect(self.select_videoPath)
        self.pushButton_selectOutPath.clicked.connect(self.select_outPath)
        self.pushButton_STARTWORK.clicked.connect(self.start_work)
        self.pushButton_cancel.clicked.connect(self.cancel)

    # “开始转换”按钮触发
    def start_work(self):
        self.step = self.spinBox_step.value()
        self.shrink = self.spinBox_shrink.value()
        self.begin = self.spinBox_start.value()
        self.end = self.spinBox_end.value()
        self.img_num = (self.end - self.begin) // (self.step + 1) + 1
        # 只有指定了路径才执行操作
        if self.videoPath and self.outPath:
            self.pushButton_STARTWORK.setEnabled(False)
            self.pushButton_selectOutPath.setEnabled(False)
            self.pushButton_selectVideoPath.setEnabled(False)
            self.spinBox_end.setEnabled(False)
            self.spinBox_start.setEnabled(False)
            self.spinBox_shrink.setEnabled(False)
            self.spinBox_step.setEnabled(False)
            self.frame.setVisible(True)
            time.sleep(1)
            self.thread1.start()
        else:
            QMessageBox.information(self, '!!!', '请先指定两个路径')

    def cancel(self):
        self.thread1._delete()
        self.thread1 = Thread(target=self.extract_write)
        self.progressBar.setValue(0)
        self.pushButton_STARTWORK.setEnabled(True)
        self.pushButton_selectOutPath.setEnabled(True)
        self.pushButton_selectVideoPath.setEnabled(True)
        self.spinBox_end.setEnabled(True)
        self.spinBox_start.setEnabled(True)
        self.spinBox_shrink.setEnabled(True)
        self.spinBox_step.setEnabled(True)
        self.frame.setVisible(False)

    # 选取视频路径, 并显示视频的基本信息
    def select_videoPath(self):
        fileDialog = QFileDialog(self, filter="mp4文件 (*.mp4)")
        fileDialog.setWindowModality(Qt.WindowModal)
        fileDialog.exec_()
        try:
            self.videoPath = fileDialog.selectedFiles()[0]
        except:
            pass
        video = cv2.VideoCapture()
        if not video.open(self.videoPath):
            QMessageBox.information(self, '!!!', '无法读取视频')
            return
        self.frames_num = video.get(7)
        self.h_pixel = video.get(3)
        self.v_pixel = video.get(4)
        self.framesEverySeconds = video.get(5)
        self.videoLenth = self.frames_num / self.framesEverySeconds

        self.spinBox_end.setMaximum(self.frames_num)
        self.spinBox_start.setMaximum(self.frames_num)
        self.spinBox_step.setMaximum(self.frames_num - 1)
        self.label_videoPath.setText(self.videoPath)
        self.label_framesEverySeconds.setText(str(int(
            self.framesEverySeconds)))
        self.label_h_pixel.setText(str(int(self.h_pixel)))
        self.label_v_pixel.setText(str(int(self.v_pixel)))
        self.label_videoLenth.setText(str(int(self.videoLenth)))

    def select_outPath(self):
        self.outPath = QFileDialog().getSaveFileName(self,
                                                     'save file',
                                                     filter='(*.xlsx)')[0]
        self.label_excelPath.setText(self.outPath)

    # 抽取视频中的帧,并存入EXCEL中
    def extract_write(self):
        video = cv2.VideoCapture()
        video.open(self.videoPath)
        step = self.step + 1
        index = 0
        count = self.begin
        writer = pandas.ExcelWriter(self.outPath)
        b_data = pandas.DataFrame()
        g_data = pandas.DataFrame()
        r_data = pandas.DataFrame()
        video_property = pandas.DataFrame([
            '水平像素值:',
            int(self.h_pixel * self.shrink), '竖直像素值:',
            int(self.v_pixel * self.shrink), '向右平移列数:', 5, '向下平移行数:', 0,
            '总帧数:', self.img_num, '每两帧间隔(秒):', 0.1, '进度(%):', 0
        ])
        while True:
            time.sleep(0.005)
            _, frame = video.read()
            if frame is None:
                break
            if (count - self.begin) % step == 0:
                index += 1
                res_min = cv2.resize(frame,
                                     None,
                                     fx=self.shrink,
                                     fy=self.shrink,
                                     interpolation=cv2.INTER_AREA)
                b1, g1, r1 = cv2.split(res_min)
                b_data1 = pandas.DataFrame(b1)
                g_data1 = pandas.DataFrame(g1)
                r_data1 = pandas.DataFrame(r1)
                b_data = pandas.concat([b_data, b_data1], axis=0)
                g_data = pandas.concat([g_data, g_data1], axis=0)
                r_data = pandas.concat([r_data, r_data1], axis=0)
                self.progressBar.setValue((index / self.img_num) * 100 - 1)
            if (count == self.end):
                break
            count += 1
        video.release()
        video_property.to_excel(writer, 'video')
        b_data = b_data // 9 * 9
        g_data = g_data // 9 * 9
        r_data = r_data // 9 * 9  # 此操作是因为EXCEL中总单元格格式数有限制
        b_data.to_excel(writer, 'b')
        g_data.to_excel(writer, 'g')
        r_data.to_excel(writer, 'r')
        writer.save()
        writer.close()
        self.progressBar.setValue(100)
        self.pushButton_cancel.setEnabled(False)
        time.sleep(2)
        self.progressBar.setValue(0)
        self.thread1 = Thread(target=self.extract_write)
        self.pushButton_STARTWORK.setEnabled(True)
        self.pushButton_selectOutPath.setEnabled(True)
        self.pushButton_selectVideoPath.setEnabled(True)
        self.spinBox_end.setEnabled(True)
        self.spinBox_start.setEnabled(True)
        self.spinBox_shrink.setEnabled(True)
        self.spinBox_step.setEnabled(True)
        self.frame.setVisible(False)
Example #3
0
def blh(server: classmethod, info: classmethod, args: list) -> None:
    """
    BlhMainFunction
    :Blh主逻辑
    """
    global stopflag, stopName, debug
    roomid = load(args[2])
    if roomid is None:
        dm_logger_tell(
            server,
            '§cBlhControlThread§r/§e{0}§r §a key not found'.format('info'),
            info.player)
        return
    if check_blh_isrunning(server, info.player, args[2]) is True:
        return
    if debug == 'False':
        check_path(server, 'None')
    elif debug == 'True':
        check_path(server, info.player)
    selfname = args[2]
    stopflag = True
    Pystartcmd = _read_config()['python-cmd']
    if Pystartcmd == '':
        dm_logger(server, datahead.format('Err') + '§e没有python启动命令!')
        dm_logger(server,
                  datahead.format('info') + '§e输入 !!blh setpyver [版本] 来设置')
        dm_logger(server,
                  datahead.format('info') + '§e示例: !!blh setpyver python3')
        return
    p = Popen('{0} demo.py {1} True'.format(Pystartcmd, roomid),
              stdout=PIPE,
              shell=True,
              bufsize=1,
              close_fds=ON_POSIX,
              cwd='plugins/blh')
    dm_logger(
        server,
        '§cBlhControlThread§r/§e{0}§r §a blh is running at pid {1}'.format(
            'info', str(p.pid)))
    q = Queue()
    t = Thread(target=enqueue_output, args=(p.stdout, q))
    t.daemon = True
    t.start()
    dm_logger(server, datahead.format('info') + '已订阅{0}的直播间'.format(selfname))
    while stopflag and p.poll() is None:
        if selfname == stopName:
            roomnames.remove(selfname)
            tmp = p.pid
            p.kill()
            Popen('kill {0}'.format(str(tmp)),
                  stdin=PIPE,
                  stdout=PIPE,
                  stderr=PIPE,
                  shell=True,
                  bufsize=0)
            t._delete()
            stopName = ''
            return
        try:
            roomnames.index(selfname)
        except ValueError:
            break
        try:
            line = q.get_nowait()
        except Empty:
            pass
        else:
            try:
                popu.index(selfname)
            except ValueError:
                dm_logger(server, line, selfname)
            else:
                if bytes('当前人气值|', encoding='utf-8') not in line:
                    dm_logger(server, line, selfname)
Example #4
0
class RCon():
    def __init__(self, address, password):
        self.ip = address[0]
        self.port = address[1]
        self.password = password
        self.connection = None
        self.events = {}
        self.listener = None

    def connect(self):
        try:
            self.connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self.connection.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY,
                                       1)
            self.connection.settimeout(1)
            self.connection.connect((self.ip, self.port))
            self.connection.setblocking(1)

            packet_to_send = encode_packet(
                create_packet(0, False, False, ['login.plainText', password]))
            self.connection.send(packet_to_send)
            data_buffer = bytes()
            while not contains_complete_packet(data_buffer):
                data_buffer += self.connection.recv(2048)

            packet_to_send = encode_packet(
                create_packet(0, False, False,
                              ['admin.eventsEnabled', 'True']))
            self.connection.send(packet_to_send)
            data_buffer = bytes()
            while not contains_complete_packet(data_buffer):
                data_buffer += self.connection.recv(2048)
            packet = decode_packet(data_buffer)
            #print(packet)
            if b"OK" in packet['words']:
                return True
            else:
                raise Exception(packet['words'][0].decode("utf-8"))
        except Exception as ex:
            raise ex

    def Command(self, command: str):
        packet_to_send = encode_packet(
            create_packet(0, False, False, command.split(" ")))
        self.connection.send(packet_to_send)
        data_buffer = bytes()
        while not contains_complete_packet(data_buffer):
            data_buffer += self.connection.recv(2048)
        packet = decode_packet(data_buffer)
        return [
            w.decode("utf-8") for w in packet['words'] if not type(w) == int
        ]

    def __DecodeEvent(self, event):
        event['words'] = [
            w.decode("utf-8") for w in event['words'] if not type(w) == int
        ]
        event = event['words']
        if event[0] in self.events.keys():
            funk = self.events[event[0]]
            event.pop(0)
            funk(event)

    def StartEventListener(self):
        def listen():
            while True:
                data_buffer = bytes()
                while not contains_complete_packet(data_buffer):
                    # if b'punkBuster' in self.connection.recv(2048):
                    #     continue
                    #print(self.connection.recv(2048))
                    data_buffer += self.connection.recv(16384)
                packet = decode_packet(data_buffer)
                Thread(target=self.__DecodeEvent, args=[packet]).start()
                #self.__DecodeEvent(packet['words'])

        self.listener = Thread(name="Listener", target=listen)
        self.listener.start()

    def CloseConnection(self):
        self.listener._delete()
        self.connection.close()