Ejemplo n.º 1
0
 public SyncAgent()
 {
     _State         = SyncState.Inactive;
     _LocalFilters  = new SyncLinkFilterList();
     _RemoteFilters = new SyncLinkFilterList();
 }
Ejemplo n.º 2
0
        // - - - - - - - - - - - - - - - - - - - - - - - - - - -

        private void ExecuteSession(ISyncDatabase local, ISyncDatabase remote, SyncLink link, SyncLinkFilterList Filters)
        {
            log.InfoFormat("=== выполняется синхронизация", local.Name, remote.Name);
            // запуск сеанса
            local.StartSession(SessionMode.Read);

            // подготовка реплик
            SyncLogReplicaInfo replicaInfo = local.SourcePrepare(link);

            replicaLogItemsCount = replicaInfo.LogCount;

            if (replicaInfo.LogCount > 1)
            {
                SyncLogReplica replica = local.SourceGetNextReplica(replicaInfo, SourcePrepareOptions.None, Filters);

                remote.StartSession(SessionMode.Write);
                OnStageCompleted();
                SyncReplicaProcessResult result = remote.TargetProcessReplica(replica, TargetProcessOptions.None);
                OnStageCompleted();
                if (result.Success)
                {
                    remote.EndSession(true);
                    OnStageCompleted();
                    local.SourceCommitReplica(replicaInfo);
                }
                else
                {
                    log.ErrorFormat("обработка реплики прошла неудачно (возможно были ошибки) - транзакция не подтверджается");
                    jnl.Success = false;
                    remote.EndSession(false);
                    OnStageCompleted();
                    local.EndSession(false);
                    return;
                }
            }
            else
            {
                log.InfoFormat("нет данных журнала синхронизации", local.Name, remote.Name);
                remote.EndSession(true);
                OnStageCompleted();
            }

            local.EndSession(true);

            string local_messages  = local.GetLogMessages();
            string remote_messages = remote.GetLogMessages();

            logMessages.AppendLine("--- BEGIN LOCAL LOG MESSAGES ------------------------------------------------");
            logMessages.Append(local_messages);
            logMessages.AppendLine("--- END LOCAL LOG MESSAGES   ------------------------------------------------");

            logMessages.AppendLine("--- BEGIN REMOTE LOG MESSAGES -----------------------------------------------");
            logMessages.Append(remote_messages);
            logMessages.AppendLine("--- END REMOTE LOG MESSAGES   -----------------------------------------------");
        }