예제 #1
0
        // 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);
        }
예제 #2
0
        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;
            }
        }
예제 #3
0
 // 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);
 }