/// <summary> /// Use this to create an update message instance. The opportunity, offer, offerResponse are all /// relatively optional. It just depends on who you want to hear the message. Whoever published /// the opportunity is probably checking for opportunity == null and/or opportunity.id. /// Same goes for offer, offer response, and job. So, set these to null depending on who you do /// and don't want to hear the message. /// </summary> public StatusUpdate(string status, IOpportunity <TTarget, TProduct> opportunity, IOffer <TTarget, TProduct> offer, IOfferResponse <TTarget, TProduct> acceptanceOfferResponse, IJobInfo <TTarget, TProduct> jobInfo, Guid publisherId, object publisher, string category, object information) { Id = Guid.NewGuid(); Status = status; Opportunity = opportunity; Offer = offer; AcceptanceOfferResponse = acceptanceOfferResponse; JobInfo = jobInfo; PublisherId = publisherId; Publisher = publisher; Category = category; Information = information; //var id = System.Threading.Thread.CurrentThread.ManagedThreadId; }
/// <summary> /// Analyze OfferResponse's published on Exchange. /// </summary> public override void Handle(IOfferResponse <MultiLineTextList, IViewModelBase> message) { History.Events.ThinkingAboutTargetEvent.Publish(System.Guid.Empty); //WE ONLY CARE ABOUT OFFERS IN THE STUDY CATEGORY if (message.Category != StudyResources.CategoryStudy) { return; } //WE DON'T CARE ABOUT MESSAGES WE PUBLISH OURSELVES if (message.PublisherId == Id) { return; } //WE ONLY CARE ABOUT RESPONSES TO OFFERS THAT WE MADE var results = (from offer in _OpenOffers where offer.Id == message.Offer.Id select offer); if (results.Count() != 1) { return; } var pertinentOffer = results.First(); if (message.Response == OfferResources.OfferResponseDeny) { //DENIED OFFER RESPONSE _OpenOffers.Remove(pertinentOffer); _DeniedOffers.Add(pertinentOffer); return; } else if (message.Response != OfferResources.OfferResponseAccept) { //INVALID OFFER RESPONSE THAT WE DON'T KNOW HOW TO HANDLE _OpenOffers.Remove(pertinentOffer); var msg = string.Format(StudyResources.WarningMsgUnknownOfferResponseResponse, message.Response); Services.Log(msg, LogPriority.High, LogCategory.Warning); return; } ////WE HAVE AN ACCEPT RESPONSE WITH AN OPPORTUNITY THAT WE CARE ABOUT ////WHATEVER OPPORTUNITY WE ARE WORKING ON, THE NEW ONE SUPERCEDES IT //if (_CurrentOffer != null) // AbortCurrent(); //WE HAVE ALREADY CHECKED THIS TYPE CAST BEFORE MAKING OUR OFFER, IT SHOULD NOT HAVE CHANGED. var jobInfo = (StudyJobInfo <MultiLineTextList, IViewModelBase>)message.Offer.Opportunity.JobInfo; _CurrentOffer = message.Offer; //SET THE PRODUCT...WE WILL KEEP A REFERENCE TO THIS VIEWMODEL, AND MAKE CHANGES AS WE STUDY. //BUT AS FAR AS THE JOB OPPORTUNITY IS CONCERNED, WE ARE ALREADY COMPLETED WITH JUST THE //ASSIGNMENT! jobInfo.Product = _ViewModel; //PUBLISH COMPLETED UPDATE var completedUpdate = new StatusUpdate <MultiLineTextList, IViewModelBase>(CommonResources.StatusCompleted, _CurrentOffer.Opportunity, _CurrentOffer, message, jobInfo, Id, this, StudyResources.CategoryStudy, null); Exchange.Ton.Publish(completedUpdate); var suppress = StudyAsync(jobInfo.Target); }
/// <summary> /// Analyze OfferResponse's published on Exchange. /// </summary> public abstract void Handle(IOfferResponse<MultiLineTextList, IViewModelBase> message);
public void Publish(IOfferResponse offerResponse) { _EventAggregator.Publish(offerResponse); }
/// <summary> /// Analyze OfferResponse's published on Exchange. /// </summary> public override void Handle(IOfferResponse<MultiLineTextList, IViewModelBase> message) { History.Events.ThinkingAboutTargetEvent.Publish(System.Guid.Empty); //WE ONLY CARE ABOUT OFFERS IN THE STUDY CATEGORY if (message.Category != StudyResources.CategoryStudy) return; //WE DON'T CARE ABOUT MESSAGES WE PUBLISH OURSELVES if (message.PublisherId == Id) return; //WE ONLY CARE ABOUT RESPONSES TO OFFERS THAT WE MADE var results = (from offer in _OpenOffers where offer.Id == message.Offer.Id select offer); if (results.Count() != 1) return; var pertinentOffer = results.First(); if (message.Response == OfferResources.OfferResponseDeny) { //DENIED OFFER RESPONSE _OpenOffers.Remove(pertinentOffer); _DeniedOffers.Add(pertinentOffer); return; } else if (message.Response != OfferResources.OfferResponseAccept) { //INVALID OFFER RESPONSE THAT WE DON'T KNOW HOW TO HANDLE _OpenOffers.Remove(pertinentOffer); var msg = string.Format(StudyResources.WarningMsgUnknownOfferResponseResponse, message.Response); Services.Log(msg, LogPriority.High, LogCategory.Warning); return; } ////WE HAVE AN ACCEPT RESPONSE WITH AN OPPORTUNITY THAT WE CARE ABOUT ////WHATEVER OPPORTUNITY WE ARE WORKING ON, THE NEW ONE SUPERCEDES IT //if (_CurrentOffer != null) // AbortCurrent(); //WE HAVE ALREADY CHECKED THIS TYPE CAST BEFORE MAKING OUR OFFER, IT SHOULD NOT HAVE CHANGED. var jobInfo = (StudyJobInfo<MultiLineTextList, IViewModelBase>)message.Offer.Opportunity.JobInfo; _CurrentOffer = message.Offer; //SET THE PRODUCT...WE WILL KEEP A REFERENCE TO THIS VIEWMODEL, AND MAKE CHANGES AS WE STUDY. //BUT AS FAR AS THE JOB OPPORTUNITY IS CONCERNED, WE ARE ALREADY COMPLETED WITH JUST THE //ASSIGNMENT! jobInfo.Product = _ViewModel; //PUBLISH COMPLETED UPDATE var completedUpdate = new StatusUpdate<MultiLineTextList, IViewModelBase>(CommonResources.StatusCompleted, _CurrentOffer.Opportunity, _CurrentOffer, message, jobInfo, Id, this, StudyResources.CategoryStudy, null); Exchange.Ton.Publish(completedUpdate); var suppress = StudyAsync(jobInfo.Target); }
/// <summary> /// Analyze OfferResponse's published on Exchange. /// </summary> public abstract void Handle(IOfferResponse <MultiLineTextList, IViewModelBase> message);