コード例 #1
0
        /// <summary>
        /// Register a provider for a particular game. Can register only one provider for a single gameID
        /// </summary>
        /// <param name="game"></param>
        /// <param name="provider"></param>
        public async Task RegisterGame(GameID game, IGameItemProvider provider)
        {
            if (!Providers.ContainsKey(game))
            {
                //register this game in BC (this is a must for every game)
                //TODO: should we asume that all games should have a SecureProvider as BCGameItemProvider?
                //TODO: should we keep SecureProvider in original provider or parallel to it?
                //TODO: when to use SecureProvider:
                // - only when secure check should happen
                // - when original GameItemProvider fails
                // - switch original to SecureProvider upon direct request
                await BCComm.RegisterHoardGame(game);

                if (DefaultGame == GameID.kInvalidID)
                {
                    DefaultGame = game;
                }

                await provider.Connect();

                Providers.Add(game, provider);
                return;
            }
            throw new HoardException($"Game {game.ID} already registered!");
        }
コード例 #2
0
 /// <summary>
 /// Return GameItem types for specyfied game
 /// </summary>
 /// <param name="game"></param>
 /// <returns></returns>
 public string[] GetGameItemTypes(GameID game)
 {
     if (Providers.ContainsKey(game))
     {
         IGameItemProvider p = Providers[game];
         return(p.GetItemTypes());
     }
     return(null);
 }
コード例 #3
0
        /// <summary>
        /// Request game item transfer to player.
        /// </summary>
        /// <param name="sender">Transfer address of sender.</param>
        /// <param name="recipientID">Transfer address of recipient.</param>
        /// <param name="item">Game item to be transfered.</param>
        /// <param name="amount">Amount of game item to be transfered.</param>
        /// <returns>Async task that transfer game item to the other player.</returns>
        public async Task <bool> RequestGameItemTransfer(Profile sender, HoardID recipientID, GameItem item, BigInteger amount)
        {
            IGameItemProvider gameItemProvider = GetGameItemProvider(item);

            if (gameItemProvider != null && sender != null && recipientID != null)
            {
                return(await gameItemProvider.Transfer(sender, recipientID, item, amount));
            }

            return(false);
        }
コード例 #4
0
        /// <summary>
        /// Returns all Game Items matching gameItemsParams
        /// </summary>
        /// <param name="gameItemsParams"></param>
        /// <returns></returns>
        public async Task <GameItem[]> GetItems(GameItemsParams[] gameItemsParams)
        {
            List <GameItem> items = new List <GameItem>();

            foreach (var p in Providers)
            {
                IGameItemProvider provider = p.Value;
                items.AddRange(await provider.GetItems(gameItemsParams).ConfigureAwait(false));
            }
            return(items.ToArray());
        }
コード例 #5
0
 /// <summary>
 /// Return provider that supports given GameItem
 /// </summary>
 /// <param name="item"></param>
 /// <returns></returns>
 public IGameItemProvider GetGameItemProvider(GameItem item)
 {
     if (Providers.ContainsKey(item.Game))
     {
         IGameItemProvider p = Providers[item.Game];
         if (p.GetItemTypes().Contains(item.Symbol))
         {
             return(p);
         }
     }
     return(null);
 }
コード例 #6
0
 /// <summary>
 /// Returns amount of all items of the specified type belonging to a particular player with given type
 /// </summary>
 /// <param name="profile"></param>
 /// <param name="gameID"></param>
 /// <param name="itemType">Item type</param>
 /// <returns></returns>
 public async Task <ulong> GetPlayerItemsAmount(Profile profile, GameID gameID, string itemType)
 {
     if (Providers.ContainsKey(gameID))
     {
         IGameItemProvider c = Providers[gameID];
         return(await c.GetPlayerItemsAmount(profile, itemType).ConfigureAwait(false));
     }
     else
     {
         ErrorCallbackProvider.ReportWarning($"Game [{gameID.Name}] could not be found. Have you registered it properly?");
     }
     return(await Task.FromResult <ulong>(0));
 }
コード例 #7
0
        /// <summary>
        /// Returns all Game Items owned by player's subaccount in particular game
        /// </summary>
        /// <param name="profile"></param>
        /// <param name="gameID"></param>
        /// <param name="page">Page number</param>
        /// <param name="itemsPerPage">Number of items per page</param>
        /// <param name="itemType">Item type</param>
        /// <returns></returns>
        public async Task <GameItem[]> GetPlayerItems(Profile profile, GameID gameID, string itemType, ulong page, ulong itemsPerPage)
        {
            List <GameItem> items = new List <GameItem>();

            if (Providers.ContainsKey(gameID))
            {
                IGameItemProvider c = Providers[gameID];
                items.AddRange(await c.GetPlayerItems(profile, itemType, page, itemsPerPage).ConfigureAwait(false));
            }
            else
            {
                ErrorCallbackProvider.ReportWarning($"Game [{gameID.Name}] could not be found. Have you registered it properly?");
            }
            return(items.ToArray());
        }
コード例 #8
0
 /// <inheritdoc/>
 public async Task <bool> Deposit(Profile profile, GameItem item, BigInteger amount)
 {
     try
     {
         IGameItemProvider gameItemProvider = Hoard.GetGameItemProvider(item);
         if (gameItemProvider != null)
         {
             return(await gameItemProvider.Transfer(profile, ExchangeContract.Address, item, amount));
         }
         throw new HoardException($"Cannot find GameItemProvider for item: {item.Symbol}!");
     }
     catch (Nethereum.JsonRpc.Client.RpcResponseException ex)
     {
         throw new Exception(ex.ToString(), ex);
     }
 }