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); }
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); }