31
Réseau / Re: Problème de réception de données côté Client..
« le: Juillet 02, 2017, 01:53:53 pm »
Merci infiniment Laurent, j'ai résolu le problème en supprimant le Selector ! Je viens d'apprendre quelque chose finalement :-]
Voici mon Serveur complet & parfaitement OK maintenant :
Merci à toi ! UNE FOIS DE PLUS ! :-D
Voici mon Serveur complet & parfaitement OK maintenant :
#include "../../Headers/Network/Network.h"
Network::Network(std::vector<Client>& vecClient) :
m_Client(vecClient)
{
}
void Network::Launch(USHORT port)
{
m_port = port;
if (m_listener.listen(m_port) == sf::Socket::Done)
{
std::cout << "Serveur lance sur le port " << m_port << std::endl;
m_isRunning = true;
m_listener.setBlocking(false);
} else {
std::cout << "Impossible de lancer le serveur sur le port " << m_port << std::endl;
}
}
void Network::MainLoop()
{
PushNewUser();
SendToClients();
ReceiveAndSendData();
}
void Network::PushNewUser()
{
sf::TcpSocket *socket = new sf::TcpSocket();
socket->setBlocking(false);
sf::Uint16 idNumber = 1;
if (m_listener.accept(*socket) == sf::Socket::Done)
{
while (m_Client[idNumber].getIdNumber()!=0)
idNumber++;
if (idNumber <= 4)
{
m_Client[idNumber].setSocket(socket);
m_Client[idNumber].setState(true);
m_Client[idNumber].setIdNumber(idNumber);
} else {
m_blackList.push_back(socket);
CheckBlackList();
}
}
}
void Network::CheckBlackList()
{
if (m_blackList.size() > 0)
{
for (unsigned int i = 0 ; i < m_blackList.size() ; i++)
{
sf::Packet sendPacket;
sendPacket << DATA::INFO << "FULL";
m_Client[i].getSocket()->send(sendPacket);
m_blackList.erase(m_blackList.begin()+i);
}
}
}
void Network::SendToClients()
{
if (_kbhit())
{
if (_getch() == 'w')
{
for (unsigned int i = 0 ; i < m_Client.size() ; i++)
{
if (m_Client[i].getIdNumber() !=0)
{
sf::Packet packTest;
packTest << DATA::INFO << sf::Uint16(0) << "Salut ! ";
m_Client[i].getSocket()->send(packTest);
std::cout << "Message du serveur envoye au(x) client(s)." << std::endl;
}
}
}
}
}
void Network::ReceiveAndSendData()
{
for (unsigned int i = 0 ; i < m_Client.size() ; i++)
{
if (m_Client[i].getIdNumber()!=0)
{
sf::Packet receivePacket;
if (m_Client[i].getSocket()->receive(receivePacket) == sf::Socket::Done)
{
sf::Uint32 checker;
receivePacket >> checker;
switch(checker)
{
case DATA::INFO:
{
std::string information;
receivePacket >> information;
std::cout << "DATA::INFO du Client N " << m_Client[i].getIdNumber() << " : " << information << std::endl;
sf::Packet sendPacket;
sendPacket << DATA::INFO << information;
m_Client[i].getSocket()->send(sendPacket);
}
break;
case DATA::USERNAME:
{
std::string username;
receivePacket >> username;
m_Client[i].setUsername(username);
std::cout << username << " vient de se connecter." << std::endl;
sf::Packet sendPacket;
sendPacket << DATA::USERNAME << sf::Uint16(0) << m_Client[i].getUsername();
m_Client[i].getSocket()->send(sendPacket);
}
break;
case DATA::DIRECTION:
{
sf::Uint32 direction;
receivePacket >> direction;
std::cout << "DATA::DIRECTION du Client N " << m_Client[i].getIdNumber() << " : " << direction << std::endl;
sf::Packet sendPacket;
sendPacket << DATA::DIRECTION << sf::Uint16(0) << direction;
m_Client[i].getSocket()->send(sendPacket);
}
break;
}
}
}
}
}
///GETTERS///
bool Network::isRunning() const { return m_isRunning; }
Network::Network(std::vector<Client>& vecClient) :
m_Client(vecClient)
{
}
void Network::Launch(USHORT port)
{
m_port = port;
if (m_listener.listen(m_port) == sf::Socket::Done)
{
std::cout << "Serveur lance sur le port " << m_port << std::endl;
m_isRunning = true;
m_listener.setBlocking(false);
} else {
std::cout << "Impossible de lancer le serveur sur le port " << m_port << std::endl;
}
}
void Network::MainLoop()
{
PushNewUser();
SendToClients();
ReceiveAndSendData();
}
void Network::PushNewUser()
{
sf::TcpSocket *socket = new sf::TcpSocket();
socket->setBlocking(false);
sf::Uint16 idNumber = 1;
if (m_listener.accept(*socket) == sf::Socket::Done)
{
while (m_Client[idNumber].getIdNumber()!=0)
idNumber++;
if (idNumber <= 4)
{
m_Client[idNumber].setSocket(socket);
m_Client[idNumber].setState(true);
m_Client[idNumber].setIdNumber(idNumber);
} else {
m_blackList.push_back(socket);
CheckBlackList();
}
}
}
void Network::CheckBlackList()
{
if (m_blackList.size() > 0)
{
for (unsigned int i = 0 ; i < m_blackList.size() ; i++)
{
sf::Packet sendPacket;
sendPacket << DATA::INFO << "FULL";
m_Client[i].getSocket()->send(sendPacket);
m_blackList.erase(m_blackList.begin()+i);
}
}
}
void Network::SendToClients()
{
if (_kbhit())
{
if (_getch() == 'w')
{
for (unsigned int i = 0 ; i < m_Client.size() ; i++)
{
if (m_Client[i].getIdNumber() !=0)
{
sf::Packet packTest;
packTest << DATA::INFO << sf::Uint16(0) << "Salut ! ";
m_Client[i].getSocket()->send(packTest);
std::cout << "Message du serveur envoye au(x) client(s)." << std::endl;
}
}
}
}
}
void Network::ReceiveAndSendData()
{
for (unsigned int i = 0 ; i < m_Client.size() ; i++)
{
if (m_Client[i].getIdNumber()!=0)
{
sf::Packet receivePacket;
if (m_Client[i].getSocket()->receive(receivePacket) == sf::Socket::Done)
{
sf::Uint32 checker;
receivePacket >> checker;
switch(checker)
{
case DATA::INFO:
{
std::string information;
receivePacket >> information;
std::cout << "DATA::INFO du Client N " << m_Client[i].getIdNumber() << " : " << information << std::endl;
sf::Packet sendPacket;
sendPacket << DATA::INFO << information;
m_Client[i].getSocket()->send(sendPacket);
}
break;
case DATA::USERNAME:
{
std::string username;
receivePacket >> username;
m_Client[i].setUsername(username);
std::cout << username << " vient de se connecter." << std::endl;
sf::Packet sendPacket;
sendPacket << DATA::USERNAME << sf::Uint16(0) << m_Client[i].getUsername();
m_Client[i].getSocket()->send(sendPacket);
}
break;
case DATA::DIRECTION:
{
sf::Uint32 direction;
receivePacket >> direction;
std::cout << "DATA::DIRECTION du Client N " << m_Client[i].getIdNumber() << " : " << direction << std::endl;
sf::Packet sendPacket;
sendPacket << DATA::DIRECTION << sf::Uint16(0) << direction;
m_Client[i].getSocket()->send(sendPacket);
}
break;
}
}
}
}
}
///GETTERS///
bool Network::isRunning() const { return m_isRunning; }
Merci à toi ! UNE FOIS DE PLUS ! :-D