def AddMessage(self, ClientId, SecondId, Message):
        TimeStamp = datetime.now().strftime("%d-%b-%Y|%H:%M:%S")
        #IdMensaje = IDEMISOR-IDRECEPTOR-TIMESTAMP
        IdMessage = str(ClientId)+"_"+str(SecondId)+"_"+str(TimeStamp)
        try:
            log = open(FILE,"a")
        except IOError:
            print("[ERROR] Algo salio mal, al intentar registrar el mensaje: "+ str(Message)+" entre los clientes :"+str(ClientId)+" -- "+str(SecondId))
            return

        Data = "#".join([str(IdMessage), str(Message), "\n"])

        if ClientId in self.Clients.keys():
            if SecondId in self.Clients.keys():
                    self.Clients[SecondId].append(Data)          
                    log.write(Data)
                    print("[EXITO] El mensaje: "+ str(Message)+" entre los clientes :"+str(ClientId)+" -- "+str(SecondId)+ " Se registro correctame")
                    return Chat_pb2.Confirmacion(Tipo = 1, IdPropietario=ClientId, IdMensaje = IdMessage, Error =  "" )
            else:
                print("El receptor {0} no se ecnuentra registrado".format(SecondId))
                return Chat_pb2.Confirmacion(Tipo = 0, IdPropietario=ClientId, IdMensaje = IdMessage, Error =  "El receptor {0} no se ecnuentra registrado".format(SecondId) )
        else:
            print("El emisor {0} no se encuentra registrado".format(ClientId))
            return Chat_pb2.Confirmacion(Tipo = 0, IdPropietario=ClientId, IdMensaje = IdMessage, Error =  "El emisor {0} no se encuentra registrado".format(ClientId))
        log.close()
    def Saludo(self, request, context):

        NewId = "Cliente-"+str(self.ClientNumber+1)
        if (request.Tipo == 0):
            if (self.Directorio.AddClient(NewId)):
                self.ClientNumber = self.ClientNumber +1
                print("Se ha agregado a {0} a la lista de clientes".format(NewId))
                return Chat_pb2.Saludos(Tipo = 1, IdCliente = NewId, IdServidor = str(self.ServerId), Error = "")
            else:
                return Chat_pb2.Saludos(Tipo = 1, IdCliente = "", IdServidor = "", Error = "Error al ser agregado al servidor, El cliente ya existe")
        elif (request.Tipo == 1):
            print("USTED NO DEBERIA ESTAR AQUI! ¬¬")
Esempio n. 3
0
 def __init__(self, nombre):
     self.nombre = nombre
     self.channel = grpc.insecure_channel(f'{SERVER}:{PORT}')
     self.stub = Chat_pb2_grpc.ChatStub(self.channel)
     self.id = self.stub.Connection(Chat_pb2.Nombre(
         nombre=nombre)).id  # se le pide al server que nos de un id
     print(f'Id cliente: {self.id}, Nombre Cliente: {self.nombre}')
     print(
         '==================================BEGIN======================================='
     )
     self.my_user = Chat_pb2.User(id=self.id, nombre=self.nombre)
     #se crea thread para que escuche los mensajes entrantes
     threading.Thread(target=self.ReciveMessage, daemon=True).start()
Esempio n. 4
0
 def SendMessage(self, contenido, destino):
     try:
         response = self.stub.SendMessage(
             Chat_pb2.Message(
                 emisor=self.my_user,
                 contenido=contenido,
                 timestamp=time.strftime("%c"),
                 receptor=Chat_pb2.User(id=int(destino.split('#')[1]),
                                        nombre=destino.split('#')[0]),
                 id=self.stub.New_message(Chat_pb2.Id(id=self.id)).id))
         if not response.flag:
             print(
                 "NO existe el usuario a quien se le quiere enviar el mensaje "
             )
     except grpc.RpcError as err:
         print(err)
    def test_enviarMensajes(self):
        stub = str_grpc.ChatStub(self.channel)
        msg = structure.Mensaje(sender='testsender',
                                content="this is a test",
                                receiver='testreceiver')

        self.assertEqual("success", stub.enviarMensaje(msg))
Esempio n. 6
0
 def Messages(self, id, context):
     r = Chat_pb2.MessageList()
     try:
         f = open("log/log.txt", "r")
         for i in f:
             l = i.split("@")
             if (int(l[1][1:-1].split("#")[1]) == id.id):
                 men = l[5][1:-1].split(";")
                 r.msn.append(
                     Chat_pb2.Message(id=int(men[0]),
                                      contenido=men[1],
                                      timestamp=men[2]))
         f.close()
     except:
         r.msn.append(Chat_pb2.Empty())
     return r
