C++ Problème de flux qui ne lis pas ce qu'il contient. (lors de la réutilisation du flux)
Salut!
Je possède une classe ITextArchive, celle-ci ne fait rien d'autre que de lire des fichiers ou bien des chaînes de caractères de différent format.
Mais là n'est pas le problème, bref, je veux envoyer des données sous forme de format texte en réseau, pour simplifier au maximum les choses, j'ai fais une classe qui se charge de transformer les données dans le format désiré avant de les mettre dans le flux.
Voici donc ce que ça donne à l'envoi :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
std::ostringstream oss;
OTextArchive oa(oss);
Hero* hero = static_cast<Hero*> (World::getEntities("E_HERO")[0]);
oa(hero);
SymEncPacket packet;
packet<<"CARINFOS"+oss.str();
user->sendTcpPacket(packet);
oss.str("");
Monster* monster = static_cast<Monster*>(World::getEntities("E_MONSTER")[0]);
oa(monster);
packet.clear();
packet<<"MONSTERSINFOS"+oss.str();
user->sendTcpPacket(packet); |
Jusque là pas de soucis, le soucis provient lors de la lecture :
Code:
1 2 3 4 5 6 7 8
|
std::string response = Network::waitForLastResponse("CARINFOS", sf::seconds(10.f));
std::istringstream iss(response);
ITextArchive ia(iss);
ia(hero);
response = Network::waitForLastResponse("MONSTERSINFOS", sf::seconds(10.f));
iss.str(response);
ia(monster); |
Il me lis très bien le hero, par contre, pour le monstre, cela foire car, après l'appel à str, il ne m'extrait pas les bonnes informations du flux, bref, lorsque j'affiche ce qu'il y a dans le flux et lorsque j'extrais ce qu'il y a dans le flux, je n'obtient pas la même chose, j'ai donc essayé de faire un seekg mais ça ne résous pas le problèmes. :/
J'ai cependant pu trouvé une solution en recréer un nouveau flux plutôt que de réutiliser le même :
Code:
1 2 3 4
|
std::istringstream iss2(response);
ITextArchive ia2(iss2);
ia2(monster); |
Voila si quelqu'un sait pourquoi la première solution ne fonctionne pas, merci d'avance pour l'aide.
Ca me surprend que avec ostringstream ça fonctionne sans problème mais que avec istringstream ça foire. :/