コード例 #1
0
        public void HandleMessage(ServerResponse sender, Event e)
        {
            Event.EventTypeEnum enumType = e.EventType;
            Account             acc      = new Account("NULL", "NULL");

            switch (enumType)
            {
            case Event.EventTypeEnum.CreateAccount:
                //Check list of all accounts and make sure the username isn't taken. If not, send new account

                LoginEventData createAccData = JsonConvert.DeserializeObject <LoginEventData>(e.EventData.ToString());
                bool           canCreate     = true;
                if (accountList == null)
                {
                    accountList = new List <Account>();
                }
                for (int i = 0; i < accountList.Count && canCreate; i++)
                {
                    string s = accountList.ElementAt(i).Username;
                    if (s == createAccData.Username)
                    {
                        canCreate = false;
                    }
                }
                if (canCreate)
                {
                    acc = new Account(createAccData.Username, createAccData.Password);
                    accountList.Add(acc);
                    logger.NormalMessage("New user created: " + createAccData.Username);

                    //Send success response
                    //sender.SendResponseToClient(new Event(Event.EventTypeEnum.ServerResponseSuccess, null));

                    //Send account data
                    sender.SendResponseToClient(new Event(Event.EventTypeEnum.ServerSendAccount, new AccountData(acc)));
                }
                else
                {
                    logger.ErrorMessage("User attempted to create an account with the same username as one that exists.");
                    sender.SendResponseToClient(new Event(Event.EventTypeEnum.ServerResponseError, "Account already exists. Try again."));
                }
                break;

            case Event.EventTypeEnum.LoginAttempt:
                //Find if the username exits. If so, make sure the password is correct. Send account data
                bool           found     = false;
                LoginEventData loginData = JsonConvert.DeserializeObject <LoginEventData>(e.EventData.ToString());
                for (int i = 0; i < accountList.Count && !found; i++)
                {
                    string u = accountList.ElementAt(i).Username;
                    if (u == loginData.Username)
                    {
                        found = true;
                        acc   = accountList.ElementAt(i);
                    }
                }
                if (loginData.Password == acc.Password)
                {
                    //Successful login attempt
                    logger.NormalMessage("User " + loginData.Username + " has logged in");
                    sender.SendResponseToClient(new Event(Event.EventTypeEnum.ServerResponseSuccess, null));
                    sender.SendResponseToClient(new Event(Event.EventTypeEnum.ServerSendAccount, acc));
                }
                else
                {
                    //Unsuccessful login attempt
                    logger.ErrorMessage("User " + loginData.Username + " made bad login attempt");
                    sender.SendResponseToClient(new Event(Event.EventTypeEnum.ServerResponseError, "We couldn't find that username/password combo. Try again."));
                }
                break;

            case Event.EventTypeEnum.NULLEVENTENUM:
                logger.ErrorMessage("Null event received in ServerHandler.HandleMessage()");
                break;
            }
        }
コード例 #2
0
        public void HandleMessage(ServerResponse sender, Event e)
        {
            Event.EventTypeEnum enumType = e.EventType;
            Account             acc      = new Account("NULL", "NULL");

            switch (enumType)
            {
            case Event.EventTypeEnum.CreateAccount:
                //Check list of all accounts and make sure the username isn't taken. If not, send new account
                LoginEventData createAccData = JsonConvert.DeserializeObject <LoginEventData>(e.EventData.ToString());
                bool           canCreate     = true;
                if (accountList == null)
                {
                    accountList = new List <Account>();
                }
                for (int i = 0; i < accountList.Count && canCreate; i++)
                {
                    string s = accountList.ElementAt(i).Username;
                    if (s == createAccData.Username)
                    {
                        canCreate = false;
                    }
                }
                if (canCreate)
                {
                    acc          = new Account(createAccData.Username, createAccData.Password);
                    acc.IsOnline = true;
                    accountList.Add(acc);
                    updateActivityList("New user created: " + createAccData.Username);
                    updateUserList(accountList);

                    //Send success response
                    //sender.SendResponseToClient(new Event(Event.EventTypeEnum.ServerResponseSuccess, null));

                    //Send account data
                    sender.SendResponseToClient(new Event(Event.EventTypeEnum.ServerSendAccount, new AccountData(acc)));
                }
                else
                {
                    updateActivityList("User attempted to create an account with the same username as one that exists.");
                    sender.SendResponseToClient(new Event(Event.EventTypeEnum.ServerResponseError, new ServerErrorData("Account already exists. Try again.")));
                }
                break;

            case Event.EventTypeEnum.LoginAttempt:
                //Find if the username exits. If so, make sure the password is correct. Send account data
                bool           found     = false;
                LoginEventData loginData = JsonConvert.DeserializeObject <LoginEventData>(e.EventData.ToString());
                for (int i = 0; i < accountList.Count && !found; i++)
                {
                    string u = accountList.ElementAt(i).Username;
                    if (u == loginData.Username)
                    {
                        found = true;
                        acc   = accountList.ElementAt(i);
                    }
                }
                if (loginData.Password == acc.Password)
                {
                    //Successful login attempt
                    updateActivityList("User " + loginData.Username + " has logged in");
                    acc.IsOnline = true;
                    updateUserList(accountList);

                    sender.SendResponseToClient(new Event(Event.EventTypeEnum.ServerSendAccount, new AccountData(acc)));
                }
                else
                {
                    //Unsuccessful login attempt
                    updateActivityList("User " + loginData.Username + " made bad login attempt");
                    sender.SendResponseToClient(new Event(Event.EventTypeEnum.ServerResponseError, new ServerErrorData("We couldn't find that username/password combo. Try again.")));
                }
                break;

            case Event.EventTypeEnum.UserLogOff:
                LoginEventData logOffData = JsonConvert.DeserializeObject <LoginEventData>(e.EventData.ToString());
                foreach (Account a in accountList)
                {
                    if (a.Username == logOffData.Username)
                    {
                        updateActivityList(a.Username + " has logged off");
                        a.IsOnline = false;
                        updateUserList(accountList);
                        break;
                    }
                }
                break;

            case Event.EventTypeEnum.ClientStockRequest:
                StockRequestData reqData        = JsonConvert.DeserializeObject <StockRequestData>(e.EventData.ToString());
                string           reqSymbol      = reqData.StockSymbol.ToUpper();
                bool             inStockList    = false;
                Stock            reqStockToSend = new Stock("NULL");
                for (int i = 0; i < stockList.Count; i++)
                {
                    string tStock = stockList.ElementAt(i).TickerSymbol;
                    if (tStock == reqSymbol)
                    {
                        inStockList = true;
                        stockList.ElementAt(i).UpdateStock();
                        reqStockToSend = stockList.ElementAt(i);
                        break;
                    }
                }
                if (!inStockList)
                {
                    Stock tStock = new Stock(reqSymbol);
                    reqStockToSend = tStock;
                    stockList.Add(tStock);
                }
                StockData sd             = new StockData(reqStockToSend);
                Event     reqEventToSend = new Event(Event.EventTypeEnum.ServerSendStock, sd);
                sender.SendResponseToClient(reqEventToSend);
                updateStockList(stockList);
                break;

            case Event.EventTypeEnum.NULLEVENTENUM:
                updateActivityList("Null event received in ServerHandler.HandleMessage()");
                break;
            }
        }