Beispiel #1
0
 /// <summary>Update pois information retrived by the provider.</summary>
 protected void UpdateSites(IEnumerable<SiteInfo> sites, IEnumerable<Operator> operators) {
    var msg = new UpdateGridSites();
    msg.Sites.AddRange(sites);
    msg.Operators.AddRange(operators);
    Services.Invoke(msg);
 }
Beispiel #2
0
      internal void Handle(UpdateGridSites input) {
         Log.Trace("Processing {0} OPCOs", input.Operators.Count);

         if (input.Operators.Count == 0) {
            Log.Trace("No OPCOs to process, exiting");
            Reply(true);
            return;
         }

         Log.Trace("Store {0} public sites", input.Sites.Count);
         using (var dbConn = DatabaseManager.DbConn()) {
            var dbSites = new List<SiteInfo>();

            foreach (var op in input.Operators) {
               dbSites.AddRange(dbConn.ExecuteBpl(new SiteGetByOwnerId { OwnerId = op.Id }));
            }

            var toUpdate = new List<SiteInfo>();

            var toAdd = new List<SiteInfo>();
            toAdd.AddRange(input.Sites);

            var toDelete = new List<SiteInfo>();
            toDelete.AddRange(dbSites);

            foreach (var iSite in input.Sites) {
               foreach (var dSite in dbSites) {
                  if (iSite.SiteId == dSite.SiteId) {
                     toAdd.Remove(iSite);
                     toDelete.Remove(dSite);

                     var iWriter = new BplBinaryWriter();
                     iWriter.Serialize(iSite);
                     var iBytes = iWriter.ToByteArray();

                     var dWriter = new BplBinaryWriter();
                     dWriter.Serialize(dSite);
                     var dBytes = dWriter.ToByteArray();

                     if (iBytes.Length != dBytes.Length) {
                        toUpdate.Add(iSite);
                     } else {
                        for (var i = 0; i < iBytes.Length; i++) {
                           if (iBytes[i] != dBytes[i]) {
                              toUpdate.Add(iSite);
                              break;
                           }
                        }
                     }

                     break;
                  }
               }
            }

            dbConn.BeginTransaction(this);

            foreach (var s in toUpdate) {
               dbConn.ExecuteBpl(new SiteSave { i = s });
            }

            foreach (var s in toAdd) {
               dbConn.ExecuteBpl(new SiteSave { i = s });
               dbConn.ExecuteBpl(new SiteOwnerAdd { SiteId = s.SiteId, OwnerId = s.Operator.Id });
            }

            foreach (var s in toDelete) {
               dbConn.ExecuteBpl(new SiteDeleteBySiteIdOwnerId { SiteId = s.SiteId, OwnerId = s.Operator.Id });
            }

            dbConn.CommitTransaction();
         }

         Reply(true);
      }