public List <SiusDataMessage> Parse(string source) { List <SiusDataMessage> messages = new List <SiusDataMessage>(); string[] stringList = source.Split(new[] { "\r\n" }, StringSplitOptions.None); if (stringList.Length > 0) { foreach (string s in stringList) { string[] values = s.Split(new[] { ';' }, StringSplitOptions.None); if (values.Length > 1) { string key = values[0]; List <string> valueList = Enumerable.Range(1, values.Length - 1).Select(_ => values[_]).ToList(); RawMessage rawMessage = new RawMessage { Identifier = key, Values = valueList }; foreach (IMessageParser parser in _messageParser) { SiusDataMessage message = parser.Parse(rawMessage); if (message != null) { messages.Add(message); } } } } } return(messages); }
public SiusDataMessage Parse(RawMessage rawMessage) { if (!rawMessage.IsResponsible(Identifier, ValueCount)) { return(null); } string[] valueList = rawMessage.Values.ToArray(); SuccessHelper allOverSuccess = new SuccessHelper(); int laneId = ValueAccessHelper.GetInt(valueList, LaneId, allOverSuccess); int laneNumber = ValueAccessHelper.GetInt(valueList, LaneNumber, allOverSuccess); int shooterId = ValueAccessHelper.GetInt(valueList, ShooterId, allOverSuccess); DateTime timstamp = ValueAccessHelper.GetDateTime(valueList, DateTime, allOverSuccess); int shotType = ValueAccessHelper.GetInt(valueList, ShotType, allOverSuccess); decimal primaryScore = ValueAccessHelper.GetDecimal(valueList, PrimaryScore, allOverSuccess); decimal secondaryScore = ValueAccessHelper.GetDecimal(valueList, SecondaryScore, allOverSuccess); int shotNbr = ValueAccessHelper.GetInt(valueList, ShotNbr, allOverSuccess); //float x = ValueAccessHelper.GetFloat(valueList, X, allOverSuccess); //float y = ValueAccessHelper.GetFloat(valueList, Y, allOverSuccess); int programNumber = ValueAccessHelper.GetInt(valueList, ProgramNumber, allOverSuccess); if (!allOverSuccess.Success) { return(null); } SiusDataMessage message = null; switch (shotType) { case 2: message = _messageFactory.MakeBestShotMessage(shooterId, laneId, laneNumber, timstamp, primaryScore, secondaryScore, shotNbr, programNumber); break; case 3: message = _messageFactory.MakeShotMessage(shooterId, laneId, laneNumber, timstamp, primaryScore, secondaryScore, shotNbr, programNumber); break; } return(message); }