Example #1
0
        public override void WriteSyncJournal(SyncDatabase db, SyncJournalInfo JournalInfo)
        {
            if (IsTableExists("SYNC_JNL", db) && (JournalInfo.LocalReplicaCount > 1 || JournalInfo.RemoteReplicaCount > 1))
            {
                string sql = @"INSERT INTO SYNC_JNL (DAT, LOCAL_LINK_ID, REMOTE_LINK_ID, TIME_START, TIME_END, LOGTEXT, SUCCESS, LOCAL_REPLICA_COUNT, REMOTE_REPLICA_COUNT) 
VALUES (@DAT, @LOCAL_LINK_ID, @REMOTE_LINK_ID, @TIME_START, @TIME_END, @LOGTEXT, @SUCCESS,  @LOCAL_REPLICA_COUNT, @REMOTE_REPLICA_COUNT)";

                FbCommand cmd = db.CreateCommand() as FbCommand;
                cmd.CommandText = sql;
                cmd.Parameters.Add("@DAT", FbDbType.Date).Value                     = JournalInfo.Date;
                cmd.Parameters.Add("@LOCAL_LINK_ID", FbDbType.Date).Value           = JournalInfo.LocalLinkId;
                cmd.Parameters.Add("@REMOTE_LINK_ID", FbDbType.Date).Value          = JournalInfo.RemoteLinkId;
                cmd.Parameters.Add("@TIME_START", FbDbType.Date).Value              = JournalInfo.TimeStart;
                cmd.Parameters.Add("@TIME_END", FbDbType.Date).Value                = JournalInfo.TimeEnd;
                cmd.Parameters.Add("@LOGTEXT", FbDbType.Date).Value                 = JournalInfo.LogMessages;
                cmd.Parameters.Add("@SUCCESS", FbDbType.SmallInt).Value             = JournalInfo.Success ? 1 : 0;
                cmd.Parameters.Add("@LOCAL_REPLICA_COUNT", FbDbType.Integer).Value  = JournalInfo.LocalReplicaCount;
                cmd.Parameters.Add("@REMOTE_REPLICA_COUNT", FbDbType.Integer).Value = JournalInfo.RemoteReplicaCount;
                cmd.ExecuteNonQuery();
            }
        }
Example #2
0
 public abstract void WriteSyncJournal(SyncDatabase db, SyncJournalInfo JournalInfo);
Example #3
0
        public bool Execute()
        {
            bool result = false;

            jnl              = new SyncJournalInfo();
            jnl.Date         = DateTime.Today;
            jnl.TimeStart    = DateTime.Now;
            jnl.LocalLinkId  = _LocalToRemoteLinkId;
            jnl.RemoteLinkId = _RemoteToLocalLinkId;
            jnl.Success      = true;

            _BeginStoreLogMessages();
            try
            {
                if (log.IsDebugEnabled)
                {
                    log.Debug("Execute:begin");
                }
                log.Info("-- начало синхронизации --------------");

                try
                {
                    try
                    {
                        Validate();
                        Connect();
                        try
                        {
                            if (_Order == SyncAgentOrder.RemoteLocal)
                            {
                                SyncRemoteFromLocal();
                                if (RemoteToLocalLinkId != 0)
                                {
                                    SyncLocalFromRemote();
                                }
                            }
                            else if (_Order == SyncAgentOrder.LocalRemote)
                            {
                                if (RemoteToLocalLinkId != 0)
                                {
                                    SyncLocalFromRemote();
                                }
                                SyncRemoteFromLocal();
                            }
                        }
                        finally
                        {
                            try
                            {
                                Disconnect();
                            }
                            catch
                            {
                                // если дисконнет не удался, то скорей всего связь уже прервана
                            }
                            //throw;
                        }

                        result = true;
                    }
                    catch (Exception ex)
                    {
                        log.Error(string.Format(
                                      "Ошибка при работе агента синхронизации:\r\nСостояние: {0}\r\nОшибка: {0}",
                                      State, ex.Message), ex);
                        StateChange(SyncState.Inactive);
                        result = false;
                    }
                }
                finally
                {
                    StateChange(SyncState.Inactive);
                }

                log.Info("-- конец синхронизации --------------");
                if (log.IsDebugEnabled)
                {
                    log.Debug("Execute:end");
                }
            }
            finally
            {
            }

            return(result);
        }