Exemple #1
0
        /// <summary>
        /// Recebe uma string.
        /// Pode ser necessário vários pacotes para montar essa string.
        /// </summary>
        /// <returns>String.</returns>
        /// <param name="p_endpoint">Ponto de comunicação.</param>
        /// <exception cref="SpartacusMin.Net.Exception">Exceção pode ocorrer quando não conseguir receber a string.</exception>
        public string RecvString(int p_endpoint)
        {
            string v_text;

            SpartacusMin.Net.Packet v_packetrecv, v_packetsend;
            int v_numpackets, v_sequence;

            try
            {
                v_packetrecv = this.Recv(p_endpoint);

                v_sequence   = 0;
                v_numpackets = v_packetrecv.v_numpackets;

                // se a sequencia estah errada, entao precisa tratar um erro
                // if (v_packet.v_sequence != v_sequence)

                v_text = v_packetrecv.GetString();

                // enviando ack
                v_packetsend = new SpartacusMin.Net.Packet(SpartacusMin.Net.PacketType.ACK, v_sequence, v_numpackets, "");
                this.Send(p_endpoint, v_packetsend);

                v_sequence++;
                while (v_sequence < v_numpackets)
                {
                    // recebendo pacote
                    v_packetrecv = this.Recv(p_endpoint);

                    // se a sequencia estah errada, entao precisa tratar um erro
                    // if (v_packet.v_sequence != v_sequence)

                    // se o numero de pacotes estah errado, entao precisa tratar um erro
                    // if (v_packet.v_numpackets != v_numpackets)

                    // acumulando conteudo dos dados do pacote na string
                    v_text += v_packetrecv.GetString();

                    // enviando ack
                    v_packetsend = new SpartacusMin.Net.Packet(SpartacusMin.Net.PacketType.ACK, v_sequence, v_numpackets, "");
                    this.Send(p_endpoint, v_packetsend);

                    v_sequence++;
                }

                return(v_text);
            }
            catch (SpartacusMin.Net.Exception e)
            {
                throw e;
            }
            catch (System.Exception e)
            {
                throw new SpartacusMin.Net.Exception(e);
            }
        }
Exemple #2
0
        /// <summary>
        /// Envia uma string.
        /// Pode ser necessário quebrar essa string em vários pacotes.
        /// </summary>
        /// <param name="p_endpoint">Ponto de comunicação.</param>
        /// <param name="p_text">String.</param>
        /// <exception cref="SpartacusMin.Net.Exception">Exceção pode ocorrer quando não conseguir enviar a string.</exception>
        public void SendString(int p_endpoint, string p_text)
        {
            SpartacusMin.Net.Packet v_packetsend, v_packetrecv;
            int  v_chunksize;
            int  v_numpackets, v_sequence;
            int  k;
            bool v_ack;

            try
            {
                // tamanho dos dados eh igual ao tamanho total do pacote menos o cabecalho (25)
                v_chunksize = this.v_buffersize - 25;

                // numero de pacotes
                v_numpackets = (int)System.Math.Ceiling((double)p_text.Length / (double)v_chunksize);

                v_sequence = 0;
                for (k = 0; k < p_text.Length; k += v_chunksize)
                {
                    // se eh o ultimo pacote, entao o tamanho dos dados serah menor
                    if ((k + v_chunksize) > p_text.Length)
                    {
                        v_chunksize = p_text.Length - k;
                    }

                    // montando pacote
                    v_packetsend = new SpartacusMin.Net.Packet(SpartacusMin.Net.PacketType.DATA, v_sequence, v_numpackets, p_text.Substring(k, v_chunksize));

                    // enquanto nao recebeu ACK, precisa reenviar ate receber
                    v_ack = false;
                    while (!v_ack)
                    {
                        // enviando pacote
                        this.Send(p_endpoint, v_packetsend);

                        // recebendo ACK
                        v_packetrecv = this.Recv(p_endpoint);
                        if (v_packetrecv.v_type == SpartacusMin.Net.PacketType.ACK && v_packetrecv.v_sequence == v_sequence)
                        {
                            v_ack = true;
                        }
                    }

                    v_sequence++;
                }
            }
            catch (SpartacusMin.Net.Exception e)
            {
                throw e;
            }
            catch (System.Exception e)
            {
                throw new SpartacusMin.Net.Exception(e);
            }
        }
