Created
April 25, 2013 04:57
-
-
Save pepgonzalez/5457589 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import socket as s | |
import pickle | |
import threading | |
import time | |
from huffman import Huffman | |
class Nodo: | |
def __init__(self, nombre, frecuencia, izquierda, derecha): | |
self.nombre = nombre | |
self.frecuencia = frecuencia | |
self.izquierda = izquierda | |
self.derecha = derecha | |
self.codigo = "" | |
def __cmp__( self, other ): | |
if other != None: | |
if self.frecuencia < other.frecuencia: res = -1 | |
elif self.frecuencia > other.frecuencia: res = 1 | |
else : res = 0 | |
return res | |
else: | |
return 1 | |
class Informacion: | |
def __init__(self, listadoDePaquetes, totalDePaquetes, paquetesRecibidos, paquetesProcesados, mensaje, codigo, arbol, algoritmo): | |
self.listadoDePaquetes = listadoDePaquetes | |
self.totalDePaquetes = totalDePaquetes | |
self.paquetesRecibidos = paquetesRecibidos | |
self.paquetesProcesados = paquetesProcesados | |
self.mensaje = mensaje | |
self.codigo = codigo | |
self.arbol = arbol | |
self.algoritmo = algoritmo | |
class Paquete: | |
def __init__ (self, header, numeroPaquete, totalPaquetes, contenido): | |
self.header = header | |
self.numeroPaquete = numeroPaquete | |
self.totalPaquetes = totalPaquetes | |
self.contenido = contenido | |
info = Informacion(list(), 0, 0, 0, "", "", None, Huffman("algoritmo")) | |
def obtenerPaquetes(): | |
global info | |
socket = s.socket(s.AF_INET,s.SOCK_DGRAM) | |
socket.bind (("127.0.0.1",9001)) | |
bandera = True | |
while bandera: #loop | |
data, addr = socket.recvfrom(1024) # lee info y host que envio msj | |
obj = pickle.loads(data) | |
print "paquete recibido, contenido del paquete: ", obj.contenido | |
info.totalDePaquetes = obj.totalPaquetes | |
info.listadoDePaquetes.append(obj) | |
info.paquetesRecibidos = len(info.listadoDePaquetes) | |
def procesaPaquete(): | |
global info | |
paq = info.listadoDePaquetes.pop(0) | |
info.mensaje += paq.contenido | |
codigo, Arbol = info.algoritmo.proceso(info.mensaje) | |
info.codigo = codigo | |
info.arbol = Arbol | |
info.paquetesProcesados += 1 | |
def main(): | |
global info | |
server = threading.Thread(target=obtenerPaquetes) | |
server.start() | |
while True: | |
if(len(info.listadoDePaquetes) > 0): | |
procesaPaquete() | |
if info.totalDePaquetes != 0 and info.totalDePaquetes == info.paquetesProcesados: | |
print "Todos los paquetes fueron procesados" | |
print "mensaje final: " | |
print info.mensaje | |
tramaBinaria = info.algoritmo.obtenerValorBinario(info.mensaje) | |
print "largo de trama binaria original: ", len(tramaBinaria) | |
print "largo de trama de codigo huffman: ", len(info.codigo) | |
pc = (len(info.codigo) * 100 ) / float(len(tramaBinaria)) | |
print "porcentaje de compresion: ", 100 - pc | |
MensajeOriginal = info.algoritmo.descomprime(info.arbol, info.codigo) | |
print "mensaje Original descompreso: ", MensajeOriginal | |
break | |
time.sleep(1) | |
print "fin del proceso main" | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment