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
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)
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)
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()