Esempio n. 7
0
 def ListaDeUsuarios(self):
     m = self.stub.ListaDeUsuarios(Chat_pb2.Id(id=self.id))
     print(
         "\n================================ LISTA DE USUARIOS ==================================== "
     )
     for i in m.user:
         print(f'-> {i.nombre}#{i.id}')
     print("")
 def EsperaMensajes(self):
     #print("Servicio de espera de mensajes iniciado")
     for element in self.stub.DespachoMensajes(
             Chat_pb2.Consulta(IdCliente=self.Id, Tipo=str("r"))):
         #print("Mensaje recibido :\n"+element.Mensaje)
         Mensaje = " ".join(
             [element.TimeStamp, element.IdPropietario, element.Mensaje])
         self.Mensajes.append(Mensaje)
 def EsperaHistorial(self):
     temp = []
     #print("Servicio de espera de mensajes iniciado")
     for element in self.stub.DespachoMensajes(
             Chat_pb2.Consulta(IdCliente=self.Id, Tipo=str("e"))):
         #print("Mensaje recibido :\n"+element.Mensaje)
         Mensaje = " ".join(
             [element.TimeStamp, element.IdDestinatario, element.Mensaje])
         temp.append(Mensaje)
     return temp
Esempio n. 10
0
    def SendMessage(self, message, context):
        flag = False
        respuesta = Chat_pb2.Estado(
            estado=flag,
            detalle=f'El mensaje a {message.receptor} no pudo se entregado')
        if message.receptor.id > self.user_id and message.receptor.nombre not in self.nombre.values(
        ):  #el usuario que iba a ser el enviado el mensaje no existe
            return Chat_pb2.Flag(flag=False)

        self.recibidos[message.receptor.id].append(message)
        self.enviados[message.emisor.id].append(message)
        # Se procede a escribir log .txt
        f = open("log/log.txt", "a")
        f.write(
            f'Sender@[{message.emisor.nombre}#{message.emisor.id}]@Receiver@[{message.receptor.nombre}#{message.receptor.id}]@Message@[{message.id};{message.contenido};{message.timestamp}]\n'
        )
        f.close()
        print(
            f'El usuario {message.emisor.nombre} envia mensaje a {message.receptor.nombre}'
        )
        return Chat_pb2.Flag(flag=True)
Esempio n. 11
0
 def recibirMensajes(self, request, context):
     cont = 0
     #while True:
     while cont < len(self.messages):
         message = structure.Mensaje(id=self.messages[cont][0],
                                     sender=self.messages[cont][1],
                                     receiver=self.messages[cont][2],
                                     content=self.messages[cont][3])
         if request.username == message.receiver or request.username == message.sender:
             yield message
             print(cont)
         cont = cont + 1
Esempio n. 12
0
    def Connection(self, request, context):
        print(f'Responde el thread{threading.get_ident()}')

        new_id = self.user_id
        self.nombre[
            new_id] = request.nombre  # se obtiene el nombre de la persona que hizo la request, supongo que despue slo ssamos ?
        self.enviados[new_id] = [
        ]  # se crea llave = id , valor = lista de mensajes enviados
        self.recibidos[new_id] = []  #se crea lista para mensaje recibidos

        self.user_id += 1

        return Chat_pb2.Id(id=new_id)
 def EnvioSolicitud(self):
     Dest = input("ingrese el Id del destinatario: ")
     Message = input("Ingrese un mensaje: ")
     if Message != "":
         self.stub.EnvioSolicitud(
             Chat_pb2.MensajeCliente(IdPropietario=self.Id,
                                     IdDestinatario=Dest,
                                     IdMensaje="",
                                     TimeStamp="",
                                     Mensaje=Message,
                                     Error=""))
     else:
         print("Ingrese un mensaje valido")
Esempio n. 14
0
 def ReciveMessage(self):
     try:
         for mensaje in self.stub.ReciveMessage(Chat_pb2.Id(id=self.id)):
             emisor = mensaje.emisor
             print(
                 '\n========================= NUEVO MENSAJE RECIBIDO ==============================='
             )
             print(
                 f'[{emisor.nombre}#{emisor.id}-{mensaje.timestamp}]{mensaje.contenido}'
             )
             print('>> Ingrese accion:')
     except grpc.RpcError as err:
         print(err)
 def GetMessages(self,ClientId):
     temp = []
     try:
         for mensaje in self.Clients[ClientId]:
             temp.append(mensaje)
         print("se obtubieron los mensajes del usuario {0}".format(ClientId))
     
     except Exception as error:
         print(error)
         print("Error al acceder al buffer de mensajes del cliente {0}".format(ClientId))
     
     self.Clients[ClientId].clear()
     for m in temp:
         IdMensaje, Mensaje = m.split(sep="#", maxsplit=1)
         IdEmisor,IdReceptor, TimeStamp = IdMensaje.split(sep="_", maxsplit = 2)
         mensaje = Chat_pb2.MensajeCliente(IdPropietario = IdEmisor, IdDestinatario = IdReceptor, IdMensaje = IdMensaje,
         TimeStamp = TimeStamp, Mensaje = Mensaje, Error = "" )
         yield mensaje
