Salut,
je m'explique : j'ai une classe qui dérive de sf::Packet (EncryptedPacket) qui me permet de crypter les données que j'envoie, et j'utilise la classe sf::Packet pour transférer des données non cryptées. (Donc en gros j'utilise les 2 a la fois.)
Malheureusement lorsque j'envoie des données de type EncryptedPacket depuis le client, le serveur les interprète comme si c'étaient des données de type sf::Packet et donc ne rentre pas dans la méthode Receive de ma classe dérivée...
Bref je vais mettre du code, je pense que vous comprendrez mieux ce que j'essaye de faire :
Le serveur ne fait rien d'autre que d'intercepter les messages envoyé par le client, et il envoie la clé publique à la demande du client pour que le client puisse ensuite crypter les messages qu'il envoie.
void SrkServer::run () {
while (true) {
unsigned int nbSockets = selector.Wait();
for (unsigned int i = 0; i < nbSockets; ++i)
{
SocketTCP socket = selector.GetSocketReady(i);
if (socket == listner) {
IPAddress clientAddress;
SocketTCP client;
socket.Accept(client, &clientAddress);
cout<<"Client connected : "<<clientAddress<<endl;
selector.Add(client);
} else {
Packet packet;
if (socket.Receive(packet) == Socket::Done) {
cout<<typeid(packet).name()<<endl;
string message;
packet>>message;
if (message == "GetPbKey") {
packet.Clear();
string message = Rsa::getPbKeyString();
packet<<message;
socket.Send(packet);
} else {
string message;
packet>>message;
cout<<"Client said : "<<message<<endl;
}
} else {
//channels[0]->removeClient(socket);
selector.Remove(socket);
}
}
}
}
}
J'ai fait un typeId sur le sf::Packet pour voir et les packets sont toujours de type sf::Packet et non de type EncryptedPacket
Y a t'il un moyen de pouvoir recevoir ou d'envoyer des paquets de différentes sortes avec la SFML ?