/// <summary> /// Create event from line. /// </summary> /// <param name="line">string in the required format for this adapter.</param> /// <returns>Newly created interval event.</returns> private IntervalEvent CreateEventFromLine(string line) { string[] split = line.Split(new char[] { this.delimiter }, StringSplitOptions.None); if (this.bindtimeEventType.Fields.Count != (split.Length - NumNonPayloadFields)) { throw new InvalidOperationException("Number of payload columns in input file: " + (split.Length - NumNonPayloadFields) + " does not match number of fields in EventType: " + this.bindtimeEventType.Fields.Count); } // Request event memory allocation from engine. IntervalEvent intervalEvent = CreateInsertEvent(); // In case we just went into the stopping state. if (intervalEvent == null) { return(null); } // Set start and end times. intervalEvent.StartTime = DateTime.Parse(split[0], this.cultureInfo, DateTimeStyles.AssumeUniversal).ToUniversalTime(); intervalEvent.EndTime = DateTime.Parse(split[1], this.cultureInfo, DateTimeStyles.AssumeUniversal).ToUniversalTime(); // Populate the payload fields. for (int ordinal = 0; ordinal < this.bindtimeEventType.FieldsByOrdinal.Count; ordinal++) { try { int cepOrdinal = this.inputOrdinalToCepOrdinal[ordinal]; CepEventTypeField evtField = this.bindtimeEventType.FieldsByOrdinal[cepOrdinal]; object value; if (evtField.Type.ClrType.FullName == "System.Byte[]") { System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); value = encoding.GetBytes(split[ordinal + NumNonPayloadFields]); } else { Type t = Nullable.GetUnderlyingType(evtField.Type.ClrType) ?? evtField.Type.ClrType; value = Convert.ChangeType(split[ordinal + NumNonPayloadFields], t, this.cultureInfo); } intervalEvent.SetField(cepOrdinal, value); } catch (AdapterException e) { this.consoleTracer.WriteLine(e.Message + e.StackTrace); } } return(intervalEvent); }