diff --git a/aa.py b/aa.py deleted file mode 100755 index b2a0c3c83310695604bad700a37e7fe039c80f13..0000000000000000000000000000000000000000 --- a/aa.py +++ /dev/null @@ -1,245 +0,0 @@ -#!/usr/bin/env python -#################### 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, 2 - ACK, 3 - NACK -#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 -#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 -import sys -import binascii -import time -import Queue - -global TOKEN -global StartTime -global HighPriority -global RECEBIDA -RECEBIDA = 1 -StartTime = 0 -HighPriority = 10 -TOKEN = 0 -SEND_PORT = 3131 # Porta que o Servidor envia -RECV_PORT = 3131 # Porta que o Servidor recebe - -class Protocol(): - - def __init__ (self): - self.marca = "~" #Marca - self.type = str(1) #Alterar Depois - self.destiny = str(0) - self.origin = str(MACHINE_ID) - self.priority = str(0) - self.msg = str(0) - self.sizemsg = str(0) - self.crc = str(0) - - #set destiny message - def setDestiny(self): - 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): - 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 = 7 - int(self.priority) - - def setType (self): - if (self.msg == 'token'): - self.type = str(0) - else: - self.type = str(1) - - #set message - def setMessage(self): - 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 - - #set CRC32 - def setCRC32(self): - buff = (binascii.crc32(self.msg) & 0xFFFFFFFF) - self.crc = "%08X" % buff - - def getEmpacotar(self): - return self.marca + self.type + self.destiny + self.origin + str(self.priority) + self.sizemsg + self.marca + self.msg + self.marca + self.crc - - def setDesempacota(self, msg): - self.marca = msg[0] - 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 token (): - global TOKEN - global StartTime - global queue - global RECEBIDA - udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - tokenMessage = Protocol() - dest = (HOST, SEND_PORT) - while True: - EndTime = time.time() - if (EndTime - StartTime >= 2 and TOKEN == 1): - print 'MANDEI O TOKEN' - TOKEN = 0 - tokenMessage.type = str(0) - msg = tokenMessage.getEmpacotar() - udp.sendto (msg,dest) - #time.sleep(2) - if (TOKEN == 1): - #print 'ESTOU COM O TOKEN' - if (not queue.empty()): - msg = queue.get () - udp.sendto (msg[1], dest) - print 'ENVIANDO' - time.sleep(1) - while (RECEBIDA == 0): - print 'ENVIANDO NOVAMENTE A MSG' - udp.sendto (msg[1], dest) - time.sleep(1) - udp.close() - -def client (): - try: - global TOKEN - global HighPriority - protocolMessage = Protocol() - global queue - queue = Queue.PriorityQueue() - while True: - protocolMessage.setDestiny() - protocolMessage.setPriority() - protocolMessage.setMessage() - protocolMessage.type = str(1) - protocolMessage.setSizeof() - protocolMessage.setCRC32() - msg = protocolMessage.getEmpacotar() - queue.put ((protocolMessage.priority, msg)) - if (not queue.empty()): - HighPriority = queue.queue[0] - threadServer._Thread__stop() - threadToken._Thread__stop() - except: - print 'OPS, ALGO OCORREU ERRADO' - threadServer._Thread__stop() - threadToken._Thread__stop() - -def server (): - global TOKEN - global StartTime - global RECEBIDA - udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - orig = ('', RECV_PORT) - dest = (HOST, SEND_PORT) - udp.bind(orig) - protocolDescompactMessage = Protocol() - - while True: - msg, cliente = udp.recvfrom(1024) - protocolDescompactMessage.setDesempacota(msg) - - #A msg foi enviada com sucesso - if (msg[1] == '2' and int(MACHINE_ID) == int(protocolDescompactMessage.destiny)): - print 'A MENSAGEM FOI ENVIADA COM SUCESSO' - RECEBIDA = 1 - - #Erro no envio - elif (msg[1] == '3' and int(MACHINE_ID) == int(protocolDescompactMessage.destiny)): - RECEBIDA = 0 - - #A msg e pra mim - elif (msg[1] == '1' and int(MACHINE_ID) == int(protocolDescompactMessage.destiny)): - #protocolDescompactMessage.crc = "8888888"#caga tdo - if (protocolDescompactMessage.crc == protocolDescompactMessage.getCRC32()): - print '\n' + protocolDescompactMessage.origin + ' Escreveu: ' + protocolDescompactMessage.msg - - #envia ack - protocolDescompactMessage.type = str(2) - protocolDescompactMessage.destiny = protocolDescompactMessage.origin - msg = protocolDescompactMessage.getEmpacotar() - udp.sendto (msg, dest) - else: - print 'ERRO DE MENSAGEM' - - #envia nack - protocolDescompactMessage.type = str(3) - protocolDescompactMessage.destiny = protocolDescompactMessage.origin - msg = protocolDescompactMessage.getEmpacotar() - udp.sendto (msg, dest) - - #A msg n e pra mim - elif (msg[1] == '1' or msg[2] == '2' or msg[3] == '3'): - udp.sendto (msg, dest) - - #Recebi o token - if (protocolDescompactMessage.type == '0' and TOKEN == 0): - print 'RECEBI O TOKEN' - TOKEN = 1 - StartTime = time.time() - - - udp.close() - -#------------------MAIN-----------------# - -if len(sys.argv) > 1: - TOKEN = 1 - print 'COMECEI COM O TOKEN' - StartTime = time.time() -print 'ID Dessa maquina, escolha entre 1 e 4' -MACHINE_ID = raw_input () -print "Ip da proxima maquina" -HOST = raw_input() -if TOKEN == 1: - StartTime = time.time() -threadServer = threading.Thread(target=server) -threadClient = threading.Thread(target=client) -threadToken = threading.Thread(target=token) -threadServer.start() -threadClient.start() -threadToken.start()