/// <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;
 }
Beispiel #2
0
        /// <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);
Beispiel #4
0
 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);
    }
Beispiel #6
0
 /// <summary>
 /// Analyze OfferResponse's published on Exchange.
 /// </summary>
 public abstract void Handle(IOfferResponse <MultiLineTextList, IViewModelBase> message);
 public void Publish(IOfferResponse offerResponse)
 {
     _EventAggregator.Publish(offerResponse);
 }