jam231 / sia

Stock market server (part of stock market simulation system).
1 stars 0 forks source link

Watpliwosci co do m_cachedLastOrder #23

Closed marimarek closed 11 years ago

marimarek commented 11 years ago

Pry robienie nowej wiadomsci refaktoruje przy okazji troche order i bestorder i mam tu watpliwosci, czy to ma tak dzialac narazie sie w to niewglebialem, ale na pierwszy rzut oka to m_cachedLastOrder morze nie zawierac poprawnej wartosci jesli nie ma zadnych subskrybentow na akcje stockId.

qDebug() << "[Market] Użytkownik o id =" << userId
              << "zleca transakcje kupna" << amount
              << "dobra o id =" << stockId
              << "za cenę" << price;

     QSqlQuery query(m_database);

     query.prepare("SELECT zlec_kupno(:userId, :stockId, :amount, :price);");
     /* TODO:
      *  Jeżeli się da to naprawić.
      */
     query.bindValue(":userId", userId);
     query.bindValue(":stockId", stockId);
     query.bindValue(":amount", amount);
     query.bindValue(":price", price);

     query.setForwardOnly(true);

     m_database.transaction();

     query.exec();

     m_database.commit();
     if(!query.lastError().isValid())
     {
         // Wyslij wszystkim zasubskrybowanym informacje o nowym zleceniu
         OrderMsg msg(OrderType::BUY, stockId, amount, price);

         // Zachowaj jako ostatnia wiadomosc
         m_cachedLastOrder.fromValue(msg);

         m_server->send(msg);
     }
     else
     {
         qDebug() << "[Market] Błąd przy zleceniu kupna"
                  << query.lastError().text();
     }

Jelsi to jest blad to nie naprawiajcie go do mojego nastepnego commit'a za jakies 0,5h, bo beda problemy z merg'em.

jam231 commented 11 years ago

Subskrybenci nie mają nic do rzeczy - wartość m_cachedLastOrder jest aktualizowana po kazdym nowym zleceniu. Problem pojawia się przy starcie serwera, kiedy nikt jeszcze nie zlecil (poprzez serwer) zadnej transakcji. A ten problem jest dokladnie w momencie logowania uzytkownika.

marimarek commented 11 years ago

Ok, szybko tylko spojrzalem i myslalem, ze to zapytanie SQL zwraca subskrybentow, teraz juz widze wszystko.