Esempio n. 16
0
    def enviarMensaje(self, request, context):
        cur = cnx.cursor()
        sender = request.sender
        receiver = request.receiver
        contenido = request.content
        date = datetime.datetime.now()
        query = "INSERT INTO photogram.mensaje (sender, receiver, content, date) values (%s,%s,%s,%s)"
        values = (sender, receiver, contenido, date)
        cur.execute(query, values)
        cnx.commit()
        #insertarlo en la bd

        self.messages.clear()
        cur.execute("SELECT * FROM photogram.mensaje")
        for msj in cur.fetchall():
            print(msj)
            self.messages.append(msj)
        return structure.Empty(response="success")
 def GetRecord(self, ClientId):
     temp = []
     try:
         log = open(FILE,"r")
     except IOError:
         print("[ERROR] Algo salio mal, al intentar abrir el archivo log.txt")
         return
     for linea in log:
         IdMensaje, Mensaje = linea.split(sep="#", maxsplit=1)
         IdEmisor,IdReceptor, TimeStamp = IdMensaje.split(sep="_", maxsplit = 2)
         if IdEmisor == ClientId:
             temp.append((IdEmisor,IdReceptor,IdMensaje, TimeStamp, Mensaje))
     log.close()
     for tupla in temp:
         IdEmisor,IdReceptor,IdMensaje, TimeStamp, Mensaje = tupla
         mensaje = Chat_pb2.MensajeCliente(IdPropietario = IdEmisor, IdDestinatario = IdReceptor, IdMensaje = IdMensaje,
         TimeStamp = TimeStamp, Mensaje = Mensaje, Error = "" )
         yield mensaje
    def __init__(self):
        #Variables de clase
        self.Id = "null"
        self.IdServer = "null"
        self.Mensajes = []
        #Crear grpc Channel y stub

        channel = grpc.insecure_channel(IP + ":" + PORT)
        self.stub = Chat_pb2_grpc.ChatStub(channel)
        response = self.stub.Saludo(
            Chat_pb2.Saludos(Tipo=0, IdCliente="", IdServidor="", Error=""))

        if response.Tipo == 1:
            if len(response.IdCliente) > 0:
                self.Id = response.IdCliente
                self.IdServer = response.IdServidor
                print("Has ingresado al servidor {0} con el Id {1}".format(
                    self.IdServer, self.Id))
            elif len(response.Error) > 0:
                print(response.Error)
            else:
                print("Algo salio mal al iniciar comunicacion con el servidor")
        threading.Thread(target=self.EsperaMensajes(), daemon=True).start()
 def EsperaClientes(self):
     temp = []
     for element in self.stub.DespachoMensajes(
             Chat_pb2.Consulta(IdCliente=self.Id, Tipo=str("c"))):
         temp.append(element.Mensaje)
     return temp
Esempio n. 20
0
 def ListaDeUsuarios(self, id, context):
     r = Chat_pb2.UserList()
     for i in self.nombre:
         r.user.append(Chat_pb2.User(id=i, nombre=self.nombre[i]))
     return r
Esempio n. 21
0
 def New_message(self, n, context):
     self.message_id += 1
     return Chat_pb2.NewMessageID(id=self.message_id)
def getMessages():
    print("RECIBIENDO")
    for x in stub.recibirMensajes(structure.Usuario(username=sender)):
        print(x)
 def GetClients(self, ClientId):
     for client in self.Clients.keys():
         if client != ClientId:
             mensaje = Chat_pb2.MensajeCliente(IdPropietario = "", IdDestinatario = "", IdMensaje = "", TimeStamp = "", Mensaje = client, Error = "" )
             yield mensaje
 def test_recibirMensajes(self):
     with grpc.insecure_channel("localhost:" + self.port) as channel:
         stub = str_grpc.ChatStub(channel)
         response = stub.recibirMensajes(
             structure.Usuario(username="******"))
         self.assertEqual(response)
Esempio n. 25
0
 def Messages(self):
     m = self.stub.Messages(Chat_pb2.Id(id=self.id))
     for i in m.msn:
         print(f'-> {i.contenido}')
     if len(m.msn) == 0:
         print('-> NO  mensajes enviados')