SQC-15_online #1
| @@ -45,6 +45,8 @@ SOCKET Connection::getSock() const { return m_sock; } | |||||||
|  |  | ||||||
| PlayerInfo* Connection::getInfo() const { return (PlayerInfo*)&m_playinfo; } | PlayerInfo* Connection::getInfo() const { return (PlayerInfo*)&m_playinfo; } | ||||||
|  |  | ||||||
|  | sockaddr_in* Connection::getAddr() const { return (sockaddr_in*)&m_addr; } | ||||||
|  |  | ||||||
| void Connection::CleanInputManifest(Timestamp time) { | void Connection::CleanInputManifest(Timestamp time) { | ||||||
| 	auto wat = m_input_manifest.find(time); | 	auto wat = m_input_manifest.find(time); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -30,6 +30,7 @@ public: | |||||||
| 	Sync getSync(Timestamp time); | 	Sync getSync(Timestamp time); | ||||||
| 	SOCKET getSock() const; | 	SOCKET getSock() const; | ||||||
| 	PlayerInfo* getInfo() const; | 	PlayerInfo* getInfo() const; | ||||||
|  | 	sockaddr_in* getAddr() const; | ||||||
|  |  | ||||||
| 	void CleanInputManifest(Timestamp time); | 	void CleanInputManifest(Timestamp time); | ||||||
| private: | private: | ||||||
|   | |||||||
| @@ -77,7 +77,7 @@ int Server::Ready() { | |||||||
| 	bool readystart = false; | 	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; | ||||||
| 		std::cout << std::endl; | 		std::cout << std::endl; | ||||||
| 	} while (m_game.countdown < 1); | 	} while (m_game.countdown < 1); | ||||||
| @@ -95,13 +95,13 @@ int Server::Ready() { | |||||||
| 	m_game.gameType = 1; | 	m_game.gameType = 1; | ||||||
|  |  | ||||||
| 	if (listen(m_sock_tcp, MAX_CONNECTIONS) < 0) { | 	if (listen(m_sock_tcp, MAX_CONNECTIONS) < 0) { | ||||||
| 		Log("<EFBFBD>coute sur le port TCP.", true, true); | 		Log("Ecoute sur le port TCP.", true, true); | ||||||
| 		return 1; | 		return 1; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	buildIdList(ID_LIST_SIZE); | 	buildIdList(ID_LIST_SIZE); | ||||||
| 	 | 	 | ||||||
| 	Log("<EFBFBD> l'<EFBFBD>coute sur le port: " + std::to_string(SRV_PORT), false, false); | 	Log("A l'ecoute sur le port: " + std::to_string(SRV_PORT), false, false); | ||||||
| 	 | 	 | ||||||
| 	while (!readystart) { | 	while (!readystart) { | ||||||
| 		sockaddr_in sockad; | 		sockaddr_in sockad; | ||||||
| @@ -111,7 +111,7 @@ 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) { | ||||||
| 			std::string str = "Nouvelle connection provenant de: "; | 			std::string str = "Nouvelle connexion 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)); | ||||||
|  |  | ||||||
| 			if (recv(sock, buf, buflen, 0) > 0) { | 			if (recv(sock, buf, buflen, 0) > 0) { | ||||||
| @@ -146,7 +146,7 @@ int Server::Ready() { | |||||||
| 				Connection* conn = new Connection(sock, sockad, *log, play); | 				Connection* conn = new Connection(sock, sockad, *log, play); | ||||||
|  |  | ||||||
| 				for (auto& [key, player] : m_players) { | 				for (auto& [key, player] : m_players) { | ||||||
| 					sendPack<PlayerInfo>(player->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->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; | ||||||
| @@ -169,16 +169,24 @@ int Server::Ready() { | |||||||
| void Server::Run() { | void Server::Run() { | ||||||
| 	char* buf = new char[BUFFER_LENGTH]; | 	char* buf = new char[BUFFER_LENGTH]; | ||||||
| 	uint32_t buflen = BUFFER_LENGTH; | 	uint32_t buflen = BUFFER_LENGTH; | ||||||
| 	netprot::Input in; | 	Input in; | ||||||
| 	sockaddr_in sockad; | 	sockaddr_in sockad; | ||||||
| 	addrlen_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& [key, conn]: m_players) // G<>rer le point de spawn des joueurs. | 	for (auto& [key, conn]: m_players) { // Creation des instances de joueurs et premier sync. | ||||||
| 		conn->player = new Player(Vector3f(64., 128., 64.)); | 		conn->player = new Player(Vector3f(64., 128., 64.)); | ||||||
|  | 		Player *player = conn->player; | ||||||
| 	// TODO: Faire un premier sync pour que les joueurs partent <20> la bonne place. | 		Sync sync; | ||||||
|  | 		sync.position = player->GetPosition(); | ||||||
|  | 		sync.hp = player->GetHP(); | ||||||
|  | 		sync.sid = key; | ||||||
|  | 		sync.ammo = 0; | ||||||
|  | 		sync.timestamp = 0; | ||||||
|  | 		sync.timer = m_game.countdown; | ||||||
|  | 		sendPackTo<Sync>(conn->getSock(), &sync, &buf, &buflen, conn->getAddr()); | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	while (true) { | 	while (true) { | ||||||
| 		if (recvfrom(m_sock_udp, buf, BUFFER_LENGTH, 0, (sockaddr*)&sockad, &socklen) > 0) { | 		if (recvfrom(m_sock_udp, buf, BUFFER_LENGTH, 0, (sockaddr*)&sockad, &socklen) > 0) { | ||||||
| @@ -228,8 +236,10 @@ 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 (const auto& [key, player] : m_players) | 		for (const auto& [key, player] : m_players) { | ||||||
|  | 			delete player->player; | ||||||
| 			closesocket(player->getSock()); | 			closesocket(player->getSock()); | ||||||
|  | 		} | ||||||
| 		m_players.clear(); | 		m_players.clear(); | ||||||
| #ifdef _WIN32 | #ifdef _WIN32 | ||||||
| 		WSACleanup(); | 		WSACleanup(); | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								SQCSim2021/media/audio/whitenoise.ogg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								SQCSim2021/media/audio/whitenoise.ogg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
		Reference in New Issue
	
	Block a user