Exemple #3
0
 /// <summary>
 /// Envia um pacote.
 /// </summary>
 /// <param name="p_packet">Pacote.</param>
 /// <exception cref="SpartacusMin.Net.Exception">Exceção pode ocorrer quando não conseguir enviar o pacote.</exception>
 public void Send(SpartacusMin.Net.Packet p_packet)
 {
     try
     {
         this.Send(0, p_packet);
     }
     catch (SpartacusMin.Net.Exception e)
     {
         throw e;
     }
 }
Exemple #4
0
 /// <summary>
 /// Envia um pacote.
 /// </summary>
 /// <param name="p_endpoint">Ponto de comunicação.</param>
 /// <param name="p_packet">Pacote.</param>
 /// <exception cref="SpartacusMin.Net.Exception">Exceção pode ocorrer quando não conseguir enviar o pacote.</exception>
 public void Send(int p_endpoint, SpartacusMin.Net.Packet p_packet)
 {
     try
     {
         this.v_streams[p_endpoint].Write(p_packet.v_buffer, 0, p_packet.v_buffer.Length);
     }
     catch (SpartacusMin.Net.Exception e)
     {
         throw e;
     }
     catch (System.Exception e)
     {
         throw new SpartacusMin.Net.Exception(e);
     }
 }
Exemple #5
0
        /// <summary>
        /// Envia um arquivo.
        /// </summary>
        /// <param name="p_endpoint">Ponto de comunicação.</param>
        /// <param name="p_filename">Nome do arquivo.</param>
        /// <exception cref="SpartacusMin.Net.Exception">Exceção pode ocorrer quando não conseguir enviar o arquivo.</exception>
        public void SendFile(int p_endpoint, string p_filename)
        {
            System.IO.FileStream    v_file;
            System.IO.BinaryReader  v_reader;
            SpartacusMin.Net.Packet v_packetsend, v_packetrecv;
            int v_chunksize;

            byte[] v_chunk;
            int    v_numpackets, v_sequence;
            int    k;
            bool   v_ack;

            try
            {
                v_file = new System.IO.FileStream(p_filename, System.IO.FileMode.Open, System.IO.FileAccess.Read);

                v_reader = new System.IO.BinaryReader(v_file);

                // tamanho dos dados eh igual ao tamanho total do pacote menos o cabecalho (25)
                v_chunksize = this.v_buffersize - 25;

                // numero de pacotes
                v_numpackets = (int)System.Math.Ceiling((double)v_file.Length / (double)v_chunksize);

                // montando pacote com nome do arquivo
                v_packetsend = new SpartacusMin.Net.Packet(SpartacusMin.Net.PacketType.FILE, p_filename);

                // enquanto nao recebeu ACK, precisa reenviar ate receber
                v_ack = false;
                while (!v_ack)
                {
                    // enviando pacote
                    this.Send(p_endpoint, v_packetsend);

                    // recebendo ACK
                    v_packetrecv = this.Recv(p_endpoint);
                    if (v_packetrecv.v_type == SpartacusMin.Net.PacketType.ACK)
                    {
                        v_ack = true;
                    }
                }

                v_sequence = 0;
                for (k = 0; k < v_file.Length; k += v_chunksize)
                {
                    // se eh o ultimo pacote, entao o tamanho dos dados serah menor
                    if ((k + v_chunksize) > v_file.Length)
                    {
                        v_chunksize = (int)v_file.Length - k;
                    }

                    // lendo dados do arquivo
                    v_chunk = v_reader.ReadBytes(v_chunksize);

                    // montando pacote
                    v_packetsend = new SpartacusMin.Net.Packet(SpartacusMin.Net.PacketType.DATA, v_sequence, v_numpackets, v_chunk);

                    // enquanto nao recebeu ACK, precisa reenviar ate receber
                    v_ack = false;
                    while (!v_ack)
                    {
                        // enviando pacote
                        this.Send(p_endpoint, v_packetsend);

                        // recebendo ACK
                        v_packetrecv = this.Recv(p_endpoint);
                        if (v_packetrecv.v_type == SpartacusMin.Net.PacketType.ACK && v_packetrecv.v_sequence == v_sequence)
                        {
                            v_ack = true;
                        }
                    }

                    v_sequence++;
                }

                v_reader.Close();
            }
            catch (System.IO.IOException e)
            {
                throw new SpartacusMin.Net.Exception(e);
            }
            catch (System.Exception e)
            {
                throw new SpartacusMin.Net.Exception(e);
            }
        }
