public void OnMessageReceived(object sender, MessageEventArgs args)
        {
            Message response = null;

            if (args.message is ReadyMessage)
            {
                ReadyMessage readyMessage = args.message as ReadyMessage;
                RemoveFromBackup(readyMessage.idReceived);

                if (messageQueue.Count == 0)
                {
                    ThreadPool.QueueUserWorkItem(new WaitCallback(WaitSend));
                }
                else
                {
                    response = messageQueue.Take();
                }
            }
            else if (args.message is RecordMessage)
            {
                RecordMessage recordMessage = args.message as RecordMessage;

                EventHandler <HtmlRecord> updateReceived = UpdateReceived;
                if (updateReceived != null)
                {
                    var delegates = updateReceived.GetInvocationList();
                    foreach (EventHandler <HtmlRecord> receiver in delegates)
                    {
                        receiver.BeginInvoke(null, recordMessage.htmlRecord, OnDatabaseUpdated, null);
                    }
                }

                response = new ReadyMessage(recordMessage.id);
            }
            else if (args.message is StatusReport)
            {
                StatusReport report = args.message as StatusReport;

                EventHandler <KeyValuePair <ObjectId, JobStatus> > statusReceived = StatusReceived;
                if (statusReceived != null)
                {
                    statusReceived.Invoke(null, report.statusReport);
                }

                response = new ReadyMessage(report.id);
            }
            else if (args.message is DestroyedBuffer)
            {
                response = new ResendMessage();
            }
            else if (args.message is ResendMessage)
            {
                response = RetrieveFromBackup();
            }

            if (response != null)
            {
                Send(response);
            }
        }
        public void OnClientConnected(object sender, EventArgs args)
        {
            Message readyMessage = new ReadyMessage(ObjectId.Empty);

            Send(BSON.Serialize <Message>(readyMessage));
        }