public void ShowMessageWindow(string label, string message, MessageEnums enumMessage)
 {
     messageSender.Label        = label;
     messageSender.Message      = message;
     messageSender.EnumCount    = (int)enumMessage;
     messageSender.CloseWindow += CloseMessageWindow;
     container.RegisterInstance <IMessageSender>(messageSender);
     messageWindow = container.Resolve <MessageWindow>();
     messageWindow.ShowDialog();
 }
示例#2
0
        // main logic for processing messages received from client utilizing MessageEnums
        protected MessageEnums ProcessLine(string line)
        {
            string[] splitLine = line.Split(' ');
            if (splitLine.Length <= 0 || !Message.IsMessageEnum(splitLine[0]))
            {
                SendMessage(Message.error($"Incorrect message protocol '{line}'"));
                return(ERROR);
            }
            try
            {
                MessageEnums responseType = Message.GetMessageEnumFromString(splitLine[0]);
                switch (responseType)
                {
                case TRADER_NEW:
                    InitNewTrader();
                    return(TRADER_NEW);

                case TRADER_RECONNECTING:
                    if (!Program.IsRestarting)
                    {
                        throw new ServerNotRestartingException("Server is not restarting");
                    }
                    InitNewTrader(splitLine[1]);
                    return(TRADER_RECONNECTING);

                case TRADER_TRADE:
                    if (_trader == null)
                    {
                        throw new Exception("Trader Uninitialized");
                    }
                    if (Program.IsRestarting)
                    {
                        throw new Exception("Cannot trade whilst server is recovering");
                    }
                    return(TradeStock(splitLine[1]));

                default:
                    SendMessage(Message.error($"Invalid request '{line}'"));
                    return(ERROR);
                }
            }
            catch (IndexOutOfRangeException e) {
                SendMessage(Message.error($"Inavlid request '{line}' unexpected number of arguments"));
                return(ERROR);
            }
            catch (ServerNotRestartingException e)
            {
                SendMessage(Message.error($"{e.Message}"));
                return(ERROR);
            }
        }
示例#3
0
        // main logic for processing a message from the server utilizes MessageEnums
        public MessageEnums ProcessLine(string line)
        {
            string[] splitLine = line.Split(" ");
            if (!(splitLine.Length > 0) || !(Message.IsMessageEnum(splitLine[0])))
            {
                return(MessageEnums.ERROR);
            }
            try
            {
                MessageEnums messageType = Message.GetMessageEnumFromString(splitLine[0]);
                switch (messageType)
                {
                case CONNECT_SUCC:
                {
                    SendMessage(Message.newTraderBroadcast());
                    return(CONNECT_SUCC);
                }

                case SERVER_REBOOT:
                {
                    if (_trader == null)
                    {
                        SendMessage(Message.newTraderBroadcast());
                    }
                    else
                    {
                        SendMessage(Message.traderReconnectingBroadcast(_trader.ID));
                    }
                    market.AddUIMessage(Message.serverRebookUI());
                    _serverReconnecting = true;
                    return(SERVER_REBOOT);
                }

                case SERVER_RESTORED:
                {
                    market.AddUIMessage(Message.serverRecoveredUI());
                    _serverReconnecting = false;
                    return(SERVER_RESTORED);
                }

                case TRADER_ID:
                {
                    InitTrader(splitLine[1]);
                    Console.WriteLine($"Your ID is {_trader.ID}");
                    market.AddUIMessage($"Your ID is {_trader.ID}");
                    return(TRADER_ID);
                }

                case TRADER_LIST:
                {
                    InitTraderList(splitLine);
                    return(TRADER_LIST);
                }

                case TRADER_WITH_STOCK:
                {
                    Program.Market.StockHolder = new Trader(splitLine[1]);
                    Program.Market.PrintTraders();
                    return(TRADER_WITH_STOCK);
                }

                case TRADER_JOINED:
                {
                    Program.Market.AddTrader(new Trader(splitLine[1]));
                    if (Trader != null && !Equals(Trader.ID, splitLine[1]))
                    {
                        Console.WriteLine(Message.traderJoinedUI(splitLine[1]));
                        Program.Market.AddUIMessage(Message.traderJoinedUI(splitLine[1]));
                        Program.Market.PrintTraders();
                    }
                    return(TRADER_JOINED);
                }

                case TRADER_LEFT:
                {
                    Program.Market.RemoveTrader(new Trader(splitLine[1]));
                    Console.WriteLine(Message.traderLeftUI(splitLine[1]));
                    Program.Market.AddUIMessage(Message.traderLeftUI(splitLine[1]));
                    Program.Market.PrintTraders();
                    return(TRADER_LEFT);
                }

                case TRADE_SUCC:
                {
                    Program.Market.StockHolder = new Trader(splitLine[2]);
                    Console.WriteLine(Message.tradeUI(splitLine[1], splitLine[2]));
                    Program.Market.AddUIMessage(Message.tradeUI(splitLine[1], splitLine[2]));
                    return(TRADER_TRADE);
                }

                case TRADER_ACQ_STOCK:
                {
                    Program.Market.StockHolder = new Trader(splitLine[1]);
                    Console.WriteLine(Message.traderAcqUI(splitLine[1]));
                    Program.Market.AddUIMessage(Message.traderAcqUI(splitLine[1]));
                    return(TRADER_ACQ_STOCK);
                }

                default:
                {
                    throw new IndexOutOfRangeException();
                }
                }
            } catch (IndexOutOfRangeException e)
            {
                Program.Market.AddUIMessage(Message.error($"Incorrect command '{line}'"));
                return(MessageEnums.ERROR);
            }
        }