Exemple #6
0
        /// <summary>
        /// Envia uma <see cref="System.Data.DataTable"/>.
        /// Envia uma linha por pacote.
        /// </summary>
        /// <param name="p_endpoint">Ponto de comunicação.</param>
        /// <param name="p_table"><see cref="System.Data.DataTable"/>.</param>
        /// <exception cref="SpartacusMin.Net.Exception">Exceção pode ocorrer quando não conseguir enviar a <see cref="System.Data.DataTable"/>.</exception>
        public void SendDataTable(int p_endpoint, System.Data.DataTable p_table)
        {
            SpartacusMin.Net.Packet v_packetsend, v_packetrecv;
            int    v_sequence, v_numpackets;
            string v_text;
            int    i, j;
            bool   v_ack;

            try
            {
                v_numpackets = p_table.Rows.Count + 1;

                // ENVIANDO NOMES DE COLUNAS

                v_sequence = 0;

                v_text = p_table.Columns[0].ColumnName;
                for (j = 1; j < p_table.Columns.Count; j++)
                {
                    v_text += ";" + p_table.Columns[j].ColumnName;
                }

                // montando pacote
                v_packetsend = new SpartacusMin.Net.Packet(SpartacusMin.Net.PacketType.DATA, v_sequence, v_numpackets, v_text);

                // enquanto nao recebeu ACK, precisa reenviar ate receber
                v_ack = false;
                while (!v_ack)
                {
                    // enviando pacote
                    this.Send(p_endpoint, v_packetsend);

                    // recebendo ACK
                    v_packetrecv = this.Recv(p_endpoint);
                    if (v_packetrecv.v_type == SpartacusMin.Net.PacketType.ACK && v_packetrecv.v_sequence == v_sequence)
                    {
                        v_ack = true;
                    }
                }

                v_sequence++;

                // ENVIANDO LINHAS

                for (i = 0; i < p_table.Rows.Count; i++)
                {
                    v_text = p_table.Rows[i][0].ToString();
                    for (j = 1; j < p_table.Columns.Count; j++)
                    {
                        v_text += ";" + p_table.Rows[i][j].ToString().Replace(";", ",");
                    }

                    // montando pacote
                    v_packetsend = new SpartacusMin.Net.Packet(SpartacusMin.Net.PacketType.DATA, v_sequence, v_numpackets, v_text);

                    // enquanto nao recebeu ACK, precisa reenviar ate receber
                    v_ack = false;
                    while (!v_ack)
                    {
                        // enviando pacote
                        this.Send(p_endpoint, v_packetsend);

                        // recebendo ACK
                        v_packetrecv = this.Recv(p_endpoint);
                        if (v_packetrecv.v_type == SpartacusMin.Net.PacketType.ACK && v_packetrecv.v_sequence == v_sequence)
                        {
                            v_ack = true;
                        }
                    }

                    v_sequence++;
                }
            }
            catch (SpartacusMin.Net.Exception e)
            {
                throw e;
            }
            catch (System.Exception e)
            {
                throw new SpartacusMin.Net.Exception(e);
            }
        }
Exemple #7
0
        /// <summary>
        /// Recebe um arquivo.
        /// </summary>
        /// <returns>Nome do arquivo.</returns>
        /// <param name="p_endpoint">Ponto de comunicação.</param>
        /// <exception cref="SpartacusMin.Net.Exception">Exceção pode ocorrer quando não conseguir receber o arquivo.</exception>
        public string RecvFile(int p_endpoint)
        {
            System.IO.FileStream    v_file;
            System.IO.BinaryWriter  v_writer;
            SpartacusMin.Net.Packet v_packetrecv, v_packetsend;
            int v_numpackets, v_sequence;

            try
            {
                // recebendo nome do arquivo
                v_packetrecv = this.Recv(p_endpoint);

                if (v_packetrecv.v_type != SpartacusMin.Net.PacketType.FILE)
                {
                    return(null);
                }

                v_file = new System.IO.FileStream(v_packetrecv.GetString(), System.IO.FileMode.Create, System.IO.FileAccess.Write);

                v_writer = new System.IO.BinaryWriter(v_file);

                // enviando ack
                v_packetsend = new SpartacusMin.Net.Packet(SpartacusMin.Net.PacketType.ACK, "");
                this.Send(p_endpoint, v_packetsend);

                // recebendo primeiro pacote de dados do arquivo
                v_packetrecv = this.Recv(p_endpoint);

                v_sequence   = 0;
                v_numpackets = v_packetrecv.v_numpackets;

                // se a sequencia estah errada, entao precisa tratar um erro
                // if (v_packet.v_sequence != v_sequence)

                v_writer.Write(v_packetrecv.v_data);

                // enviando ack
                v_packetsend = new SpartacusMin.Net.Packet(SpartacusMin.Net.PacketType.ACK, v_sequence, v_numpackets, "");
                this.Send(p_endpoint, v_packetsend);

                v_sequence++;
                while (v_sequence < v_numpackets)
                {
                    // recebendo pacote
                    v_packetrecv = this.Recv(p_endpoint);

                    // se a sequencia estah errada, entao precisa tratar um erro
                    // if (v_packet.v_sequence != v_sequence)

                    // se o numero de pacotes estah errado, entao precisa tratar um erro
                    // if (v_packet.v_numpackets != v_numpackets)

                    // acumulando conteudo dos dados do pacote na string
                    v_writer.Write(v_packetrecv.v_data);

                    // enviando ack
                    v_packetsend = new SpartacusMin.Net.Packet(SpartacusMin.Net.PacketType.ACK, v_sequence, v_numpackets, "");
                    this.Send(p_endpoint, v_packetsend);

                    v_sequence++;
                }

                v_writer.Flush();
                v_writer.Close();

                return(v_file.Name);
            }
            catch (SpartacusMin.Net.Exception e)
            {
                throw e;
            }
            catch (System.Exception e)
            {
                throw new SpartacusMin.Net.Exception(e);
            }
        }
