public void TestAMAsell() { bool e = false; Random rnd = new Random(); int rndCommodity = rnd.Next(0, 10); int EXPECTEDcommAmount = 0; int ACTUALcommAmount = 0; MarketClientClass client = new MarketClientClass(); MarketUserData userData = client.SendQueryUserRequest(); MarketCommodityOffer commodityInfo = client.SendQueryMarketRequest(rndCommodity); if (userData.Error != null | commodityInfo.Error != null) //is NOT successfuly passed to the server { return; } foreach (int cmdty in userData.Commodities.Keys) //passing on all commodities . { if (cmdty == rndCommodity) { EXPECTEDcommAmount = userData.Commodities[cmdty]; //checking how many we own from rndCommodity } } //we are selling 1 AMA.AMA_Sell(commodityInfo.Bid, rndCommodity, 1); userData = client.SendQueryUserRequest(); //refresh userData foreach (int cmdty in userData.Commodities.Keys) //passing on all commodities { if (cmdty == rndCommodity) { ACTUALcommAmount = userData.Commodities[cmdty]; } } if (EXPECTEDcommAmount == ACTUALcommAmount) { e = !e; } if (e | EXPECTEDcommAmount == 0) { Assert.AreEqual <int>(EXPECTEDcommAmount, ACTUALcommAmount); } else { Assert.AreNotEqual <int>(EXPECTEDcommAmount, ACTUALcommAmount); } }
}//AMAbuy public static void AMA_Sell(int commodity, int desiredPrice, int amount) { FLAG_isRunning = true; NotOverLoadServer(); MarketClientClass client = new MarketClientClass(); MarketUserData userData = client.SendQueryUserRequest(); NotOverLoadServer(); if (userData.Error != null) { FLAG_isRunning = false; return; } foreach (int cmdty in userData.Commodities.Keys) //passing on all commodities { if (cmdty == commodity && userData.Commodities[cmdty] > 0) //check if we own that commodity { //if item is the right commodity & we own it if (amount > userData.Commodities[cmdty] || amount == -1) //we cant sell more than we have OR -1 is our sign to sell ALL amount = userData.Commodities[cmdty]; MarketBuySell sellreq = client.SendSellRequest(desiredPrice, commodity, amount); NotOverLoadServer(); if (sellreq.Error == null) //the sell req is successfuly passed to the server HistoryLogger.WriteHistory(sellreq.Id, "Sell", commodity, desiredPrice, amount); } } FLAG_isRunning = false; return; }//AMAsell
}//collect info cancel request private static void CollectInfoQueryRequst(string a) { switch (a) { case "1": //buysellquery int id; Console.WriteLine("Please enter the ID request\n"); do { id = Myconvert(Console.ReadLine()); //force the user to give legal id (only nums) }while (id == -1); MarketItemQuery data1 = client.SendQueryBuySellRequest(id); //call to Logic layer func Console.WriteLine(data1.ToString()); //print data on a certain deal break; case "2": //user query MarketUserData data2 = client.SendQueryUserRequest(); Console.WriteLine(data2.ToString()); break; case "3": //market query int commodity; Console.WriteLine("Please enter the Commodity\n"); do { commodity = Myconvert(Console.ReadLine()); //force the user to give legal commidity (only nums) }while (commodity == -1); MarketCommodityOffer data3 = client.SendQueryMarketRequest(commodity); //call to Logic layer func Console.WriteLine(data3.ToString()); break; } //switch return; } //collect info query
public static void AMA_Buy(int commodity, int desiredPrice, int amount) { FLAG_isRunning = true; notOverLoadServer(); MarketClientClass client = new MarketClientClass(); AllMarketRequest all = client.QueryAllMarketRequest(); counter++; foreach (ItemAskBid item in all.MarketInfo) { if (item.Id == commodity && item.Info.Ask <= desiredPrice) { //if item is the right commodity & right price MarketUserData userData = client.SendQueryUserRequest(); counter++; List <int> l = userData.Requests; if (l.Count != 0) //there are open requests in server //if USER dont have enough money, we'll cancel his open buy requests- hoping after that he'll have enough { for (int i = l.Count; i >= 0 & userData.Funds < (item.Info.Ask * amount); i--) //going from end so in delete won't change index of l { notOverLoadServer(); int reqID = l[i]; //saving the ID just for simplicity MarketItemQuery request = client.SendQueryBuySellRequest(l[i]); counter++; if (request.Type.Equals("buy")) //Note: check with roey { client.SendCancelBuySellRequest(reqID); HistoryLogger.WriteHistory("Cancel," + request.Commodity + "," + request.Price + "," + request.Amount + "," + reqID); counter++; } } } if (userData.Funds >= item.Info.Ask * amount) { int ID = client.SendBuyRequest(item.Info.Ask + 1, commodity, amount).Id; HistoryLogger.WriteHistory("Buy," + commodity + "," + (item.Info.Ask + 1) + "," + amount + "," + ID); counter++; } }//bigIf } FLAG_isRunning = false; return; }//AMAbuy
}//AMAbuy public static void AMA_Sell(int commodity, int desiredPrice, int amount) { FLAG_isRunning = true; notOverLoadServer(); MarketClientClass client = new MarketClientClass(); AllMarketRequest all = client.QueryAllMarketRequest(); counter++; MarketUserData userData = client.SendQueryUserRequest(); counter++; foreach (int cmdty in userData.Commodities.Keys) //check if we own that commodity { if (cmdty == commodity & userData.Commodities[cmdty] > 0) { //passing on commodities list, until arriving the wished one foreach (ItemAskBid item in all.MarketInfo) { if (item.Id == commodity && item.Info.Bid >= desiredPrice) { //if item is the right commodity & right price if (amount > userData.Commodities[cmdty] | amount == -1) //we cant sell more than we have OR -1 is our sign to sell ALL { amount = userData.Commodities[cmdty]; } //Note: ask roey about error int ID = client.SendSellRequest(item.Info.Bid - 1, commodity, amount).Id; HistoryLogger.WriteHistory("Sell," + commodity + "," + (item.Info.Bid - 1) + "," + amount + "," + ID); counter++; } } } } FLAG_isRunning = false; return; }//AMAsell
public static void AMA_Buy(int commodity, int desiredPrice, int amount) { FLAG_isRunning = true; NotOverLoadServer(); MarketClientClass client = new MarketClientClass(); MarketUserData userData = client.SendQueryUserRequest(); NotOverLoadServer(); if (userData.Error != null) { FLAG_isRunning = false; return; } if (userData.Funds >= desiredPrice * amount) //if we have enough money- just buy and finish running. { MarketBuySell buyreq = client.SendBuyRequest(desiredPrice, commodity, amount); NotOverLoadServer(); if (buyreq.Error == null) //the buy req is successfuly passed to the server HistoryLogger.WriteHistory(buyreq.Id, "Buy", commodity, desiredPrice, amount); FLAG_isRunning = false; return; } //if USER dont have enough money, we'll cancel his open buy requests- hoping after that he'll have enough List<int> l = userData.Requests; if (l.Count == 0) //there are NO open requests in server { FLAG_isRunning = false; return; } for (int i = l.Count - 1; i >= 0 && userData.Funds < (desiredPrice * amount); i--) //going from end so in delete won't change index of l { int reqID = l[i]; //saving the ID just for simplicity MarketItemQuery request = client.SendQueryBuySellRequest(reqID); NotOverLoadServer(); if (request.Error != null) { FLAG_isRunning = false; return; } //wish to cancel only buy requests. only this kind of canceling request give back money //func SendCancelBuySellRequest returns bool - of the action passed successfuly if (request.Type.Equals("buy") && client.SendCancelBuySellRequest(reqID)) HistoryLogger.WriteHistory(reqID, "Cancel", request.Commodity, request.Price, request.Amount); NotOverLoadServer(); } userData = client.SendQueryUserRequest(); //refresh data NotOverLoadServer(); if (userData.Error != null) { FLAG_isRunning = false; return; } if (userData.Funds >= desiredPrice * amount) //if NOW we have enough money- buy { MarketBuySell buyreq = client.SendBuyRequest(desiredPrice, commodity, amount); NotOverLoadServer(); if (buyreq.Error == null) //the buy req is successfuly passed to the server HistoryLogger.WriteHistory(buyreq.Id, "Buy", commodity, desiredPrice, amount); } FLAG_isRunning = false; return; }//AMAbuy