def check_(self): if self.isLink==False: self.send(config.start_byte+ # стартовый байт init_window.bin_char(config.admin_port_num)+ # преобразуем адрес получателя из десятичного в двоичный вид для передачи в кадре config.get_code('err')+ # получаем код кадра err из конфигурационного файла init_window.bin_char(int(self.port_num1))+ # формируем адрес отправителя config.stop_byte) # стоповый байт
def check_data_false(self): if self.msg[16:24]==config.get_code('data'): if len(config.write_data_query)>0: # если очередь сообщений на отправку не пуста self.send(config.write_data_query[0]) # отсылаем первое сообщение из очереди config.write_data_query.pop(0) else: self.send(self.msg)
def check_set_false(self): if self.msg[16:24]==config.get_code('set'): msg1=self.msg[24:-8] for i in range (int((len(msg1)/88))): try: self.ports.append(user_menu_window.reshifer(msg1[i:i+8])) self.users.append(user_menu_window.reshifer(msg1[i+8:i+88])) except: pass self.send(str(self.msg))
def check_ack_true(self): if self.msg[16:24]==config.get_code('ack'): # если тип сообщения равен типу ack print("-----------------------------------------------------------------------------------") # print('подтверждение') # отладка #self.emit(QtCore.SIGNAL("self.msgIn(QString)"), self.msg[8:16]+"ackk") # посылаем сигнал о приеме сообщения, self.onRcvd(self.msg[8:16]+"ackk") # указывая в параметрах адрес отправителя и тип кадра(ack) if len(config.write_data_query)>0: # если очередь сообщений на отправку не пуста self.send(config.write_data_query[0]) # отсылаем первое сообщение из очереди config.write_data_query.pop(0) # удаляем первое сообщение из очереди
def _check(self): #кнопка проверки целостность соединения в кольце config.isLink=False try: config.admin_port2.write( config.start_byte+ # стартовый байт init_window.bin_char(config.admin_port_num)+ # преобразуем адрес получателя из десятичного в двоичный вид для передачи в кадре config.get_code('link')+ # получаем код кадра link из конфигурационного файла config.stop_byte) # стоповый байт #gtet_a_tet.bin_char(data_.admin_port_num) except: # если еще не зарегистрирован ни один пользователь self.listWidget.addItem('No ports connected yet')
def hello(self): # timer that ticks every 10 seconds to check link config.isLink=False # сбрасываем флаг прихода кадра link обратно try: config.admin_port2.write(# функция формирует кадр link config.start_byte+ # стартовый байт init_window.bin_char(config.admin_port_num)+ # преобразуем адрес получателя из десятичного в двоичный вид для передачи в кадре config.get_code('link')+ #получаем код кадра link из конфигурационного файла config.stop_byte) # стоповый байт except: # предохраням программу от исключений(попытка записи в закрытый COM порт) pass t=threading.Timer(10.0, self.hello) # инициализируем таймер, который вызывает функцию hello через 10 секунд t.start() self.check_() # см.ниже
def check_off_true(self): if self.msg[16:24]==config.get_code('off') and self.reciever_True==1: self.combo.clear() who_unlink=str(int(self.supposed_reciever,2)-int('00000001',2)) if who_unlink in config.ports_all['real_enter']: config.ports_all['real_enter'] = [el for el in config.ports_all['real_enter'] if el != who_unlink] msg_status='offline' else: config.ports_all['real_enter'].append(who_unlink) msg_status='online' QtGui.QMessageBox.critical( None,"status", "Yout status is now "+msg_status, buttons=QtGui.QMessageBox.Ok, defaultButton=QtGui.QMessageBox.Ok )
def onSend(self): self.isAck = False self.msg = '' global t self.txtHist.append(' ' + self.txtOut.text()) try: user_menu_window.msgs_all['' + str(int(self.portnum2))].append( ' ' + self.txtOut.text()) except: user_menu_window.msgs_all['' + str(int(self.portnum2))] = [ ' ' + self.txtOut.text() ] #if self.portnum1=='28': #or self.portnum1=='29': # self.portnum1='22' if self.msg == '': bit_text = self.txtOut.text( ) # получаем сообщение из текстового поля cicle_coded_bit_text = code_decode1.Code(to_code(bit_text)) print(cicle_coded_bit_text) print("sender: " + self.portnum1 + "-->" + self.portnum2) self.msg = str( config.start_byte + # стартовый байт init_window.bin_char(int(self.portnum2)) + # преобразуем адрес получателя из десятичного в двоичный вид для передачи в кадре config.get_code('info') + # получаем код кадра info из конфигурационного файла init_window.bin_char(int(self.portnum1)) + # преобразуем адрес отправителя из десятичного в двоичный вид для передачи в кадре str(init_window.bin_char(int(len(cicle_coded_bit_text) / 7))) + # длина сообщения из текстового поля str(to_code(bit_text)) + # сообщение из текстового поля кодируем строкой байтов config.stop_byte) # стоповый байт self.threadIn.send( self.msg ) # отправляем полученное сообщение в выходной порт self.msgQuerry.append( self.msg ) # добавляем сообщение в очередь self.txtOut.clear() # очищаем текстовое поле t = threading.Timer(3.0, self.hello) t.start()
def _identify_users(self): #функция оповещения пользователей о наличии и именах других пользователей msg="" j=0 # счетчик цикла for i in config.ports_all['real_enter']: # print(len(config.ports_all['real_enter'])) # добавляем в поле данных кадра номер входного порта пользователя msg=msg+i try: user=dialog_window.to_code(config.ports_all['real_user_name'][j]) #добавляем в информационное поле кадра имя пользователя except: pass j=j+1 for i in range(10-len(user)): #длина имени в кадре 10 символов,поэтому дополняем имя пробелами до 10-ти символов user=user+' ' msg=msg+user try: #формируем кадр set и пытаемся его отправить на выходной порт config.admin_port2.write(config.start_byte+ # стартовый байт init_window.bin_char(config.admin_port_num)+ # преобразуем адрес получателя из десятичного в двоичный вид для передачи в кадре config.get_code('set')+ #получаем код кадра set из конфигурационного файла msg+ # сообщение , содержащее номера портов и имена пользователей config.stop_byte) # стоповый байт except: pass
def onRcvd(self, msg): type=msg[-4:] msg=msg[:-4] if type=="data": sender=msg[24:32] print("who sended : "+str(int(str(sender),2))) decoded_into_bits=code_decode1.Decode(msg[40:-10]) print("decoded_into_bits : ",decoded_into_bits) if decoded_into_bits!=False or True: reshifer(str(decoded_into_bits)) try: msgs_all[''+str(int(sender))].append(unicode(reshifer(msg), encoding="UTF-8")) except: print(reshifer(msg)) print (str(len(msg[40:-10]))+" vs "+msg[32:40]) msgs_all[''+str(int(sender))]=[unicode(reshifer(msg), encoding="UTF-8")] for my in config.alpha: print("my.portnum1 "+ my.portnum1+ "sender "+sender) if (my.portnum2)==str(int(str(sender),2)): print("msg finaly delivered :)") if len(msg)>0: my.txtHist.append(unicode(reshifer(msg), encoding="UTF-8")) msg_ack=config.start_byte+sender+config.get_code('ack')+msg[8:16]+config.stop_byte self.send (msg_ack) # посылаем сигнал о приеме сообщения, try: for my in config.alpha: print("my.portnum2"+my.portnum2) except: print("someth_wrong vvvvvvvvv vvvvvvvvv vvvvvv") if type=="ackk": msg1=int(str(msg),2) print("ack recieved ",msg1) for my in config.alpha: # print(str(int(my.portnum2)+1)) if int(my.portnum2)==msg1: my.ackRcv() print("**************************************")
def check_uplink_false(self): if self.msg[16:24]==config.get_code('uplink'): self.send(str(self.msg))
def check_ack_false(self): if self.msg[16:24]==config.get_code('ack'): self.send(str(self.msg)) print("-----------------------------------------------------------------------------------")
def check_link_false(self): if self.msg[16:24]==config.get_code('link'): self.isLink=True self.send(str(self.msg))
def check_link_true(self): if self.msg[16:24]==config.get_code('link'): # если тип сообщения равен типу Link self.isLink=True # выставляем флаг установления соединения config.main_terminal._succeed() # успешное возвращение кадра link
def check_err_true(self): if self.msg[16:24]==config.get_code('err'): # если тип сообщения равен типу err config.main_terminal.listWidget.addItem("User "+str(int(self.msg[24:32],2))+" is unlink") # в окно администратора выводим сообщение,
def _disconnect(self): # функция формирует кадр uplink config.admin_port2.write(config.start_byte+ # стартовый байт init_window.bin_char(config.admin_port_num)+ # преобразуем адрес получателя из десятичного в двоичный вид для передачи в кадре config.get_code('uplink')+ # получаем код кадра uplink из конфигурационного файла config.stop_byte) # стоповый байт
def _unlink(self): # функция формирования кадра off msg = str(config.start_byte + init_window.bin_char(int(self.portnum1) + 1) + config.get_code('off') + config.stop_byte) self.threadIn.send(msg)
def check_off_false(self): if self.msg[16:24]==config.get_code('off'): self.combo.clear() self.combo.addItems(config.ports_all['real_enter']) self.send(str(self.msg))