Skip to content

Instantly share code, notes, and snippets.

@pepgonzalez
Created April 25, 2013 04:57
Show Gist options
  • Save pepgonzalez/5457589 to your computer and use it in GitHub Desktop.
Save pepgonzalez/5457589 to your computer and use it in GitHub Desktop.
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