예제 #1
0
        public static PozoMessage Parse(String str, DAOFactory daoFactory)
        {
            var pozoMessage = new PozoMessage();

            var msg    = str.Split('*');
            var center = msg[0];

            var dataFields = msg[1].Split('@');

            foreach (var d in dataFields)
            {
                var parameters = d.Split('|');
                var id         = parameters[ID].TrimStart('D');
                var type       = parameters[ID].Equals("T") ? "T" : parameters[TIPO];
                var dataIndex  = (parameters[ALIAS_O_FIRM].Equals(V1_0_0_2) || parameters[ALIAS_O_FIRM].Equals(V1_0_0_3) || parameters[ALIAS_O_FIRM].Equals(V1_0)) ? DATA - 1 : DATA;
                var dataString = parameters[dataIndex];
                var data       = dataString.Split(';');
                var alias      = parameters[ALIAS_O_FIRM];

                switch (type)
                {
                case Motor:
                {
                    var m = Parser.ProcessMotor(daoFactory,
                                                center,
                                                id,
                                                alias,
                                                Convert.ToDouble(data[M_VOLUMEN]),
                                                DateTime.Now,
                                                Convert.ToDouble(data[M_CAUDAL]),
                                                Convert.ToDouble(data[M_HS_EN_MARCHA]),
                                                Convert.ToDouble(data[M_TEMP]),
                                                Convert.ToDouble(data[M_RPM]),
                                                data[M_ENTRIES],
                                                data[M_EVENTS]);
                    if (m != null)
                    {
                        pozoMessage.addMovimiento(m);
                    }
                    break;
                }

                case Medidor:
                {
                    var v = Parser.ProcessMedidor(daoFactory,
                                                  center,
                                                  id,
                                                  alias,
                                                  Convert.ToDouble(data[V_VOLUMEN_NETO]),
                                                  "Ingreso",
                                                  DateTime.Now,
                                                  data[V_EVENTS]);
                    if (v != null)
                    {
                        pozoMessage.addMovimiento(v);
                    }
                    break;
                }

                case Tanque:
                {
                    var tankCode = parameters[1];
                    var t        = Parser.ProcessTanque(daoFactory,
                                                        center,
                                                        tankCode,
                                                        alias,
                                                        Convert.ToDouble(data[T_VOLUMEN_BRUTO]),
                                                        Convert.ToDouble(data[T_VOLUMEN_AGUA]),
                                                        DateTime.Now,
                                                        data[T_EVENTS]);
                    if (t != null)
                    {
                        pozoMessage.addHistoricalVolume(t);
                    }
                    break;
                }
                }
            }
            return(pozoMessage);
        }
예제 #2
0
        public PozoMessage Parse(String str, DAOFactory daoFactory)
        {
            var pozoMessage = new PozoMessage();

            var msg    = str.Split('*');
            var center = msg[0];

            var dataFields = msg[1].Split('@');

            foreach (var parameters in dataFields.Select(d => d.Split('|')))
            {
                if (parameters[Tipomsg].TrimStart('D').Equals("E"))
                {
                    return(pozoMessage);
                }

                var type = parameters[Id].Equals("T") ? "T" : parameters[Tipo];

                switch (type)
                {
                case Motor:
                {
                    var m = Parser.ProcessMotor(daoFactory,
                                                center,
                                                parameters[Id],
                                                parameters[Alias],
                                                Convert.ToDouble(parameters[MVolumen]),
                                                Convert.ToDateTime(parameters[MFecha]),
                                                Convert.ToDouble(parameters[MCaudal]),
                                                Convert.ToDouble(parameters[MHsEnMarcha]),
                                                Convert.ToDouble(parameters[MTemperatura]),
                                                Convert.ToDouble(parameters[MRpm]),
                                                parameters[MEntries],
                                                parameters[MEvents]);

                    if (m != null)
                    {
                        pozoMessage.addMovimientoLog(m);
                    }

                    break;
                }

                case Medidor:
                {
                    var v = Parser.ProcessMedidor(daoFactory,
                                                  center,
                                                  parameters[Id],
                                                  parameters[Alias],
                                                  Convert.ToDouble(parameters[VVolumen]),
                                                  "Ingreso",
                                                  Convert.ToDateTime(parameters[VFecha]),
                                                  parameters[VEvents]);

                    if (v != null)
                    {
                        pozoMessage.addMovimientoLog(v);
                    }

                    break;
                }

                case Tanque:
                {
                    var t = Parser.ProcessTanque(daoFactory,
                                                 center,
                                                 parameters[IdParameter],
                                                 parameters[Alias],
                                                 Convert.ToDouble(parameters[VolumenBrutoParameter]),
                                                 Convert.ToDouble(parameters[VolumenAguaParameter]),
                                                 Convert.ToDateTime(parameters[FechaParameter]),
                                                 parameters[EventsParameter]);

                    if (t != null)
                    {
                        pozoMessage.addHistoricalVolumeLog(t);
                    }

                    break;
                }

                default:
                {
                    STrace.Error(GetType().FullName, String.Format("Invalid formated message detected for a pozo: {0}", str));

                    break;
                }
                }
            }

            return(pozoMessage);
        }