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