Exemple #8
0
        /// <summary>
        /// Recebe uma <see cref="System.Data.DataTable"/>.
        /// Recebe um pacote por linha da <see cref="System.Data.DataTable"/>.
        /// </summary>
        /// <returns><see cref="System.Data.DataTable"/>.</returns>
        /// <param name="p_endpoint">Ponto de comunicação.</param>
        /// <exception cref="SpartacusMin.Net.Exception">Exceção pode ocorrer quando não conseguir receber a <see cref="System.Data.DataTable"/>.</exception>
        public System.Data.DataTable RecvDataTable(int p_endpoint)
        {
            System.Data.DataTable   v_table;
            System.Data.DataRow     v_row;
            SpartacusMin.Net.Packet v_packetrecv, v_packetsend;
            int v_numpackets, v_sequence;

            string[] v_fields;
            int      k;

            try
            {
                v_packetrecv = this.Recv(p_endpoint);

                v_sequence   = 0;
                v_numpackets = v_packetrecv.v_numpackets;

                // se a sequencia estah errada, entao precisa tratar um erro
                // if (v_packet.v_sequence != v_sequence)

                // criando tabela
                v_table = new System.Data.DataTable();

                // adicionando colunas
                v_fields = v_packetrecv.GetString().Split(';');
                foreach (string v_column in v_fields)
                {
                    v_table.Columns.Add(v_column);
                }

                // enviando ack
                v_packetsend = new SpartacusMin.Net.Packet(SpartacusMin.Net.PacketType.ACK, v_sequence, v_numpackets, "");
                this.Send(p_endpoint, v_packetsend);

                v_sequence++;
                while (v_sequence < v_numpackets)
                {
                    // recebendo pacote
                    v_packetrecv = this.Recv(p_endpoint);

                    // se a sequencia estah errada, entao precisa tratar um erro
                    // if (v_packet.v_sequence != v_sequence)

                    // se o numero de pacotes estah errado, entao precisa tratar um erro
                    // if (v_packet.v_numpackets != v_numpackets)

                    v_row    = v_table.NewRow();
                    v_fields = v_packetrecv.GetString().Split(';');

                    if (v_fields.Length != v_table.Columns.Count)
                    {
                        throw new SpartacusMin.Net.Exception("Numero de colunas diferente na linha " + v_sequence.ToString() + ". " + v_table.Columns.Count.ToString() + " x " + v_fields.Length.ToString() + ".");
                    }

                    for (k = 0; k < v_table.Columns.Count; k++)
                    {
                        v_row[k] = v_fields[k];
                    }

                    v_table.Rows.Add(v_row);

                    // enviando ack
                    v_packetsend = new SpartacusMin.Net.Packet(SpartacusMin.Net.PacketType.ACK, v_sequence, v_numpackets, "");
                    this.Send(p_endpoint, v_packetsend);

                    v_sequence++;
                }

                return(v_table);
            }
            catch (SpartacusMin.Net.Exception e)
            {
                throw e;
            }
            catch (System.Exception e)
            {
                throw new SpartacusMin.Net.Exception(e);
            }
        }