/// <summary> /// Stores observations in buffer and tries to upload buffer to server. /// </summary> /// <param name="observationId">Observation identifier.</param> /// <param name="observations">Array of observations.</param> /// <param name="uploadBuffer">True to upload buffer, False to bypass uploading.</param> /// <returns>True if uploading or buffering of observations was successful, false otherwise.</returns> public bool LogObservations(int observationId, Observation[] observations, bool uploadBuffer = true) { // Online, upload buffer and log package. if (uploadBuffer) { UploadSuccess = false; if (UploadBuffer()) { ObservationPackageBuilder bldr = new ObservationPackageBuilder(); IdentifiedObservations ios = new IdentifiedObservations() { ObservationId = observationId, Observations = observations }; bldr.Append(ios); if (base.LogObservations(bldr.GetAsObservationPackage())) { UploadSuccess = true; return(true); } } } // Offline, store new package to buffer. return(Store(observationId, observations)); }
private ObservationPackage GetBufferedObservations(out int maxId) { maxId = -1; ObservationPackageBuilder builder = new ObservationPackageBuilder(); using (LiteDatabase db = new LiteDatabase(_liteDBPathName)) { var col = db.GetCollection <BufferedObservation>(_OBSBUF_NAME); var records = col.Find(c => c.Uploaded == false).OrderBy(c => c.Id); IEnumerable <BufferedObservation> observations = null; if (UploadRowLimit > 0) { observations = records.Take(UploadRowLimit); } else { observations = records; } foreach (BufferedObservation bo in observations) { maxId = bo.Id; if (bo.Value != null) { Observation observation = null; switch ((DataType)(bo.DataType)) { case DataType.Boolean: observation = new BooleanObservation() { Timestamp = bo.Timestamp, Value = DataTypeStringConverter.ParseBooleanValue(bo.Value) }; break; case DataType.Double: observation = new DoubleObservation() { Timestamp = bo.Timestamp, Value = DataTypeStringConverter.ParseDoubleValue(bo.Value) }; break; case DataType.Integer: observation = new IntegerObservation() { Timestamp = bo.Timestamp, Value = DataTypeStringConverter.ParseIntegerValue(bo.Value) }; break; case DataType.Position: observation = new PositionObservation() { Timestamp = bo.Timestamp, Value = DataTypeStringConverter.ParsePositionValue(bo.Value) }; break; case DataType.String: observation = new StringObservation() { Timestamp = bo.Timestamp, Value = bo.Value }; break; case DataType.Statistics: observation = new StatisticsObservation() { Timestamp = bo.Timestamp, Value = DataTypeStringConverter.ParseStatisticsValue(bo.Value) }; break; default: throw new NotSupportedException("Unknown data type: " + bo.DataType.ToString()); } IdentifiedObservation io = new IdentifiedObservation() { ObservationId = bo.ObservationId, Observation = observation }; builder.Append(io); } } } return(builder.GetAsObservationPackage()); }