JOBS
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BbWcfHelper
{
public class Jobs
{
#region declaraciones tramas por segundo
static OperationsDB operacionesdb= new OperationsDB();
Methods methods = new Methods();
List<DataTable> lista = new List<DataTable>();
DataTable dt_retorno = new DataTable();
DataSet ds_retorno = new DataSet();
static int Id_componente;
static string Hora_inicio;
static string Fecha;
static string Hora_fin;
static int Tipo_tramsaccion;
static int Tramas;
public static int Posicion_actual_lista = 0;
#endregion
#region metodos trama por segundo
public Jobs(int id_componente, string fecha, string hora_inicio, string hora_fin, int tipo_tramsaccion, int tramas)
{
Id_componente = id_componente;
Fecha = fecha;
Hora_inicio = hora_inicio;
Hora_fin = hora_fin;
Tipo_tramsaccion = tipo_tramsaccion;
Tramas = tramas;
}
public Jobs()
{ }
public void procesa_cargas_tramas_por_segundo(int cantidad_tramas)
{
lock (this)
{
operacionesdb.CopiarTramasATramasEnvioTemp(Id_componente, Fecha, Hora_inicio, Hora_fin, Tipo_tramsaccion, Tramas);
if (methods.contar_paquetes_disponibles(ref lista) <= 2)
{
methods.llena_lista_tramas_por_segundo(ref lista,cantidad_tramas);
}
else if (methods.contar_paquetes_null(ref lista) > 5)//6000)
{
methods.remueve_null_lista(ref lista);
}
}
}
public DataSet retorna_paquete_Trams_Seg(int cantidad_tramas)
{
ds_retorno.Tables.Clear();
dt_retorno.Rows.Clear();
dt_retorno = lista[Posicion_actual_lista].Copy();
ds_retorno.Tables.Add(dt_retorno);
lista[Posicion_actual_lista] = null;
Posicion_actual_lista++;
Task tarea = new Task(() => procesa_cargas_tramas_por_segundo(cantidad_tramas));
tarea.Start();
return ds_retorno;
}
public void procesa_cargas_simulacion_dia()
{
lock (this)
{
operacionesdb.CopiarTramasATramasEnvioTemp(Id_componente, Fecha, Hora_inicio, Hora_fin, Tipo_tramsaccion, Tramas);
if (methods.contar_paquetes_disponibles(ref lista) <= 120)
{
methods.llena_lista_simulacion_dia(ref lista);
}
else if (methods.contar_paquetes_null(ref lista) > 1000)//6000)
{
methods.remueve_null_lista(ref lista);
}
}
}
public DataSet retorna_paquete_Sim_Dia()
{
DataSet ds_temp = new DataSet();
int limite = Posicion_actual_lista;
for (int i = Posicion_actual_lista; i < limite + 60; i++)
{
ds_temp.Tables.Add(lista[i]);
Posicion_actual_lista++;
lista[i] = null;
}
Task tarea = new Task(() => procesa_cargas_simulacion_dia());
tarea.Start();
return ds_temp;
}
#endregion
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
METHODS
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BbWcfHelper
{
class Methods
{
OperationsDB operationsdb = new OperationsDB();
DataTable dt_segundos;
//Metodo que llena la lista de tabla de tramas cada cierto tiempo
public void llena_lista_tramas_por_segundo(ref List<DataTable> lista,int cantidad_tramas )
{
DataTable dt_consulta = new DataTable();
DataTable dt_nueva = new DataTable();
for (int c = 0; c < 4; c++)
{
dt_consulta = operationsdb.ConsultaTramasEnvioTemp(cantidad_tramas);
dt_nueva = dt_consulta.Clone();
dt_nueva = dt_consulta;
if (dt_consulta.Rows.Count > 0)
{
lista.Add(dt_nueva);
dt_nueva.Dispose();
dt_nueva = new DataTable();
dt_nueva = dt_consulta.Clone();
}
}
dt_consulta.Dispose();
dt_nueva.Dispose();
}
public int contar_paquetes_disponibles(ref List<DataTable> lista)
{
int cont = 0;
for (int i = 0; i < lista.Count; i++)
{
cont = (lista[i] != null) ? cont += 1 : cont;
}
return cont;
}
public int contar_paquetes_null(ref List<DataTable> lista)
{
int cont = 0;
for (int i = 0; i < lista.Count; i++)
{
cont = (lista[i] == null) ? cont += 1 : cont;
}
return cont;
}
public void llena_lista_simulacion_dia(ref List<DataTable> lista)
{
DataTable dt_consulta = new DataTable();
DataRow row;
dt_consulta = operationsdb.ConsultaTramasEnvioTemp(2000);
dt_segundos = dt_consulta.Clone();
//verifica que la consulta contenga datos
if (dt_consulta.Rows.Count > 0)
{
string segundos = dt_consulta.Rows[0]["hora_envio_log"].ToString();
//recorre la tabla minuto, que se consulto
for (int i = 0; i <= dt_consulta.Rows.Count; i++)
{
if (i < dt_consulta.Rows.Count)
if (segundos == dt_consulta.Rows[i]["hora_envio_log"].ToString())
{
row = dt_segundos.NewRow();
row[0] = dt_consulta.Rows[i]["id"].ToString();
row[1] = dt_consulta.Rows[i]["trama"].ToString();
row[2] = dt_consulta.Rows[i]["hora_envio_log"].ToString();
row[3] = dt_consulta.Rows[i]["id_componente"].ToString();
dt_segundos.Rows.Add(row);
}
else
{
segundos = dt_consulta.Rows[i]["hora_envio_log"].ToString();
lista.Add(dt_segundos);
dt_segundos.Dispose();
crea_estructura_tabla();
i--;
}
else
{
lista.Add(dt_segundos);
dt_segundos.Dispose();
crea_estructura_tabla();
}
}
dt_consulta.Rows.Clear();
}
else
{
//no se encontro datos
}
dt_consulta.Dispose();
}
public void crea_estructura_tabla()
{
dt_segundos = new DataTable();
dt_segundos.Columns.Add("id");
dt_segundos.Columns.Add("trama");
dt_segundos.Columns.Add("hora");
dt_segundos.Columns.Add("id_componente");
}
public void remueve_null_lista(ref List<DataTable> lista)
{
for (int i = 0; i < lista.Count;i++ )
{
if (lista[i] == null)
{
lista.RemoveAt(i);
i--;
}
}
Jobs.Posicion_actual_lista = 0;
}
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
OPERATIONDB
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BbWcfHelper
{
public class OperationsDB
{
//copia las tablas a la tramas envío temporal
public void CopiarTramasATramasEnvioTemp(int id_componente, string fecha, string hora_inicio, string hora_fin, int tipo_tramsaccion, int tramas)
{
//GeneralConnection.Conexion conexion = new GeneralConnection.Conexion(ConfigurationManager.AppSettings["conexiondb"]);
//try
//{
// SqlCommand com = new SqlCommand("SPBGCopiaTramasATramasEnvioTempOrg", conexion.iniciar());
// com.Parameters.AddWithValue("@componente", id_componente);
// com.Parameters.AddWithValue("@fecha_simular", fecha);
// com.Parameters.AddWithValue("@hora_inicio", hora_inicio);
// com.Parameters.AddWithValue("@hora_fin", hora_fin);
// com.Parameters.AddWithValue("@tipo_transaccion", tipo_tramsaccion);
// com.Parameters.AddWithValue("@tramas", tramas);
// com.CommandType = CommandType.StoredProcedure;
// com.ExecuteNonQuery();
//}
//catch (Exception ex)
//{
//}
//finally
//{
// conexion.cerrar_conexion();
//}
GeneralConnection.Conexion conexion = new GeneralConnection.Conexion(ConfigurationManager.AppSettings["conexiondb"]);
try
{
SqlCommand com = new SqlCommand("copia", conexion.iniciar());
com.Parameters.AddWithValue("@cant", 9000);
com.CommandType = CommandType.StoredProcedure;
com.ExecuteNonQuery();
}
catch (Exception ex)
{
}
finally
{
conexion.cerrar_conexion();
}
}
//Método que realiza la consulta de ciertas tramas, para procesarlas por segundos además las tramas que trae las marca como enviadas='E'
public DataTable ConsultaTramasEnvioTemp(int Tramas)
{
//GeneralConnection.Conexion conexion = new GeneralConnection.Conexion(ConfigurationManager.AppSettings["conexiondb"]);
//DataSet ds = new DataSet();
//try
//{
// SqlCommand com = new SqlCommand("SPBGConsultaTramasEnvioTempOrg", conexion.iniciar());
// com.Parameters.AddWithValue("@Tramas", Tramas);
// com.CommandType = CommandType.StoredProcedure;
// SqlDataAdapter adaptador = new SqlDataAdapter(com);
// adaptador.Fill(ds);
//}
//catch (Exception ex)
//{
//}
//finally
//{
// conexion.cerrar_conexion();
//}
//return ds.Tables[0];
GeneralConnection.Conexion conexion = new GeneralConnection.Conexion(ConfigurationManager.AppSettings["conexiondb"]);
DataSet ds = new DataSet();
try
{
SqlCommand com = new SqlCommand("consulta", conexion.iniciar());
com.Parameters.AddWithValue("@cant", Tramas);
com.CommandType = CommandType.StoredProcedure;
SqlDataAdapter adaptador = new SqlDataAdapter(com);
adaptador.Fill(ds);
}
catch (Exception ex)
{
}
finally
{
conexion.cerrar_conexion();
}
return ds.Tables[0];
//DataTable dt = new DataTable();
//dt.Columns.Add("columna1");
//for (int i = 0; i < 200; i++)
//{
// DataRow dr = dt.NewRow();
// dr[0] = "holatttt:" + i.ToString();
// dt.Rows.Add(dr);
//}
//DataTable dt = new DataTable();
//dt.Columns.Add("id");
//dt.Columns.Add("trama");
//dt.Columns.Add("hora_envio_log");
//dt.Columns.Add("id_componente");
//for (int i = 0; i < 3000; i++)
//{
// DataRow dr = dt.NewRow();
// dr[0] = "holatttt:" + i.ToString();
// dr[1] = "fffffff:" + i.ToString();
// if (i < 1500)
// {
// dr[2] = "00:00:01" + i.ToString();
// }
// else
// {
// dr[2] = "00:00:02" + i.ToString();
// }
// dr[3] = "hhhh:" + i.ToString();
// dt.Rows.Add(dr);
//}
//return dt;
}
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
HELPER SERVICE
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using BbWcfHelper;
using System.Data;
namespace WCFHelper
{
public class HelperService : IHelperService
{
static Jobs jobs;
public bool Iniciar_Proceso_Consulta_Trams_Seg(int id_componente, string fecha, string hora_inicio, string hora_fin, int tipo_tramsaccion, int tramas)
{
jobs = new Jobs(id_componente, fecha, hora_inicio, hora_fin, tipo_tramsaccion, tramas);
OperationsDB operacionesdb = new OperationsDB();
operacionesdb.CopiarTramasATramasEnvioTemp(id_componente, fecha, hora_inicio, hora_fin, tipo_tramsaccion, tramas);
jobs.procesa_cargas_tramas_por_segundo(200);
return true;
}
public DataSet Obtener_Paquete_Trams_Seg(int cantidad_tramas)
{
return jobs.retorna_paquete_Trams_Seg(cantidad_tramas);
}
public bool Iniciar_Proceso_Consulta_Sim_Dia(int id_componente, string fecha, string hora_inicio, string hora_fin, int tipo_tramsaccion, int tramas)
{
jobs = new Jobs(id_componente, fecha, hora_inicio, hora_fin, tipo_tramsaccion, tramas);
OperationsDB operacionesdb = new OperationsDB();
operacionesdb.CopiarTramasATramasEnvioTemp(id_componente, fecha, hora_inicio, hora_fin, tipo_tramsaccion, tramas);
jobs.procesa_cargas_simulacion_dia();
return true;
}
public DataSet Obtener_Paquete_Sim_Dia()
{
return jobs.retorna_paquete_Sim_Dia();
}
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
IHELPER SERVICE
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace WCFHelper
{
[ServiceContract]
public interface IHelperService
{
[OperationContract]
bool Iniciar_Proceso_Consulta_Trams_Seg(int id_componente, string fecha, string hora_inicio, string hora_fin, int tipo_tramsaccion, int tramas);
[OperationContract]
DataSet Obtener_Paquete_Trams_Seg(int cantidad_tramas);
[OperationContract]
bool Iniciar_Proceso_Consulta_Sim_Dia(int id_componente, string fecha, string hora_inicio, string hora_fin, int tipo_tramsaccion, int tramas);
[OperationContract]
DataSet Obtener_Paquete_Sim_Dia();
}
}