def send(self): message = '' while message != 'exit': message = input() n = chat.Note() n.name = self.username # set the username n.message = message self.conn.SendNote(n)
def send_message(self, event): message = self.entry_message.get() if message is not '': n = chat.Note() n.name = self.username n.message = message print("S[{}] {}".format(n.name, n.message)) self.conn.SendNote(n)
def SendNote(self, request: chat.Note, context): # This method is called when a client sends a message to the server. print("[{}-->{}] {}".format(request.source,request.destination, request.message)) # Add it to the chat history rateLimitCheck = self.validateRateLimit(request) # only if its good then we store in cache(good --> <30 3 messages) if rateLimitCheck.message == "good": for dest in validGroups[request.destination]: key = dest + ":" + request.destination self.add(key, chat.Note(source=request.source,destination=request.destination,message=request.message)) return rateLimitCheck
def _read_message(self): inputText = None while inputText is None: inputText = input("[{}] > ".format(self.username)) # reset so that read does not happen self.firstTime = maxCachelimit n = chat.Note() n.source = self.username n.destination = self.destination # Encrypt the message n.message = self.AES.encrypt(inputText) limitMessage = self.conn.SendNote(n) # Check on the rate limit . If the signal(good) from server not good then notify user if limitMessage.message != "good": print("[{}] {}\n".format(limitMessage.source,limitMessage.message)) inputText = None
def __listen_for_messages(self): me = chat.Note() me.source = self.username me.destination = self.destination me.message = self.AES.encrypt("register") for incomingNote in self.conn.ChatStream(me): if self.firstTime < maxCachelimit: self.firstTime = self.firstTime+1 decrMessage = self.AES.decrypt(incomingNote.message) print("[{}] {}\n".format(incomingNote.source, decrMessage.decode('utf-8'))) self.chat_list.append(decrMessage) elif self.username !=incomingNote.source: decrMessage = self.AES.decrypt(incomingNote.message) print("[{}] {}\n".format(incomingNote.source, decrMessage.decode('utf-8'))) self.chat_list.append(decrMessage)
def ChatStream(self, request_iterator, context): """ This is a response-stream type call. This means the server can keep sending messages Every client opens this connection and waits for server to send new messages :param request_iterator: :param context: :return: """ last_timestamp = '' for item in self.listening.listen(): if item['data'] != 1: data = json.loads(item['data']) if data["timestamp"] <= last_timestamp: continue n = chat.Note() n.name = data['user'] n.message = data['message'] yield n last_timestamp = data["timestamp"]