示例#1
0
 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)
示例#2
0
	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)
示例#6
0
    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"]