private void EnviandoMensaje(string mensaje, int contador) { int numPart = Convert.ToInt32((mensaje).Length / tamañoMaximoMensajeDeTrama); if (numPart < 16777215) { if ((mensaje).Length % tamañoMaximoMensajeDeTrama != 0) { numPart += 1; } //TRAMA DE INFORMACION Trama info = new Trama(0xf, contador, 0, numPart, ""); puerto.Write(info.getTramaCompleta(), 0, 1024); Trama parte; for (int i = 1; i <= numPart; i++) { if (i != numPart) { parte = new Trama(0xb, contador, i, 0, mensaje.Substring(1014 * (i - 1), 1014)); } else { parte = new Trama(0xb, contador, i, 0, mensaje.Substring(1014 * (i - 1))); } puerto.Write(parte.getTramaCompleta(), 0, 1024); } } }
public void recibiendoArchivo(Trama recibida) { int tamaño = archivos.ToArray().Length; for (var i = 0; i < tamaño; i++) { Archivo item = archivos.ToArray()[i]; if (!item.getEstaLleno()) { if (item.getIdentificador() == recibida.getIdentificador()) { //item.insertarMensaje(recibida.getOrden(), recibida.getMensajeString()); Console.WriteLine("#######"); Console.WriteLine("trama recibida " + recibida.getCabezeraString()); Console.WriteLine(item.getIdentificador().ToString() + " " + item.getPorcentajeDeAvance().ToString()); Console.WriteLine("#######"); item.insertarBytes(recibida.getOrdenInt(), recibida.getTramaMensaje()); onLlegoArchivo("", item.getPorcentajeDeAvance().ToString(), item.getIdentificador().ToString(), "21"); if (item.getEstaLleno()) { item.identificador = 555; } } } } }
private void EnviandoArchivo(string nombreArchivo, int contador) { //MessageBox.Show("lego a enviando archivo"); using (System.IO.Stream f = new System.IO.FileStream(nombreArchivo, FileMode.Open)) { int offset = 0; long len = f.Length; byte[] buffer = new byte[1014]; if (f.Length / tamañoMaximoMensajeDeTrama + 1 < 16777215) { int numPart = Convert.ToInt32(f.Length / tamañoMaximoMensajeDeTrama); if (f.Length % tamañoMaximoMensajeDeTrama != 0) { numPart += 1; } if (f.Length == 0) { numPart = 1; } int porcentaje = Convert.ToInt32((16777215 / numPart)); Trama info = new Trama(0xf, contador, 0, numPart, nombreArchivo); puerto.Write(info.getTramaCompleta(), 0, 1024); int readLen = 1014; // leer pedazos de 1024 Trama parte; int i = 1; while (offset != len) { if (offset + readLen > len) { readLen = (int)len - offset; } offset += f.Read(buffer, 0, readLen); parte = new Trama(0xa, contador, i, 0, buffer, readLen); Console.WriteLine("--------------"); Console.WriteLine("enviando trama " + parte.getCabezeraString()); Console.WriteLine(contador.ToString() + " " + porcentaje.ToString()); Console.WriteLine("--------------"); puerto.Write(parte.getTramaCompleta(), 0, 1024); onLlegoArchivo("", porcentaje.ToString(), contador.ToString(), "11"); buffer = new byte[1014]; i++; } } else { // generar un error por q el archivo es demasiado grande para enviar :v } } }
private void puerto_DataReceived(object oo, SerialDataReceivedEventArgs serialDataReceivedEventArg) { if (puerto.BytesToRead >= 1024) { puerto.Read(TramaRecibida, 0, 1024); Trama recibida = new Trama(TramaRecibida); switch (recibida.getTipo()) { //mensaje case 0xb: Task.Factory.StartNew(() => recibiendoMensaje(recibida)); break; //archivo case 0xa: Task.Factory.StartNew(() => recibiendoArchivo(recibida)); break; //informacion case 0xf: if (recibida.getTamañoMensaje() == 0) { //informacion de mensajes mensajes.Add(new Mensaje(recibida.getIdentificador(), recibida.getNumeroPartes())); } else { //informacion de archivos Archivo temp = new Archivo(recibida.getIdentificador(), recibida.getNumeroPartes(), recibida.getMensajeString(), directorioDeGuardado); archivos.Add(temp); Console.WriteLine(directorioDeGuardado + "//" + recibida.getMensajeString()); onLlegoArchivo(temp.getFullPath(), 0.ToString(), recibida.getIdentificador().ToString(), "20"); } break; default: Console.WriteLine("tipo de trama no valida " + recibida.getCabezeraString()); break; } } }
public void recibiendoMensaje(Trama recibida) { foreach (var item in mensajes) { if (!item.getEstaLleno()) { if (item.getIdentificador() == recibida.getIdentificador()) { item.insertarMensaje(recibida.getOrdenInt(), recibida.getMensajeString()); //MessageBox.Show("llego mensaje"); if (item.getEstaLleno()) { mensRecibido = item.getMensajeCompleto(); onLlegoMensaje(item.identificador); item.identificador = 777; } } } } }