コード例 #1
0
        protected virtual void OnTradeOfferChecked(TradeOfferEventArgs e)
        {
            var handler = TradeOfferChecked;

            if (handler != null)
            {
                handler(this, e);
            }
        }
コード例 #2
0
        protected virtual void OnTradeOfferDeclined(TradeOfferEventArgs e)
        {
            TradeOfferStatusEventHandler handler = TradeOfferDeclined;

            if (handler != null)
            {
                handler(this, e);
            }
        }
コード例 #3
0
        private void CheckPendingTradeOffers()
        {
            while (ShouldCheckPendingTradeOffers)
            {
                var tradeOffers = GetTradeOffers();
                foreach (var tradeOffer in tradeOffers)
                {
                    if (tradeOffer.IsOurOffer && OurPendingTradeOffers.Contains(tradeOffer.Id))
                    {
                        if (tradeOffer.State != TradeOfferState.Active)
                        {
                            var args = new TradeOfferEventArgs();
                            args.TradeOffer = tradeOffer;

                            // check if trade offer has been accepted/declined, or items unavailable (manually validate)
                            if (tradeOffer.State == TradeOfferState.Accepted)
                            {
                                // fire event
                                OnTradeOfferAccepted(args);
                                // remove from list
                                OurPendingTradeOffers.Remove(tradeOffer.Id);
                            }
                            else if (tradeOffer.State != TradeOfferState.Active && tradeOffer.State != TradeOfferState.Accepted)
                            {
                                if (tradeOffer.State == TradeOfferState.Invalid || tradeOffer.State == TradeOfferState.InvalidItems)
                                {
                                    // invalid, handle manually
                                }
                                else
                                {
                                    // fire event
                                    OnTradeOfferDeclined(args);
                                    // remove from list
                                    OurPendingTradeOffers.Remove(tradeOffer.Id);
                                }
                            }
                        }
                    }
                    else if (!tradeOffer.IsOurOffer && !ReceivedPendingTradeOffers.Contains(tradeOffer.Id))
                    {
                        var args = new TradeOfferEventArgs();
                        args.TradeOffer = tradeOffer;

                        if (tradeOffer.State == TradeOfferState.Active)
                        {
                            ReceivedPendingTradeOffers.Add(tradeOffer.Id);
                            OnTradeOfferReceived(args);
                        }
                        else
                        {
                            ReceivedPendingTradeOffers.Remove(tradeOffer.Id);
                        }
                    }
                }
                System.Threading.Thread.Sleep(2000);
            }
        }
コード例 #4
0
 protected virtual void OnTradeOfferNoData(TradeOfferEventArgs e)
 {
     if (!_handledTradeOffers.Contains(e.TradeOffer.Id))
     {
         var handler = TradeOfferNoData;
         if (handler != null)
         {
             handler(this, e);
         }
         _handledTradeOffers.Add(e.TradeOffer.Id);
     }
 }
コード例 #5
0
 protected virtual void OnTradeOfferInEscrow(TradeOfferEventArgs e)
 {
     if (!_inEscrowTradeOffers.Contains(e.TradeOffer.Id))
     {
         var handler = TradeOfferInEscrow;
         if (handler != null)
         {
             handler(this, e);
         }
         _inEscrowTradeOffers.Add(e.TradeOffer.Id);
     }
 }
コード例 #6
0
 protected virtual void OnTradeOfferNeedsConfirmation(TradeOfferEventArgs e)
 {
     if (!_awaitingConfirmationTradeOffers.Contains(e.TradeOffer.Id))
     {
         var handler = TradeOfferNeedsConfirmation;
         if (handler != null)
         {
             handler(this, e);
         }
         _awaitingConfirmationTradeOffers.Add(e.TradeOffer.Id);
     }
 }
