src/network/network_udp.cpp
branchgamebalance
changeset 9895 7bd07f43b0e3
parent 6504 5578f2fa1a73
child 6307 f40e88cff863
equal deleted inserted replaced
9894:70d78ac95d6c 9895:7bd07f43b0e3
   286 		const GRFConfig *c;
   286 		const GRFConfig *c;
   287 		uint in_request_count = 0;
   287 		uint in_request_count = 0;
   288 		struct sockaddr_in out_addr;
   288 		struct sockaddr_in out_addr;
   289 
   289 
   290 		for (c = item->info.grfconfig; c != NULL; c = c->next) {
   290 		for (c = item->info.grfconfig; c != NULL; c = c->next) {
   291 			if (HASBIT(c->flags, GCF_NOT_FOUND)) item->info.compatible = false;
   291 			if (c->status == GCS_NOT_FOUND) item->info.compatible = false;
   292 			if (!HASBIT(c->flags, GCF_NOT_FOUND) || strcmp(c->name, UNKNOWN_GRF_NAME_PLACEHOLDER) != 0) continue;
   292 			if (c->status == GCS_NOT_FOUND || strcmp(c->name, UNKNOWN_GRF_NAME_PLACEHOLDER) != 0) continue;
   293 			in_request[in_request_count] = c;
   293 			in_request[in_request_count] = c;
   294 			in_request_count++;
   294 			in_request_count++;
   295 		}
   295 		}
   296 
   296 
   297 		if (in_request_count > 0) {
   297 		if (in_request_count > 0) {
   390 	if (f == NULL) {
   390 	if (f == NULL) {
   391 		/* Don't know the GRF, so mark game incompatible and the (possibly)
   391 		/* Don't know the GRF, so mark game incompatible and the (possibly)
   392 		 * already resolved name for this GRF (another server has sent the
   392 		 * already resolved name for this GRF (another server has sent the
   393 		 * name of the GRF already */
   393 		 * name of the GRF already */
   394 		config->name     = FindUnknownGRFName(config->grfid, config->md5sum, true);
   394 		config->name     = FindUnknownGRFName(config->grfid, config->md5sum, true);
   395 		SETBIT(config->flags, GCF_NOT_FOUND);
   395 		config->status   = GCS_NOT_FOUND;
   396 	} else {
   396 	} else {
   397 		config->filename = f->filename;
   397 		config->filename = f->filename;
   398 		config->name     = f->name;
   398 		config->name     = f->name;
   399 		config->info     = f->info;
   399 		config->info     = f->info;
   400 	}
   400 	}
   401 	SETBIT(config->flags, GCF_COPY);
   401 	SETBIT(config->flags, GCF_COPY);
   402 }
   402 }
   403 
   403 
   404 // Close UDP connection
   404 // Close UDP connection
   405 void NetworkUDPCloseAll(void)
   405 void NetworkUDPCloseAll()
   406 {
   406 {
   407 	DEBUG(net, 1, "[udp] closed listeners");
   407 	DEBUG(net, 1, "[udp] closed listeners");
   408 
   408 
   409 	_udp_server_socket->Close();
   409 	_udp_server_socket->Close();
   410 	_udp_master_socket->Close();
   410 	_udp_master_socket->Close();
   433 	}
   433 	}
   434 }
   434 }
   435 
   435 
   436 
   436 
   437 // Request the the server-list from the master server
   437 // Request the the server-list from the master server
   438 void NetworkUDPQueryMasterServer(void)
   438 void NetworkUDPQueryMasterServer()
   439 {
   439 {
   440 	struct sockaddr_in out_addr;
   440 	struct sockaddr_in out_addr;
   441 
   441 
   442 	if (!_udp_client_socket->IsConnected()) {
   442 	if (!_udp_client_socket->IsConnected()) {
   443 		if (!_udp_client_socket->Listen(0, 0, true)) return;
   443 		if (!_udp_client_socket->Listen(0, 0, true)) return;
   456 
   456 
   457 	DEBUG(net, 2, "[udp] master server queried at %s:%d", inet_ntoa(out_addr.sin_addr), ntohs(out_addr.sin_port));
   457 	DEBUG(net, 2, "[udp] master server queried at %s:%d", inet_ntoa(out_addr.sin_addr), ntohs(out_addr.sin_port));
   458 }
   458 }
   459 
   459 
   460 // Find all servers
   460 // Find all servers
   461 void NetworkUDPSearchGame(void)
   461 void NetworkUDPSearchGame()
   462 {
   462 {
   463 	// We are still searching..
   463 	// We are still searching..
   464 	if (_network_udp_broadcast > 0) return;
   464 	if (_network_udp_broadcast > 0) return;
   465 
   465 
   466 	// No UDP-socket yet..
   466 	// No UDP-socket yet..
   502 
   502 
   503 	UpdateNetworkGameWindow(false);
   503 	UpdateNetworkGameWindow(false);
   504 }
   504 }
   505 
   505 
   506 /* Remove our advertise from the master-server */
   506 /* Remove our advertise from the master-server */
   507 void NetworkUDPRemoveAdvertise(void)
   507 void NetworkUDPRemoveAdvertise()
   508 {
   508 {
   509 	struct sockaddr_in out_addr;
   509 	struct sockaddr_in out_addr;
   510 
   510 
   511 	/* Check if we are advertising */
   511 	/* Check if we are advertising */
   512 	if (!_networking || !_network_server || !_network_udp_server) return;
   512 	if (!_networking || !_network_server || !_network_udp_server) return;
   531 	_udp_master_socket->SendPacket(&p, &out_addr);
   531 	_udp_master_socket->SendPacket(&p, &out_addr);
   532 }
   532 }
   533 
   533 
   534 /* Register us to the master server
   534 /* Register us to the master server
   535      This function checks if it needs to send an advertise */
   535      This function checks if it needs to send an advertise */
   536 void NetworkUDPAdvertise(void)
   536 void NetworkUDPAdvertise()
   537 {
   537 {
   538 	struct sockaddr_in out_addr;
   538 	struct sockaddr_in out_addr;
   539 
   539 
   540 	/* Check if we should send an advertise */
   540 	/* Check if we should send an advertise */
   541 	if (!_networking || !_network_server || !_network_udp_server || !_network_advertise)
   541 	if (!_networking || !_network_server || !_network_udp_server || !_network_advertise)
   578 	p.Send_uint8 (NETWORK_MASTER_SERVER_VERSION);
   578 	p.Send_uint8 (NETWORK_MASTER_SERVER_VERSION);
   579 	p.Send_uint16(_network_server_port);
   579 	p.Send_uint16(_network_server_port);
   580 	_udp_master_socket->SendPacket(&p, &out_addr);
   580 	_udp_master_socket->SendPacket(&p, &out_addr);
   581 }
   581 }
   582 
   582 
   583 void NetworkUDPInitialize(void)
   583 void NetworkUDPInitialize()
   584 {
   584 {
   585 	_udp_client_socket = new ClientNetworkUDPSocketHandler();
   585 	_udp_client_socket = new ClientNetworkUDPSocketHandler();
   586 	_udp_server_socket = new ServerNetworkUDPSocketHandler();
   586 	_udp_server_socket = new ServerNetworkUDPSocketHandler();
   587 	_udp_master_socket = new MasterNetworkUDPSocketHandler();
   587 	_udp_master_socket = new MasterNetworkUDPSocketHandler();
   588 
   588 
   589 	_network_udp_server = false;
   589 	_network_udp_server = false;
   590 	_network_udp_broadcast = 0;
   590 	_network_udp_broadcast = 0;
   591 }
   591 }
   592 
   592 
   593 void NetworkUDPShutdown(void)
   593 void NetworkUDPShutdown()
   594 {
   594 {
   595 	NetworkUDPCloseAll();
   595 	NetworkUDPCloseAll();
   596 
   596 
   597 	delete _udp_client_socket;
   597 	delete _udp_client_socket;
   598 	delete _udp_server_socket;
   598 	delete _udp_server_socket;