diff --git a/OliviaAddInPro.csproj b/OliviaAddInPro.csproj
index e12cb60..4cd03c5 100644
--- a/OliviaAddInPro.csproj
+++ b/OliviaAddInPro.csproj
@@ -155,6 +155,7 @@
+
diff --git a/Services/EjecServ.cs b/Services/EjecServ.cs
index c257dc1..05c7aaa 100644
--- a/Services/EjecServ.cs
+++ b/Services/EjecServ.cs
@@ -145,7 +145,7 @@ namespace OliviaAddInPro.Services
return null;
}
cps.Value = 30;
-
+
//prepara el filtro con consulta y espacial
SpatialQueryFilter filtro = CreaFiltro(com.ConsultaAmbs, geomAux);
diff --git a/Services/ProcesoEjecServ.cs b/Services/ProcesoEjecServ.cs
new file mode 100644
index 0000000..ea0c1a2
--- /dev/null
+++ b/Services/ProcesoEjecServ.cs
@@ -0,0 +1,201 @@
+using ArcGIS.Desktop.Framework.Threading.Tasks;
+using OliviaAddIn;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace OliviaAddInPro.Services
+{
+ class ProcesoEjecServ
+ {
+ Cstr_socket soc = null;
+ int m_out;
+ int m_miliseconds;
+ int m_tm_progr;
+ int modo_fin = 0;
+ bool cancela = false;
+ bool cancela_fin = false;
+ bool conectado = false;
+ bool permu = false;
+ bool cancela_permu = false;
+ int progr = 0;
+ string args = "";
+ string str_cfg = "";
+ string tarea = "";
+ public string err_str = "";
+ double x, y;
+ CancelableProgressorSource cps;
+ enum TiposActu
+ {
+ ActuMal,
+ ActuNoActu,
+ ActuBien,
+ ActuPermu,
+ ActuMulti,
+ ActuFinOk,
+ ActuSect,
+ ActuPlan,
+ ActuFinNOk,
+ ActuN,
+ }
+
+
+ public ProcesoEjecServ()
+ {
+
+ }
+ public void start(string cfg, CancelableProgressorSource cps)
+ {
+ this.cps = cps;
+ soc = new Cstr_socket();
+
+ str_cfg = cfg;
+ /*
+ await ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() =>
+ {
+ run();
+ };*/
+ run();
+ }
+ private void run()
+ {
+ int nint = 0;
+ int nint_max = 10;
+ bool sal = false;
+ bool first_send_cfg = true;
+ bool fin = false;
+ int lastprog = 0;
+ TiposActu pp;
+ try
+ {
+ do
+ {
+ Thread.Sleep(m_miliseconds);
+
+ if (first_send_cfg)//a continuación envía la configuración
+ {
+ Thread.Sleep(500);
+ if (!envia_cfg())
+ {
+ if (nint >= nint_max)
+ {
+ err_str = "Error en la comunicación con OliviaTask";
+ actualiza(TiposActu.ActuMal);
+ }
+ else
+ nint++;
+ }
+ else
+ first_send_cfg = false;
+ }
+
+ if (Interlocked.Equals(m_out, 1)) //mira a ver si ha cancelado el usuario
+ {
+ //se ha cancelado, lo envía al OliviaTask
+ envia_cancel();
+ if (!cancela_permu)
+ sal = true;
+ else
+ {
+ Interlocked.Exchange(ref m_out, (int)0);
+ cancela_permu = false;
+ }
+ }
+ else if (!first_send_cfg && ((Math.Abs(Environment.TickCount) - lastprog) >= m_tm_progr) && !fin) //en caso normal, todo va bien, pide el progreso y la tarea
+ {
+ //solo pide la programación cada m_tm_progr milis
+ pp = pide_progr();
+ if (pp > TiposActu.ActuFinOk)
+ fin = true;
+ actualiza(pp);
+ lastprog = Environment.TickCount;
+ }
+
+ } while (!sal);
+
+ //manda cerrar la ventana porque ha terminado
+ cierra();
+ }
+ catch (Exception)
+ {
+ //MessageBox.Show("Error durante el proceso.", "Olivia", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+ }
+ //funciones auxiliares----------------------------------------
+ private void cierra()
+ {
+
+ }
+ /**
+ * Envía la información de la configuración por socket a OliviaTask
+ */
+ public bool envia_cfg()
+ {
+ return false;
+ }
+ /**
+ * Pide por socket la información de sectorización a OliviaTask
+ */
+ private bool pide_sect()
+ {
+ return false;
+ }
+ /**
+ * Pide por socket la información de progreso a OliviaTask
+ * Devuelve 0 si ha ido mal, 1 si ha ido bien, 2 si ha recibido que hay que pedir sectorización
+ */
+ private TiposActu pide_progr()
+ {
+ return TiposActu.ActuMal;
+ }
+ /**
+ * Envía a OliviaTask la orden de cancelar el proceso
+ */
+ private bool envia_cancel()
+ {
+ return false;
+ }
+ /**
+ * Actualiza la barra de progreso
+ * bool fallo_soc : indica si ha habido fallo en el socket
+ */
+ private void actualiza(TiposActu actu)
+ {
+ }
+ /*
+ * Para poder actualizar el texto de la ventana de progreso hay que llamar a invoke
+ * porque está desde otro thread
+ */
+ private void pon_texto(String txt)
+ {
+ }
+ /*
+ * Para poder actualizar la barra de progreso hay que llamar a invoke
+ * porque está desde otro thread
+ * Actualiza el tipo de progreso y el texto
+ */
+ private void pon_estilo()
+ {
+ }
+ /*
+ * Para poder actualizar la barra de progreso hay que llamar a invoke
+ * porque está desde otro thread
+ * Actualiza el estilo para indicar que ha habido error
+ */
+ private void pon_barstate(TiposActu actu)
+ {
+ }
+ /*
+ * Para poder actualizar la barra de progreso hay que llamar a invoke
+ * porque está desde otro thread
+ * Actualiza el progreso
+ */
+ private void pon_progr(int pro)
+ {
+ }
+ }
+}
\ No newline at end of file