@@ -127,17 +127,16 @@ int Server::Ready() {
str . append ( inet_ntop ( AF_INET , & sockad . sin_addr , m_buf . ptr , m_buf . len ) ) . append ( " : " ) . append ( std : : to_string ( sockad . sin_port ) ) ;
if ( recv ( sock , m_buf . ptr , m_buf . len , 0 ) > 0 ) {
LoginInfo * log ;
PlayerInfo play ;
Packet pck = getPack ( & m_buf ) ;
if ( pck . type ! = PACKET_TYPE : : LOGINF ) {
Log ( " Paquet invalide. " , true , false ) ;
if ( pck . type ! = PACKET_TYPE : : ERR )
emptyPack ( pck ) ;
netprot : : emptyPack( pck ) ;
continue ; // Passer au prochain appel si c'est pas un LoginInfo ou un LoginInfo invalide qui rentre.
}
log = ( LoginInfo * ) pck . ptr ;
LoginInfo * log = ( LoginInfo * ) pck . ptr ;
log - > sid = getUniqueId ( ) ;
log - > tid = 0 ; // TODO: À changer si on implemente un mode en equipe.
@@ -155,14 +154,16 @@ int Server::Ready() {
play . tid = log - > tid ;
sendPack < GameInfo > ( sock , & m_game , & m_buf . ptr , & m_buf . len ) ;
Connection * conn = new Connection ( sock , sockad , * log , play ) ;
std : : unique_ptr < Connection> conn = std : : make_unique < Connection > ( sock , sockad , * log , play ) ;
for ( auto & [ key , player ] : m_players ) {
sendPack < PlayerInfo > ( player - > getSock ( ) , & play , & m_buf ) ; // Envoyer les infos de joueur distant aux joueurs d<> j<EFBFBD> connect<63> s
sendPack < PlayerInfo > ( sock , player - > getInfo ( ) , & m_buf ) ; // et envoyer les infos des joueurs distants au nouveau joueur.
}
m_players [ log - > sid ] = conn ;
m_players [ log - > sid ] = std : : move ( conn) ;
delete log ;
if ( + + nbrconn > = nbrjoueurs )
readystart = true ;
@@ -179,12 +180,15 @@ void Server::Run() {
Log ( " Debut de la partie... " , false , false ) ;
for ( auto & [ key , conn ] : m_players ) { // Creation des instances de joueurs et premier sync.
conn - > player = new Player ( Vector3f ( 8.5f , CHUNK_SIZE_Y + 1.8f , 8.5f ) ) ;
Player * player = conn - > player ;
m_world = std : : make_unique < World > ( ) ;
m_world - > SetSeed ( m_game . seed ) ;
m_world - > BuildWorld ( ) ;
for ( auto & [ key , conn ] : m_players ) { // Creation des instances de joueurs et premier sync.
conn - > player = std : : make_unique < Player > ( Vector3f ( 8.5f , CHUNK_SIZE_Y + 1.8f , 8.5f ) ) ;
Sync sync ;
sync . position = player - > GetPosition ( ) ;
sync . hp = player - > GetHP ( ) ;
sync . position = conn - > player- > GetPosition ( ) ;
sync . hp = conn - > player- > GetHP ( ) ;
sync . sid = key ;
sync . ammo = 0 ;
sync . timestamp = 0 ;
@@ -197,56 +201,25 @@ void Server::Run() {
Packet pck = getPack ( & m_buf ) ;
switch ( pck . type ) {
using enum netprot : : PACKET_TYPE ;
case ERR :
std : : cout < < " ERROR! " < < std : : endl ;
break ;
case INPUT :
std : : cout < < " INPUT! " < < std : : endl ;
break ;
case OUTPUT :
std : : cout < < " OUTPUT! " < < std : : endl ;
break ;
case SYNC :
std : : cout < < " SYNC! " < < std : : endl ;
break ;
case TEAM INF:
std : : cout < < " TEAMINF! " < < std : : endl ;
break ;
case SELFINF :
std : : cout < < " SELFINF! " < < std : : endl ;
break ;
case PLAYINF :
std : : cout < < " PLAYINF! " < < std : : endl ;
break ;
case LOGINF :
std : : cout < < " LOGINF! " < < std : : endl ;
break ;
case CHUNKMOD :
std : : cout < < " CHUNKMOD! " < < std : : endl ;
break ;
case PLAYERMOD :
std : : cout < < " PLAYERMOD! " < < std : : endl ;
break ;
case PICKUPMOD :
std : : cout < < " PICKUPMOD! " < < std : : endl ;
break ;
case GAMEINFO :
std : : cout < < " GAMEINFO! " < < std : : endl ;
break ;
case ENDINFO :
std : : cout < < " ENDINFO! " < < std : : endl ;
break ;
case CHAT :
std : : cout < < " CHAT! " < < std : : endl ;
break ;
case ERRLOG :
std : : cout < < " ERRLOG! " < < std : : endl ;
break ;
case LAST_PACK :
std : : cout < < " wtf?! " < < std : : endl ;
break ;
case ERR : std : : puts ( " ERROR! " ) ; break ;
case INPUT : std : : puts ( " INPUT! " ) ; break ;
case OUTPUT : std : : puts ( " OUTPUT! " ) ; break ;
case SYNC : std : : puts ( " SYNC! " ) ; break ;
case TEAMINF : std : : puts ( " TEAMINF! " ) ; break ;
case SELFINF : std : : puts ( " SELFINF! " ) ; break ;
case PLAYINF : std : : puts ( " PLAYINF! " ) ; break ;
case LOGINF : std : : puts ( " LOGINF! " ) ; break ;
case CHUNKMOD : std : : puts ( " CHUNKMOD! " ) ; break ;
case PLAYERMOD : std : : puts ( " PLAYERMOD! " ) ; break ;
case PICKUPMOD : std : : puts ( " PICKUPMOD! " ) ; break ;
case GAMEINFO : std : : puts ( " GAMEINFO! " ) ; break ;
case END INFO : std : : puts ( " ENDINFO! " ) ; break ;
case CHAT : std : : puts ( " CHAT! " ) ; break ;
case ERRLOG : std : : puts ( " ERRLOG! " ) ; break ;
case LAST_PACK : [[falltrough]] ;
default : std : : puts ( " wtf?! " ) ; break ;
}
emptyPack ( pck ) ;
netprot : : emptyPack( pck ) ;
}
}
}
@@ -290,7 +263,6 @@ void Server::Log(std::string str, bool is_error = false, bool is_fatal = false)
if ( m_sock_tcp )
closesocket ( m_sock_tcp ) ;
for ( const auto & [ key , player ] : m_players ) {
delete player - > player ;
closesocket ( player - > getSock ( ) ) ;
}
m_players . clear ( ) ;
@@ -305,7 +277,7 @@ void Server::buildIdList(size_t size) {
std : : set < uint64_t > lst ;
srand ( time ( NULL ) ) ;
do lst . insert ( ( ( uint64_t ) rand ( ) < < 32 | rand ( ) ) ) ; // EIGHT SIX SEVENFIVE THREE AUGHT NIIIIIIiIIiiIiINE!
do lst . insert ( ( ( uint64_t ) rand ( ) < < 32 | rand ( ) ) ) ;
while ( lst . size ( ) < size ) ;
m_ids = std : : vector < uint64_t > ( lst . begin ( ) , lst . end ( ) ) ;