protected override void MessageReceived(object sender, Shared.Communication.Message message) { base.MessageReceived(sender, message); #if DEBUG Shared.EventLog.Debug("RepThread " + System.Reflection.MethodBase.GetCurrentMethod().Name); Shared.EventLog.Debug("RepThread " + message.Title + " " + message.Contents); #endif if (message.Type == Shared.Communication.MessageType.Command) { string[] client = message.Title.Split('@'); switch (client[0]) { case "REPLICATION_CLIENTS": message.Contents = String.Empty; foreach (KeyValuePair <string, ReplicationThread> kvp in _replicationThreads) { message.Contents += String.Format("{0}#", kvp.Value.DatabaseConnection.Name); } MessageSend(message, true); break; case "THREAD_USAGE": string Result = String.Empty; for (int i = 0; i < ThreadManager.ThreadCount; i++) { ThreadManager thread = ThreadManager.Get(i); Result += String.Format("{0}\r\n", thread.ToString()); } message.Contents = Result; MessageSend(message, true); break; case "REPLICATE": foreach (KeyValuePair <string, ReplicationThread> kvp in _replicationThreads) { if (client.Length > 1 && kvp.Value.DatabaseConnection.Name == client[1]) { kvp.Value.LastRunReplication = DateTime.Now.AddDays(-500); } } break; case "FORCE_BACKUP": foreach (KeyValuePair <string, ReplicationThread> kvp in _replicationThreads) { if (client.Length > 1 && kvp.Value.DatabaseConnection.Name == client[1]) { kvp.Value.DatabaseConnection.LastBackupAttempt = DateTime.Now.AddDays(-100).ToFileTimeUtc(); kvp.Value.DatabaseConnection.LastBackup = DateTime.Now.AddDays(-100).ToFileTimeUtc(); message.Contents = "Database Listed for Backup"; MessageSend(message, false); break; } } break; case "PREVENT": foreach (KeyValuePair <string, ReplicationThread> kvp in _replicationThreads) { if (client.Length > 1 && kvp.Value.DatabaseConnection.Name == client[1]) { kvp.Value.LastRunReplication = DateTime.Now.AddDays(500); break; } } break; case "REPLICATION_ENABLED": foreach (KeyValuePair <string, ReplicationThread> kvp in _replicationThreads) { if (client.Length > 1 && kvp.Value.DatabaseConnection.Name == client[1]) { bool replicationEnabled = kvp.Value.DatabaseConnection.ReplicationType == Engine.ReplicationType.Child && kvp.Value.DatabaseConnection.Enabled; message.Contents = replicationEnabled.ToString(); message.Type = Shared.Communication.MessageType.Acknowledge; MessageSend(message, false); break; } } break; case "ALLOWCONFIRMCOUNTS": //foreach (KeyValuePair<string, ReplicationThread> kvp in _replicationThreads) // kvp.Value._allowConfirmCounts = Convert.ToBoolean(message.Contents); break; case "ISREPLICATING": foreach (KeyValuePair <string, ReplicationThread> kvp in _replicationThreads) { if (client.Length > 1 && kvp.Value.DatabaseConnection.Name == client[1]) { message.Contents = kvp.Value.IsRunning.ToString(); message.Type = Shared.Communication.MessageType.Acknowledge; MessageSend(message, false); } } break; case "FORCEHARDCOUNT": foreach (KeyValuePair <string, ReplicationThread> kvp in _replicationThreads) { if (client.Length > 1 && kvp.Value.DatabaseConnection.Name == client[1]) { kvp.Value.ForceVerifyRecords = true; message.Contents = kvp.Value.ForceVerifyRecords.ToString(); message.Type = Shared.Communication.MessageType.Acknowledge; MessageSend(message, false); } } break; case "CANCELREPLICATION": foreach (KeyValuePair <string, ReplicationThread> kvp in _replicationThreads) { if (client.Length > 1 && kvp.Value.DatabaseConnection.Name == client[1]) { kvp.Value.CancelReplication(); } } break; case "VALIDATEDATABASES": //if (_replicationEngine != null) //{ // _replicationEngine.Validate = true; //} break; case "REPLICATION_RUNNING": foreach (KeyValuePair <string, ReplicationThread> kvp in _replicationThreads) { if (client.Length > 1 && kvp.Value.DatabaseConnection.Name == client[1]) { message.Contents = kvp.Value.IsRunning.ToString(); message.Type = Shared.Communication.MessageType.Acknowledge; MessageSend(message, false); } } break; case "REPLICATION_RUNTIME": DateTime StartTime = DateTime.Now; foreach (KeyValuePair <string, ReplicationThread> kvp in _replicationThreads) { if (client.Length > 1 && kvp.Value.DatabaseConnection.Name == client[1]) { StartTime = kvp.Value.TimeStart; message.Contents = StartTime.ToFileTimeUtc().ToString(); message.Type = Shared.Communication.MessageType.Acknowledge; MessageSend(message, false); } } break; } } }
internal void SendMessage(Shared.Communication.Message msg) { base.MessageSend(msg, true); }