예제 #1
0
        // aktualizacja danych obiektu po odebraniu ich z sieci
        internal void Update(DTO.MarketOfferData data)
        {
            //TODO: NOL3 na razie przysyła zawsze Level=1 i bez określenia nowy/zmiana.
            data.Update = (Count > 0);

            if (data.Level > (data.Update ? Count : Count + 1))
            {
                MyUtil.PrintWarning(string.Format("BosOffers.Update - unexpected level: {0} (current max: {1})", data.Level, Count));
                while (list.Count < data.Level)
                {
                    list.Add(null);
                }
            }
            var n = data.Level - 1;

            if (data.Volume > 0)
            {
                var offer = new BosOffer(data);
                if (data.Update)
                {
                    list[n] = offer;
                }
                else
                {
                    list.Insert(n, offer);
                }
            }
            else
            {
                list.RemoveAt(n);
            }
        }
예제 #2
0
        /// <summary>
        /// Próba zalogowania się w aplikacji NOL3.
        /// Normalnie metoda ta jest wywoływana automatycznie już przy utworzeniu obiektu NolClient...
        /// chyba że skorzystaliśmy z jednego z dodatkowych konstruktorów, pomijając automatyczne zalogowanie.
        /// </summary>
        public void Login()
        {
            Debug.WriteLine("\nLogin...");
StartLogin:
            using (Socket socket = GetSyncSocket())
            {
                UserRequestMsg request = new UserRequestMsg();
                request.Type     = UserRequestType.Login;
                request.Username = "******";
                request.Password = "******";
                request.Send(socket);
                try
                {
                    UserResponseMsg response = new UserResponseMsg(socket);
                    if ((response.Status == UserStatus.Other) && (response.StatusText == "User is already logged"))
                    {
                        MyUtil.PrintWarning("NOL says: We're already logged in !?");
                    }
                    else
                    if (response.Status != UserStatus.LoggedIn)
                    {
                        throw new FixmlErrorMsgException(response);
                    }
                }
                catch (BizMessageRejectException e)
                {
                    // całe to przechwytywanie wyjątków i powtórki możnaby pominąć, gdyby NOL nie blokował
                    // numerku ReqID, jeśli jego poprzedni klient nie zrealizował prawidłowo logowania/wylogowania
                    if (e.Msg.RejectText == "Incorrect UserReqID")
                    {
                        if (request.Id < 100)
                        {
                            goto StartLogin;                                            // każdy kolejny UserRequestMsg z większym "Id"
                        }
                        else
                        {
                            throw new FixmlException("UserReqID limit reached!");
                        }
                    }
                    else
                    {
                        throw;
                    }
                }
            }
            loggedIn = true;
            Debug.WriteLine("Login OK\n");
        }