def send_msg(self): msg_txt = self.message_text.text() encrypt_msg= encrypt(msg_txt,self.my_user.chat_key) # print("my text is " + msg_txt) self.chat_text.scrollToBottom() if msg_txt != '': ''' # send date at the start of conversation if self.first_msg: date = datetime.date.today().strftime("%B %d, %Y") item = QListWidgetItem('%s' % (date)) self.chat_text.addItem(item) item.setBackground(QtGui.QColor('#fad000')) date= encrypt(date,self.my_user.chat_key) t = Thread(target=self.my_user.send_message, args=(self.friend_id, date)) t.daemon = True # self.my_user.send_message(self.friend_id, msg_txt) t.start() self.first_msg = False time.sleep(0.8) ''' item = QListWidgetItem('%s' % (self.my_user.name + " > " + msg_txt)) self.chat_text.addItem(item) item.setBackground(QtGui.QColor('#ff944d')) self.message_text.setText("") t = Thread(target=self.my_user.send_message, args=(self.friend_id , encrypt_msg)) t.daemon = True #self.my_user.send_message(self.friend_id, msg_txt) t.start() self.chat_text.scrollToBottom()
def execute_command_from_ssh_requests_command_queue(self): #print("got in execute command") while True: # queue not empty - get new message if len(self.ssh_requests_command_queue) > 0: #print("execute_command got a command") data = self.ssh_requests_command_queue.pop() decrypt_msg = decrypt(data['chat']['text'], self.chat_key) while decrypt_msg[-1:] == "0": decrypt_msg = decrypt_msg[:-1] try: result = self.execute_command(decrypt_msg[16:]) except: result = "no respond" print("result: " + result) if result != '': new_msg = {"sender_id": data['ID'], "ssh_cmd": result} encrypt_msg = encrypt(result, self.chat_key) if self.show_ssh_res: self.ssh_results_command_queue.append(new_msg) self.ssh_results_command_queue_waiter.acquire() self.ssh_results_command_queue_waiter.notify() self.ssh_results_command_queue_waiter.release() self.send_message(data['ID'], encrypt_msg) else: #print("execute_command go to sleep") self.command_request.acquire() self.command_request.wait() self.command_request.release()
def ask_for_control(self, friend_id): encrypted_msg = encrypt('can i control yours computer?@#$<<', self.chat_key) params = { 'ID': self.id, "otherID": friend_id, 'chat': { "senderName": self.name, "text": encrypted_msg } } r = requests.post(url=URL.postURL, json=params)
def send_ssh_message(self, friend_id, msg): msg = 'ssh control@#$<<' + msg encrypt_msg = encrypt(msg, self.chat_key) params = { 'ID': self.id, "otherID": friend_id, 'chat': { "senderName": self.name, "text": encrypt_msg } } r = requests.post(url=URL.postURL, json=params) return_msg = r.text
def ask_for_control(self): self.my_user.ask_for_control(self.friend_id) encrypted_msg = encrypt("can i control yours computer? (press 'yes' or 'no' button)", self.my_user.chat_key) t = Thread(target=self.my_user.send_message, args=(self.friend_id, encrypted_msg)) t.daemon = True t.start()
def listen_to_server(self): while True: # queue not empty - got new message if len(User.q) != 0: # pop the new msg data = User.q.pop() # check if the message designated to me if data['otherID'] == self.id: decrypt_msg = decrypt(data['chat']['text'], self.chat_key) while decrypt_msg[-1:] == "0": decrypt_msg = decrypt_msg[:-1] # check the kind of the message - ordinary or control if str(decrypt_msg ) == 'can i control yours computer?@#$<<': self.approve_control_requests.add(data['ID']) self.approve_control_requests_waiter.acquire() self.approve_control_requests_waiter.notify() self.approve_control_requests_waiter.release() elif str(decrypt_msg).startswith( 'ssh control@#$<<' ) and data['ID'] in self.approved_control: self.ssh_requests_command_queue.append(data) self.command_request.acquire() self.command_request.notify() self.command_request.release() elif str(decrypt_msg).startswith('ssh control@#$<<'): encrypted_msg = encrypt( "send the bush command " + decrypt_msg[16:] + " but it didnt execute", self.chat_key) new_msg = { "sender_id": data['ID'], "sender_name": data['chat']['senderName'], "text": encrypted_msg } self.my_queue.append(new_msg) self.my_queue_waiter.acquire() self.my_queue_waiter.notify() self.my_queue_waiter.release() else: new_msg = { "sender_id": data['ID'], "sender_name": data['chat']['senderName'], "text": data['chat']['text'] } self.my_queue.append(new_msg) # for alert to main windows that the user get a new msg self.sender_queue.append(new_msg["sender_id"]) self.my_queue_waiter.acquire() self.my_queue_waiter.notifyAll() self.my_queue_waiter.release() # my friend announce to me he is disconnect/connect elif data['otherID'] == "broadcast" and data[ 'ID'] in self.friends_list: if str(data['chat']['text']) == 'i am connected!@#$': new_msg = {"sender_id": data['ID']} self.connect_friend_queue.append(new_msg) self.connect_status_waiter.acquire() self.connect_status_waiter.notify() self.connect_status_waiter.release() elif str(data['chat']['text']) == 'i am disconnected!@#$': new_msg = {"sender_id": data['ID']} self.disconnect_friend_queue.append(new_msg) #time.sleep(.1) self.connect_status_waiter.acquire() self.connect_status_waiter.notify() self.connect_status_waiter.release() # queue empty thread go to sleep, avoid busy waiting else: User.cv.acquire() User.cv.wait() User.cv.release()