@@ -67,6 +67,12 @@ int Server::Init() {
int Server : : Ready ( ) {
int Server : : Ready ( ) {
int nbrjoueurs = 0 ,
int nbrjoueurs = 0 ,
nbrconn = 0 ;
nbrconn = 0 ;
char * buf = new char [ BUFFER_LENGTH ] ,
* strbuf = new char [ BUFFER_LENGTH ] ;
uint32_t buflen = BUFFER_LENGTH ,
strbuflen = BUFFER_LENGTH ;
bool readystart = false ;
do {
do {
Log ( " Entrez la dur<75> e de la partie: " , false , false ) ;
Log ( " Entrez la dur<75> e de la partie: " , false , false ) ;
std : : cin > > m_game . countdown ;
std : : cin > > m_game . countdown ;
@@ -90,15 +96,11 @@ int Server::Ready() {
return 1 ;
return 1 ;
}
}
char * buf = new char [ 150 ] ;
uint32_t buflen = 150 ;
bool readystart = false ;
srand ( time ( NULL ) ) ;
srand ( time ( NULL ) ) ;
buildIdList ( ID_LIST_SIZE ) ;
Log ( " <EFBFBD> l'<27> coute sur le port: " + std : : to_string ( SRV_PORT ) , false , false ) ;
Log ( " <EFBFBD> l'<27> coute sur le port: " + std : : to_string ( SRV_PORT ) , false , false ) ;
buildIdList ( ID_LIST_SIZE ) ;
while ( ! readystart ) {
while ( ! readystart ) {
sockaddr_in sockad ;
sockaddr_in sockad ;
addrlen_t addrlen = sizeof ( sockad ) ;
addrlen_t addrlen = sizeof ( sockad ) ;
@@ -107,9 +109,6 @@ int Server::Ready() {
if ( sock < 0 )
if ( sock < 0 )
Log ( " Erreur de connexion " , true , false ) ;
Log ( " Erreur de connexion " , true , false ) ;
else if ( sock > 0 ) {
else if ( sock > 0 ) {
static char * strbuf = new char [ BUFFER_LENGTH ] ;
uint32_t strbuflen = BUFFER_LENGTH ;
std : : string str = " Nouvelle connection provenant de: " ;
std : : string str = " Nouvelle connection provenant de: " ;
str . append ( inet_ntop ( AF_INET , & sockad . sin_addr , strbuf , strbuflen ) ) . append ( " : " ) . append ( std : : to_string ( sockad . sin_port ) ) ;
str . append ( inet_ntop ( AF_INET , & sockad . sin_addr , strbuf , strbuflen ) ) . append ( " : " ) . append ( std : : to_string ( sockad . sin_port ) ) ;
@@ -137,17 +136,17 @@ int Server::Ready() {
sendPack < LoginInfo > ( sock , log , & buf , & buflen ) ;
sendPack < LoginInfo > ( sock , log , & buf , & buflen ) ;
play . id = getUniqueId ( ) ;
play . id = getUniqueId ( ) ;
strcpy_s ( play . name , log - > name ) ;
strcpy ( play . name , log - > name ) ;
play . tid = log - > tid ;
play . tid = log - > tid ;
sendPack < GameInfo > ( sock , & m_game , & buf , & buflen ) ;
sendPack < GameInfo > ( sock , & m_game , & buf , & buflen ) ;
Connection * conn = new Connection ( sock , sockad , * log , play ) ;
Connection * conn = new Connection ( sock , sockad , * log , play ) ;
for ( auto & player : m_players ) {
for ( auto & [ key , player] : m_players ) {
sendPack < PlayerInfo > ( player . second - > getSock ( ) , & play , & buf , & buflen ) ; // Envoyer les infos de joueur distant aux joueurs d<> j<EFBFBD> connect<63> s
sendPack < PlayerInfo > ( player - > getSock ( ) , & play , & buf , & buflen ) ; // Envoyer les infos de joueur distant aux joueurs d<> j<EFBFBD> connect<63> s
buflen = BUFFER_LENGTH ;
buflen = BUFFER_LENGTH ;
sendPack < PlayerInfo > ( sock , player . second - > getInfo ( ) , & buf , & buflen ) ; // et envoyer les infos des joueurs distants au nouveau joueur.
sendPack < PlayerInfo > ( sock , player - > getInfo ( ) , & buf , & buflen ) ; // et envoyer les infos des joueurs distants au nouveau joueur.
buflen = BUFFER_LENGTH ;
buflen = BUFFER_LENGTH ;
}
}
@@ -160,6 +159,8 @@ int Server::Ready() {
}
}
}
}
}
}
delete buf ;
delete strbuf ;
return 0 ;
return 0 ;
}
}
@@ -168,12 +169,12 @@ void Server::Run() {
uint32_t buflen = BUFFER_LENGTH ;
uint32_t buflen = BUFFER_LENGTH ;
netprot : : Input in ;
netprot : : Input in ;
sockaddr_in sockad ;
sockaddr_in sockad ;
in t socklen = sizeof ( sockad ) ;
addrlen_ t socklen = sizeof ( sockad ) ;
Log ( " Debut de la partie... " , false , false ) ;
Log ( " Debut de la partie... " , false , false ) ;
for ( auto & conn : m_players ) // G<> rer le point de spawn des joueurs.
for ( auto & [ key , conn] : m_players ) // G<> rer le point de spawn des joueurs.
conn . second - > player = new Player ( Vector3f ( 64. , 128. , 64. ) ) ;
conn - > player = new Player ( Vector3f ( 64. , 128. , 64. ) ) ;
// TODO: Faire un premier sync pour que les joueurs partent <20> la bonne place.
// TODO: Faire un premier sync pour que les joueurs partent <20> la bonne place.
@@ -208,10 +209,11 @@ inline std::string Server::LogTimestamp() {
void Server : : Log ( std : : string str , bool is_error = false , bool is_fatal = false ) {
void Server : : Log ( std : : string str , bool is_error = false , bool is_fatal = false ) {
switch ( m_log ) {
switch ( m_log ) {
case LOG_DEST: : LOGFILE :
using enum LOG_DEST; // C++20!
case LOGFILE :
m_logfile < < LogTimestamp ( ) < < ( is_fatal ? " FATAL " : " " ) < < ( is_error ? " ERROR " : " " ) < < str < < std : : endl ;
m_logfile < < LogTimestamp ( ) < < ( is_fatal ? " FATAL " : " " ) < < ( is_error ? " ERROR " : " " ) < < str < < std : : endl ;
break ;
break ;
case LOG_DEST : : CONSOLE :
case CONSOLE :
default :
default :
std : : cout < < LogTimestamp ( ) < < ( is_fatal ? " FATAL " : " " ) < < ( is_error ? " ERROR " : " " ) < < str < < std : : endl ;
std : : cout < < LogTimestamp ( ) < < ( is_fatal ? " FATAL " : " " ) < < ( is_error ? " ERROR " : " " ) < < str < < std : : endl ;
break ;
break ;
@@ -222,6 +224,9 @@ void Server::Log(std::string str, bool is_error = false, bool is_fatal = false)
closesocket ( m_sock_udp ) ;
closesocket ( m_sock_udp ) ;
if ( m_sock_tcp )
if ( m_sock_tcp )
closesocket ( m_sock_tcp ) ;
closesocket ( m_sock_tcp ) ;
for ( auto & [ key , player ] : m_players )
closesocket ( player - > getSock ( ) ) ;
m_players . clear ( ) ;
# ifdef _WIN32
# ifdef _WIN32
WSACleanup ( ) ;
WSACleanup ( ) ;
# endif
# endif