private EksternDeltakerPosisjon TilEksternDeltakerPosisjon(DeltakerPosisjon posisjon) { return new EksternDeltakerPosisjon { DeltakerId = posisjon.DeltakerId, LagId = posisjon.LagId, Latitude = posisjon.Latitude, Longitude = posisjon.Longitude, Tidspunkt = posisjon.Tidspunkt }; }
private void LagrePosisjonTilDatabasen(DeltakerPosisjon posisjon) { if (LagretPosisjon.ContainsKey(posisjon.DeltakerId) && ErForKortEllerHyppig(LagretPosisjon[posisjon.DeltakerId], posisjon)) return; // Oppdater før skriving til databasen - eventual consistent, men strammer inn muligheten for å smette forbi under lagring LagretPosisjon[posisjon.DeltakerId] = TilEksternDeltakerPosisjon(posisjon); Lagre(posisjon); }
private bool ErForKortEllerHyppig(EksternDeltakerPosisjon forrige, DeltakerPosisjon posisjon) { var avstandIMeter = DistanseKalkulator.MeterMellom(forrige.Latitude, forrige.Longitude, posisjon.Latitude, posisjon.Longitude); var avstandISekunder = posisjon.Tidspunkt.Subtract(forrige.Tidspunkt).TotalSeconds; if (avstandISekunder < _appSettings.MinstTidMellomPosisjoner) return true; return avstandIMeter < _appSettings.MinstAvstandMellomPosisjoner; }
protected virtual void Lagre(DeltakerPosisjon posisjon) { using (var context = _dataContextFactory.Create()) { context.DeltakerPosisjoner.Add(posisjon); context.SaveChanges(); } }
public DeltakerPosisjon RegistrerPosisjon(string lagId, string deltakerId, double latitude, double longitude) { var deltakerPosisjon = new DeltakerPosisjon { DeltakerId = deltakerId, LagId = lagId, Latitude = latitude, Longitude = longitude, Tidspunkt = TimeService.Now }; LagrePosisjonTilDatabasen(deltakerPosisjon); GjeldendePosisjon[deltakerId] = TilEksternDeltakerPosisjon(deltakerPosisjon); return deltakerPosisjon; }
protected override void Lagre(DeltakerPosisjon posisjon) { }