diff --git a/Canguru/Cliente.py b/Canguru/Cliente.py index 07b63d8db3bab8e07d392f4deeb83106f3f33d6c..97f762829d94bc01fd299e5b2e547a66ae800e2b 100755 --- a/Canguru/Cliente.py +++ b/Canguru/Cliente.py @@ -1,16 +1,30 @@ #!/usr/bin/env python -#################### Protocol ###################################### -# Marca - Destino - Origem - Prioridade - Tamamnho - Menssagem - CRC# -#################################################################### - -#Marca - 1 Byte -#Destino - 4 Bytes -#Origem - 4 Bytes -#Prioridade - 4 Bytes -#Tamanho - 32 bytes +#################### Protocol ################################################################# +# Marca - Tipo - Destino - Origem - Prioridade - Tamanho - Inic MSG - Mensagem - Fim MSG - CRC# +############################################################################################### + +#Marca - 1 Byte Marca inicio de transmissao, inicio de msg fim de msg +#Tipo - 0 Token, 1 - Msg +#Destino - pode variar de 1 a 4 +#Origem - pode variar de 1 a 4 +#Prioridade - pode variar de 0 a 7 +#Tamanho - tanto faz #Marca (inicio msg) - 1 Byte -#Menssagem - ?? -#CRC - 4 bytes +#Mensagem +#CRC - 8 bytes + +#Exemplo msg# +#~11313~oie~352D1036 +# ~ - inic transmissao +# 1 - tipo da mensagem +# 1 - destino da mensagem +# 3 - origem da mensagem +# 1 - prioridade da mensagem +# 3 - tamanho da string da mensagem +# ~ - delimitador de inicio da mensagem +# oie - mensagem +# ~ - delimitador de fim da mensagem +# 352D1036 - CRC import socket import threading @@ -22,18 +36,10 @@ SEND_PORT = 5000 # Porta que o Servidor envia RECV_PORT = 5001 # Porta que o Servidor recebe MACHINE_ID = 1 -class FuncThread(threading.Thread): - def __init__(self, tarset, *args): - self._tarset = tarset - self._args = args - threading.Thread.__init__(self) - - def run(self): - self._tarset(*self._args) - class Protocol(): def __init__ (self): - self.marca = "~" #Marca + self.marca = "~" #Marca + self.type = str(1) #Alterar Depois self.destiny = None self.origin = str(MACHINE_ID) self.priority = None @@ -43,49 +49,59 @@ class Protocol(): #set destiny message def setDestiny(self): - print 'Destino:' - self.destiny = raw_input() - self.destiny = str(self.destiny) + sys.stdout.write('Destino: ') + self.destiny = raw_input() + while (0 >= int(self.destiny)) or (int(self.destiny) >= 5): + print 'Entrada Invalida, Por favor escolha entre 1 a 4' + sys.stdout.write('Destino: ') + self.destiny = raw_input() + self.destiny = str(self.destiny) #set Priority messsage def setPriority(self): - print 'Prioridade:' - self.priority = raw_input() - self.priority = str(self.priority) + sys.stdout.write('Prioridade: ') + self.priority = raw_input() + while (0 >= int(self.priority)) or (int(self.priority) >= 8): + print 'Entrada Invalida, Por favor escolha entre 1 a 7' + sys.stdout.write('Prioridade: ') + self.priority = raw_input() + self.priority = str(self.priority) #set message def setMessage(self): - print 'Mensagem:' - self.msg = raw_input() + sys.stdout.write('Mensagem: ') + self.msg = raw_input() #set sizeof message def setSizeof (self): - self.sizemsg = len(self.msg) - self.sizemsg = str(self.sizemsg) #String convert - print self.sizemsg + self.sizemsg = len(self.msg) + self.sizemsg = str(self.sizemsg) #String convert #set CRC32 def setCRC32(self): - buff = (binascii.crc32(self.msg) & 0xFFFFFFFF) - self.crc = "%08X" % buff + buff = (binascii.crc32(self.msg) & 0xFFFFFFFF) + self.crc = "%08X" % buff def getEmpacotar(self): - return self.marca + self.destiny + self.origin + self.priority + self.marca + self.sizemsg + self.msg + self.crc + return self.marca + self.type + self.destiny + self.origin + self.priority + self.sizemsg + self.marca + self.msg + self.marca + self.crc - def desempacota(self, msg): + def setDesempacota(self, msg): self.marca = msg[0] - self.destiny = msg[1] - self.origin = msg[2] - self.priority = msg[3] - #slint - + self.type = msg[1] + self.destiny = int(msg[2]) + self.origin = msg[3] + self.priority = msg[4] + self.msg = msg.split('~', 3)[2] + self.crc = msg.split('~', 3)[3] + + def getCRC32(self): + buff = (binascii.crc32(self.msg) & 0xFFFFFFFF) + return "%08X" % buff def client (): udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) dest = (HOST, SEND_PORT) print 'Para sair digite exit\n' - print 'Mensagem:' - #hostname = socket.sethostname() protocolMessage = Protocol() protocolMessage.setDestiny() protocolMessage.setPriority() @@ -93,11 +109,8 @@ def client (): protocolMessage.setSizeof() protocolMessage.setCRC32() msg = protocolMessage.getEmpacotar() - #hostname = socket.sethostname() - while True: - #udp.sendto (hostname, dest) # Envia Hostname - udp.sendto (msg, dest) #Envia Mensagem - print 'Mensagem:' + while protocolMessage.msg <> 'exit': + udp.sendto (msg, dest) protocolMessage = Protocol() protocolMessage.setDestiny() protocolMessage.setPriority() @@ -105,30 +118,33 @@ def client (): protocolMessage.setSizeof() protocolMessage.setCRC32() msg = protocolMessage.getEmpacotar() - #hostname = socket.sethostname() + threadServer._Thread__stop() udp.close() def server (): - print 'Estou no Server' udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) orig = (HOST, RECV_PORT) udp.bind(orig) + protocolDescompactMessage = Protocol() while True: - #hostname, cliente = udp.recvfrom(1024) msg, cliente = udp.recvfrom(1024) - #print hostname,':', msg - print msg - print 'Estou no Server' + protocolDescompactMessage.setDesempacota(msg) + if protocolDescompactMessage.destiny == MACHINE_ID: + if protocolDescompactMessage.crc == protocolDescompactMessage.getCRC32(): + print msg + print '\n' + protocolDescompactMessage.origin + ' Escreveu: ' + protocolDescompactMessage.msg + else: + print 'ERRO, A MENSAGEM FOI RECIBIDA ERRADA' udp.close() - -#def killThread (): -#######################MAIN############################# + +#------------------MAIN-----------------# if len(sys.argv) > 1: AUX = RECV_PORT RECV_PORT = SEND_PORT SEND_PORT = AUX -threadServer = FuncThread (server) +threadServer = threading.Thread(target=server) +threadClient = threading.Thread(target=client) threadServer.start() -client () +threadClient.start() \ No newline at end of file