def send_request(self): if self.status: dp = Datapack(head={'from': __name__}) dp.method = 'get' dp.app = 'ffmpeg' dp.head['to'] = self.server send_queue.put(dp)
def check_id(self): ''' check id package must like ------------------------------- post handshake msw/0.1 id: [yourID] listen_port: [3900] length: 0 ------------------------------- error code list: 1: not get "id" in head 2: receive data failed 3: appname is not handshake 4: id is yourself ''' data = None if self.positive: self.send_id() try: data = self.conn.recv(BUFFSIZE) except ConnectionResetError: print('One connection failed before ID check') if not data: return 2, '' self.buff += data dp = Datapack() dp.encode_data = self.buff # maybe here needs to use copy.copy(self.buff) self.buff = dp.decode(only_head=True) if not dp.head.get('id'): return 1, dp.head.get('flag') if not dp.app == 'handshake': return 3, dp.head.get('flag') self.id = dp.head['id'] self.listen_port = int(dp.head.get('listen_port')) if self.id == ID: #print('you connect to your self') return 4, dp.head.get('flag') if ONLYPROXY and not self.id == MYPROXY: # refuce not proxy connection return 5, dp.head.get('flag') if dp.head.get('onlyuseproxy'): if not dp.head['onlyuseproxy'] == ID: return 6, dp.head.get('flag') if not self.positive: self.send_id() return 0, dp.head.get('flag')
def _main(): last = '' file_flag = False while True: file_flag = False raw_data = input() if raw_data == 'restart': msw_queue.put(0) break if raw_data == 'exit': msw_queue.put(1) break if raw_data == 'update': raw_data = 'update:compress;update_to:*' if raw_data == '1': raw_data = 'ffmpeg:autostart' if raw_data == '2': raw_data = 'ffmpeg:enable;to:*,server:miku' if raw_data == 'r': raw_data = last last = raw_data if raw_data[:6] == '(file)': # like "(file)log: filename.exe" raw_data = raw_data[6:] file_flag = True first_index, last_index = find_index(raw_data) app = raw_data[:first_index] body = raw_data[last_index:] ihead = {} if ';' in body and ':' in body: ihead_index = body.index(';') ihead_str = body[ihead_index + 1:] body = body[:ihead_index] ihead_list = ihead_str.split(',') for key_value in ihead_list: key, value = key_value.split(':') ihead[key] = value app = app.replace(' ', '') dp = Datapack(head={'from': __name__}) dp.head.update(ihead) dp.app = app if file_flag: dp.method = 'file' dp.body = b'' dp.head['filename'] = body else: dp.body = body.encode() send_queue.put(dp) print('Command has been sent', dp)
def send_id(self): dp = Datapack(head={'from': __name__}) dp.app = 'handshake' if ONLYPROXY: dp.head['onlyuseproxy'] = MYPROXY dp.head['listen_port'] = str(jsondata.try_to_read_jsondata('listen_port', 3900)) dp.encode() self.conn.sendall(dp.encode_data)
def start_mht(self): while True: dp = Datapack(head={'from': __name__}) dp.head['to'] = '*' dp.app = 'net' dp.method = 'get' dp.body = b'mht' #print('Send mht request', dp) send_queue.put(dp) time.sleep(10)
def main(): while True: dp = receive_queue.get() if dp.method == 'post': if dp.body == b'compress': # compressing file print('Starting update') compress = Compresser() compress.start_compress() print('Compress finished') # getting to destination to = dp.head.get('update_to') if not to: print('unable to locate update_to') continue # sending file ndp = Datapack(head={'from':__name__}) ndp.method = 'file' ndp.app = 'update' ndp.head['filename'] = 'res/update.tar.xz' ndp.head['to'] = to send_queue.put(ndp) elif dp.method == 'file': print('Starting update local file') with tarfile.open(dp.head['filename'], 'r:xz') as f: f.extractall() #os.remove(dp.head['filename']) # restart msw program msw_queue.put(0)
def receive(self): still_need = 0 while True: try: data = self.conn.recv(BUFFSIZE) except ConnectionResetError: break except Exception as e: print('Connection recv error %s: %s' % (type(e), str(e))) break if not data: break self.buff += data if not still_need: dp = Datapack() dp.encode_data = self.buff try: self.buff = dp.decode(only_head=True) if dp.method == 'file': create_floder(dp.head['filename']) create_floder('tmp/' + dp.head['filename']) self.f = open('tmp/' + dp.head['filename'], 'ab') if dp.method == 'file' and os.path.exists(dp.head['filename']): os.remove(dp.head['filename']) except Exception as e: print('Decode head failed %s: %s' % (type(e), str(e))) print(self.buff) break length = int(dp.head.get('length')) still_need = length if still_need > len(self.buff): # writing tmp data if dp.method == 'file': still_need -= self.f.write(self.buff) else: dp.body += self.buff still_need -= len(self.buff) self.buff = b'' # empty buff because all tmp data has been write else: # download complete setuation if dp.method == 'file': self.f.write(self.buff[:still_need]) self.f.close() self.f = None else: dp.body = self.buff[:still_need] self.buff = self.buff[still_need:] still_need = 0 # bleow code are using to process datapack if dp.method == 'file': os.rename('tmp/' + dp.head['filename'], dp.head['filename']) print('Received file %s from %s' % (dp.head['filename'], self.id), dp) send_queue.put(dp) # below code are using to closed connection if self.f: self.f.close() self.f = None self.conn.close() self.netowrk_controller.del_connection(self)
def mainloop(self): _create_floder('res/ffmpeg_tmp') _create_floder('res/ffmpeg_finished') _create_floder('res/ffmpeg_task') _create_floder('res/ffmpeg_old') _create_floder('res/ffmpeg_complet') while True: dp = receive_queue.get() if dp.method == 'post' and dp.body == b'concat': self.org_filename = dp.head['filename'] self.object_filename = self.org_filename[:-4] + '.mkv' self.concat_func() if dp.method == 'post' and dp.body == b'autostart': filelist = os.listdir('res/ffmpeg_task') self.tasklist = [] for file in filelist: if len(file) > 3: ext = file[-4:] if ext in ['.mp4', '.MP4', '.mkv', '.MKV']: self.tasklist.append('res/ffmpeg_task/' + file) dp = Datapack() dp.app = 'ffmpeg' dp.body = b'start' dp.head['filename'] = self.tasklist.pop(0) self.autostart = dp.head['filename'] send_queue.put(dp) if dp.method == 'post' and dp.body == b'start': # config ffmpeg is server or client if dp.head.get('concat'): if dp.head['concat'] == 'true': self.concat = True elif dp.head['concat'] == 'false': self.concat = False else: print('unknown concat value') continue else: self.concat = True if self.concat: self.org_filename = dp.head['filename'] self.object_filename = 'res/ffmpeg_complet/' + os.path.basename( self.org_filename)[:-4] + '.mkv' if self.concat: ndp = dp.reply() ndp.body = 'Spliting file %s' % dp.head['filename'] ndp.body = ndp.body.encode() send_queue.put(ndp) cmd = 'ffmpeg -i "' + os.path.normpath( dp.head['filename']) + '" -c copy \ -f segment -segment_time 20 -reset_timestamps 1 -y \ "res/ffmpeg_tmp/' + '%d' + '.mkv"' os.system(cmd) self.run_as_server() if self.concat: self.concat_func() print('All process finished') elif dp.method == 'post' and dp.body == b'enable': # clinet mode self.status = 1 self.server = dp.head['server'] self.convert_func() elif dp.method == 'post' and dp.body == b'status': result = 'ffmpeg not working' ndp = dp.reply() ndp.body = result.encode() send_queue.put(ndp) elif dp.method == 'get': # let other client disable ndp = dp.reply() ndp.method = 'post' ndp.body = b'disable' print('let %s disabled' % dp.head['id']) send_queue.put(ndp)