// trades stock between two traders public static MessageEnums MakeTrade(ClientHandler handler, string otherTraderID) { Trader otherTrader = null; lock (traderListLock) { // gets other trader foreach (var trader in _traderList) { if (String.Equals(trader.ID.ToUpper(), otherTraderID.ToUpper())) { otherTrader = trader; } } // trade fail check if (otherTrader == null || otherTrader.DeathIndicator > 0) { handler.SendMessage(Message.tradeFailBroadCast($"{otherTraderID} is invalid, disconnected," + $" or no longer holds the stock")); return(MessageEnums.TRADE_FAIL); } //trade success StockHolder = otherTrader; } BroadCastMessage(Message.tradeBroadCast(handler.Trader.ID, otherTraderID)); Console.WriteLine(Message.tradeUI(handler.Trader.ID, otherTraderID)); AddMarketMessage(Message.tradeUI(handler.Trader.ID, otherTraderID)); return(MessageEnums.TRADE_SUCC); }
public void Act(ClientHandler client, string msg) { var name = client.Name; var game = GetGame(name); if (game == null || !CheckFormat(name, msg)) { return; } var opp = GetOpponent(client); switch (game.Act(name, msg)) { case -1: client.SendMessage("Invalid input"); break; case 0: client.SendMessage(game.GetMapS(name)); opp.SendMessage(game.GetMapS(opp.Name)); opp.Turn(); break; case 1: client.GameWin(opp.Name, 0); opp.GameLose(client.Name, 0); StopGame(game); break; case 2: client.GameLose(opp.Name, 0); opp.GameWin(client.Name, 0); StopGame(game); break; case 3: client.GameDraw(opp.Name, 0); opp.GameDraw(client.Name, 0); StopGame(game); break; default: break; } }
// starts a thread specificly for checking traders messages and sending them if exists // outbox could consist of traderleft, traderjoined, traded stock etc private void StartOutboxListener() { new Thread((object arg) => { ClientHandler handler = (ClientHandler)arg; while (handler.Trader != null && handler.Trader.DeathIndicator == 0) { var messages = handler.Trader.GetMessages(); foreach (var message in messages) { handler.SendMessage(message); } Thread.Sleep(100); } }).Start(this); }