コード例 #7
0
 private void CheckPendingTradeOffers()
 {
     new Thread(() =>
     {
         while (_shouldCheckPendingTradeOffers)
         {
             var tradeOffers = GetTradeOffers(true);
             foreach (var tradeOffer in tradeOffers)
             {
                 if (tradeOffer.IsOurOffer)
                 {
                     lock (_ourPendingTradeOffersLock)
                     {
                         if (OurPendingTradeOffers.Contains(tradeOffer.Id))
                         {
                             continue;
                         }
                     }
                     AddPendingTradeOfferToList(tradeOffer.Id);
                 }
                 else
                 {
                     var args = new TradeOfferEventArgs(tradeOffer);
                     if (tradeOffer.State == TradeOfferState.Active)
                     {
                         if (tradeOffer.ConfirmationMethod != TradeOfferConfirmationMethod.Invalid)
                         {
                             OnTradeOfferNeedsConfirmation(args);
                         }
                         else
                         {
                             OnTradeOfferReceived(args);
                         }
                     }
                 }
             }
             Thread.Sleep(_tradeOfferRefreshRate);
         }
     }).Start();
     while (_shouldCheckPendingTradeOffers)
     {
         var          checkingThreads = new List <Thread>();
         List <ulong> ourPendingTradeOffers;
         lock (_ourPendingTradeOffersLock)
         {
             ourPendingTradeOffers = OurPendingTradeOffers.ToList();
         }
         foreach (var thread in ourPendingTradeOffers.Select(tradeOfferId => new Thread(() =>
         {
             var pendingTradeOffer = GetTradeOffer(tradeOfferId);
             if (pendingTradeOffer.Offer == null)
             {
                 // Steam's GetTradeOffer/v1 API only gives data for the last 1000 received and 500 sent trade offers, so sometimes this happens
                 pendingTradeOffer.Offer = new TradeOffer {
                     Id = tradeOfferId
                 };
                 OnTradeOfferNoData(new TradeOfferEventArgs(pendingTradeOffer.Offer));
             }
             else
             {
                 var args = new TradeOfferEventArgs(pendingTradeOffer.Offer);
                 if (pendingTradeOffer.Offer.State == TradeOfferState.Active)
                 {
                     // fire this so that trade can be cancelled in UserHandler if the bot owner wishes (e.g. if pending too long)
                     OnTradeOfferChecked(args);
                 }
                 else
                 {
                     // check if trade offer has been accepted/declined, or items unavailable (manually validate)
                     if (pendingTradeOffer.Offer.State == TradeOfferState.Accepted)
                     {
                         // fire event
                         OnTradeOfferAccepted(args);
                         // remove from list
                         RemovePendingTradeOfferFromList(pendingTradeOffer.Offer.Id);
                     }
                     else
                     {
                         if (pendingTradeOffer.Offer.State == TradeOfferState.NeedsConfirmation)
                         {
                             // fire event
                             OnTradeOfferNeedsConfirmation(args);
                         }
                         else if (pendingTradeOffer.Offer.State == TradeOfferState.Invalid || pendingTradeOffer.Offer.State == TradeOfferState.InvalidItems)
                         {
                             OnTradeOfferInvalid(args);
                             RemovePendingTradeOfferFromList(pendingTradeOffer.Offer.Id);
                         }
                         else if (pendingTradeOffer.Offer.State == TradeOfferState.InEscrow)
                         {
                             OnTradeOfferInEscrow(args);
                         }
                         else
                         {
                             if (pendingTradeOffer.Offer.State == TradeOfferState.Canceled)
                             {
                                 OnTradeOfferCanceled(args);
                             }
                             else
                             {
                                 OnTradeOfferDeclined(args);
                             }
                             RemovePendingTradeOfferFromList(pendingTradeOffer.Offer.Id);
                         }
                     }
                 }
             }
         })))
         {
             checkingThreads.Add(thread);
             thread.Start();
         }
         foreach (var thread in checkingThreads)
         {
             thread.Join();
         }
         Thread.Sleep(_tradeOfferRefreshRate);
     }
 }
コード例 #8
0
        private void CheckPendingTradeOffers()
        {
            while (ShouldCheckPendingTradeOffers)
            {
                var tradeOffers = GetTradeOffers();
                foreach (var tradeOffer in tradeOffers)
                {
                    if (tradeOffer.IsOurOffer && OurPendingTradeOffers.Contains(tradeOffer.Id))
                    {
                        if (tradeOffer.State != TradeOfferState.Active)
                        {
                            var args = new TradeOfferEventArgs();
                            args.TradeOffer = tradeOffer;

                            // check if trade offer has been accepted/declined, or items unavailable (manually validate)
                            if (tradeOffer.State == TradeOfferState.Accepted)
                            {
                                // fire event
                                OnTradeOfferAccepted(args);
                                // remove from list
                                OurPendingTradeOffers.Remove(tradeOffer.Id);
                            }
                            else if (tradeOffer.State != TradeOfferState.Active && tradeOffer.State != TradeOfferState.Accepted)
                            {
                                if (tradeOffer.State == TradeOfferState.Invalid || tradeOffer.State == TradeOfferState.InvalidItems)
                                {
                                    // invalid, handle manually
                                }
                                else
                                {
                                    // fire event
                                    OnTradeOfferDeclined(args);
                                    // remove from list
                                    OurPendingTradeOffers.Remove(tradeOffer.Id);
                                }
                            }
                        }
                    }
                    else if (!tradeOffer.IsOurOffer && !ReceivedPendingTradeOffers.Contains(tradeOffer.Id))
                    {
                        var args = new TradeOfferEventArgs();
                        args.TradeOffer = tradeOffer;

                        if (tradeOffer.State == TradeOfferState.Active)
                        {
                            ReceivedPendingTradeOffers.Add(tradeOffer.Id);
                            OnTradeOfferReceived(args);
                        }
                        else
                        {
                            ReceivedPendingTradeOffers.Remove(tradeOffer.Id);
                        }
                    }
                }
                System.Threading.Thread.Sleep(2000);
            }
        }
コード例 #9
0
 protected virtual void OnTradeOfferReceived(TradeOfferEventArgs e)
 {
     TradeOfferStatusEventHandler handler = TradeOfferReceived;
     if (handler != null)
     {
         handler(this, e);
     }
 }