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);
 }