private static C8Tuple GetRow(C8xSchema schema, string buff) { var fields = buff.Split(','); if (fields.Length != schema.Count + 1 ) { throw new ArgumentException("Column count error"); } var msgTimeStamp = Epoch.AddTicks(long.Parse(fields[0]) * 10).ToLocalTime(); var row = new C8Tuple(schema,msgTimeStamp); for (int ii = 0; ii < schema.Count; ii++) { var t = schema.ColumnTypes[ii]; string item = fields[ii+1]; // one extra for Timestamp that we skip here object val = item; if (t == typeof(DateTime)) { val = Epoch.AddTicks(long.Parse(item) * 10).ToLocalTime(); } else if (t == typeof(bool)) { val = bool.Parse(item); } else if (t == typeof(int)) { val = int.Parse(item); } else if (t == typeof(double)) { val = double.Parse(item); } else if (t == typeof(long)) { val = long.Parse(item); } row[ii] = val; } return row; }
public C8xSchema GetTD(string streamUrl) { var resp = GetSOAPResponse("GetTD", string.Format("<uri>{0}</uri>", streamUrl)); resp = resp.Replace(@"xsi:type=""", @"C8Type="""); var tdesc = TupleDescriptor.Deserialize(resp); int ii = 0; var schema = new C8xSchema(); schema.ColumnNames = tdesc.Field.Select(f => f.Name).ToArray(); schema.ColumnPositionMap = tdesc.Field.ToDictionary(f => f.Name, f => ii++); schema.ColumnTypes = tdesc.Field.Select(f=>ConvertC8StringTypeToCLRType(f.C8Type)).ToArray(); return schema; }