Advertisement
Guest User

Untitled

a guest
Feb 19th, 2014
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.74 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Configuration;
  4. using System.Reflection;
  5. using System.Runtime.CompilerServices;
  6. using System.Threading.Tasks;
  7. using FutTrader2000.Messages;
  8. using GalaSoft.MvvmLight.Messaging;
  9. using log4net;
  10. using UltimateTeam.Toolkit;
  11. using UltimateTeam.Toolkit.Exceptions;
  12. using UltimateTeam.Toolkit.Factories;
  13. using UltimateTeam.Toolkit.Models;
  14. using UltimateTeam.Toolkit.Parameters;
  15.  
  16. namespace FutTrader2000.Models
  17. {
  18.     public class FutClientWrapper : IFutClientWrapper
  19.     {
  20.         private static readonly ILog Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
  21.  
  22.         private readonly FutClient _futClient;
  23.         private DateTime _lastException;
  24.  
  25.         public FutClientWrapper()
  26.         {
  27.             _futClient = new FutClient();
  28.             ClientReady = false;
  29.         }
  30.  
  31.         private DateTime LastException
  32.         {
  33.             get { return _lastException; }
  34.             set { _lastException = value; }
  35.         }
  36.  
  37.  
  38.         public async Task<LoginResponse> LoginAsync(LoginDetails loginDetails)
  39.         {
  40.             var response = await Invoke(f => f.LoginAsync(loginDetails), loginDetails);
  41.             ClientReady = true;
  42.             Messenger.Default.Send(new LoggedInMessage());
  43.             return response;
  44.         }
  45.  
  46.         public async Task<AuctionResponse> SearchAsync(SearchParameters searchParameters)
  47.         {
  48.             return await Invoke(f => f.SearchAsync(searchParameters), searchParameters);
  49.         }
  50.  
  51.         public async Task<AuctionResponse> PlaceBidAsync(AuctionInfo auctionInfo, uint bidAmount = 0)
  52.         {
  53.             return await Invoke(f => f.PlaceBidAsync(auctionInfo, bidAmount), auctionInfo);
  54.         }
  55.  
  56.         public async Task<Item> GetItemAsync(long resourceId)
  57.         {
  58.             return await Invoke(f => f.GetItemAsync(resourceId), resourceId);
  59.         }
  60.  
  61.         public async Task<Item> GetItemAsync(AuctionInfo auctionInfo)
  62.         {
  63.             return await Invoke(f => f.GetItemAsync(auctionInfo), auctionInfo);
  64.         }
  65.  
  66.         public async Task<byte[]> GetPlayerImageAsync(AuctionInfo auctionInfo)
  67.         {
  68.             return await Invoke(f => f.GetPlayerImageAsync(auctionInfo), auctionInfo);
  69.         }
  70.  
  71.         public async Task<AuctionResponse> GetTradeStatusAsync(IEnumerable<long> tradeIds)
  72.         {
  73.             return await Invoke(f => f.GetTradeStatusAsync(tradeIds), tradeIds);
  74.         }
  75.  
  76.         public async Task<CreditsResponse> GetCreditsAsync()
  77.         {
  78.             return await Invoke(f => f.GetCreditsAsync());
  79.         }
  80.  
  81.         public async Task<PileSizeResponse> GetPileSizeAsync()
  82.         {
  83.             return await Invoke(f => f.GetPileSizeAsync());
  84.         }
  85.  
  86.         public async Task<AuctionResponse> GetTradePileAsync()
  87.         {
  88.             return await Invoke(f => f.GetTradePileAsync());
  89.         }
  90.  
  91.         public async Task<WatchlistResponse> GetWatchlistAsync()
  92.         {
  93.             return await Invoke(f => f.GetWatchlistAsync());
  94.         }
  95.  
  96.         public async Task<PurchasedItemsResponse> GetPurchasedItemsAsync()
  97.         {
  98.             return await Invoke(f => f.GetPurchasedItemsAsync());
  99.         }
  100.  
  101.         public async Task<ListAuctionResponse> ListAuctionAsync(AuctionDetails auctionDetails)
  102.         {
  103.             return await Invoke(f => f.ListAuctionAsync(auctionDetails), auctionDetails);
  104.         }
  105.  
  106.         public Task RemoveFromWatchlistAsync(AuctionInfo auctionInfo)
  107.         {
  108.             return Invoke(f => f.RemoveFromWatchlistAsync(auctionInfo), auctionInfo);
  109.         }
  110.  
  111.         public Task RemoveFromWatchlistAsync(IEnumerable<AuctionInfo> auctionInfo)
  112.         {
  113.             return Invoke(f => f.RemoveFromWatchlistAsync(auctionInfo), auctionInfo);
  114.         }
  115.  
  116.         public Task RemoveFromTradePileAsync(AuctionInfo auctionInfo)
  117.         {
  118.             return Invoke(f => f.RemoveFromTradePileAsync(auctionInfo), auctionInfo);
  119.         }
  120.  
  121.         public async Task<SendItemToTradePileResponse> SendItemToTradePileAsync(ItemData itemData)
  122.         {
  123.             return await Invoke(f => f.SendItemToTradePileAsync(itemData), itemData);
  124.         }
  125.  
  126.         public async Task<QuickSellResponse> QuickSellItemAsync(long itemId)
  127.         {
  128.             return await Invoke(f => f.QuickSellItemAsync(itemId), itemId);
  129.         }
  130.  
  131.         public FutRequestFactories RequestFactories { get; private set; }
  132.  
  133.         public bool ClientReady { get; set; }
  134.  
  135.         private async void Login()
  136.         {
  137.             try
  138.             {
  139.                 string email = ConfigurationManager.AppSettings["Email"];
  140.                 string password = ConfigurationManager.AppSettings["Password"];
  141.                 string secretAnswer = ConfigurationManager.AppSettings["SecretQuestion"];
  142.                 string configValue = ConfigurationManager.AppSettings["Platform"];
  143.                 var platform = (Platform) Enum.Parse(typeof (Platform), configValue);
  144.                 await _futClient.LoginAsync(new LoginDetails(email, password, secretAnswer, platform));
  145.                 Messenger.Default.Send(new ConsoleMessage(ConsoleMessageType.General, "Logged in"));
  146.                 ClientReady = true;
  147.                 Messenger.Default.Send(new LoggedInMessage());
  148.             }
  149.             catch (Exception e)
  150.             {
  151.                 Log.Error("Error logging in", e);
  152.             }
  153.         }
  154.  
  155.         public TResult Invoke<TResult>(Func<FutClient, TResult> func, object requestDetails = null,
  156.             [CallerMemberName] string exceptionMessage = null)
  157.         {
  158.             try
  159.             {
  160.                 if (LastException + new TimeSpan(0, 0, 30) < DateTime.Now)
  161.                 {
  162.                     TResult result = func(_futClient);
  163.                     return result;
  164.                 }
  165.             }
  166.             catch (ExpiredSessionException e)
  167.             {
  168.                 //Relog
  169.                 string message = "Exception in FutclientWrapper" + exceptionMessage + GetRequestDetails(requestDetails);
  170.                 Messenger.Default.Send(new ConsoleMessage(ConsoleMessageType.Error, message, e));
  171.                 Log.Error(message, e);
  172.                 ClientReady = false;
  173.                 if (LastException + new TimeSpan(0, 0, 30) < DateTime.Now)
  174.                 {
  175.                     LastException = DateTime.Now;
  176.                     Login();
  177.                 }
  178.             }
  179.             catch (ServiceUnavailableException e)
  180.             {
  181.                 //sleep
  182.                 string message = "Exception in FutclientWrapper" + exceptionMessage + GetRequestDetails(requestDetails);
  183.                 Messenger.Default.Send(new ConsoleMessage(ConsoleMessageType.Error, message, e));
  184.                 ClientReady = false;
  185.                 Log.Error(message, e);
  186.             }
  187.             catch (Exception e)
  188.             {
  189.                 string message = "Exception in FutclientWrapper" + exceptionMessage + GetRequestDetails(requestDetails);
  190.                 Log.Error(message, e);
  191.                 ClientReady = false;
  192.                 Messenger.Default.Send(new ConsoleMessage(ConsoleMessageType.Error, message, e));
  193.             }
  194.             return default(TResult);
  195.         }
  196.  
  197.         private string GetRequestDetails(object request)
  198.         {
  199.             if (request == null)
  200.             {
  201.                 return string.Empty;
  202.             }
  203.  
  204.             Type requestType = request.GetType();
  205.  
  206.             string msg = requestType.FullName;
  207.             foreach (PropertyInfo propInfo in requestType.GetProperties())
  208.             {
  209.                 object val = propInfo.GetValue(request);
  210.                 msg += string.Format("{0}{1}: {2}", Environment.NewLine, propInfo.Name, val);
  211.             }
  212.             return msg;
  213.         }
  214.     }
  215. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement