src/network/network.cpp
changeset 5870 86e55167c9e3
parent 5838 9c3129cb019b
child 5875 4a1391019791
equal deleted inserted replaced
5869:33d51b7f639d 5870:86e55167c9e3
    39 #include "../md5.h"
    39 #include "../md5.h"
    40 
    40 
    41 // global variables (declared in network_data.h)
    41 // global variables (declared in network_data.h)
    42 CommandPacket *_local_command_queue;
    42 CommandPacket *_local_command_queue;
    43 
    43 
    44 SOCKET _udp_client_socket; // udp client socket
    44 extern NetworkUDPSocketHandler *_udp_client_socket; ///< udp client socket
    45 SOCKET _udp_server_socket; // udp server socket
    45 extern NetworkUDPSocketHandler *_udp_server_socket; ///< udp server socket
    46 SOCKET _udp_master_socket; // udp master socket
    46 extern NetworkUDPSocketHandler *_udp_master_socket; ///< udp master socket
    47 
    47 
    48 // Here we keep track of the clients
    48 // Here we keep track of the clients
    49 //  (and the client uses [0] for his own communication)
    49 //  (and the client uses [0] for his own communication)
    50 NetworkClientState _clients[MAX_CLIENTS];
    50 NetworkClientState _clients[MAX_CLIENTS];
    51 
    51 
   840 	if (_network_server) {
   840 	if (_network_server) {
   841 		// We are a server, also close the listensocket
   841 		// We are a server, also close the listensocket
   842 		closesocket(_listensocket);
   842 		closesocket(_listensocket);
   843 		_listensocket = INVALID_SOCKET;
   843 		_listensocket = INVALID_SOCKET;
   844 		DEBUG(net, 1, "Closed listener");
   844 		DEBUG(net, 1, "Closed listener");
   845 		NetworkUDPStop();
   845 		NetworkUDPCloseAll();
   846 	}
   846 	}
   847 }
   847 }
   848 
   848 
   849 // Inits the network (cleans sockets and stuff)
   849 // Inits the network (cleans sockets and stuff)
   850 static void NetworkInitialize(void)
   850 static void NetworkInitialize(void)
   956 
   956 
   957 	ttd_strlcpy(_network_last_host, host, sizeof(_network_last_host));
   957 	ttd_strlcpy(_network_last_host, host, sizeof(_network_last_host));
   958 	_network_last_port = port;
   958 	_network_last_port = port;
   959 
   959 
   960 	NetworkDisconnect();
   960 	NetworkDisconnect();
   961 	NetworkUDPStop();
   961 	NetworkUDPCloseAll();
   962 	NetworkInitialize();
   962 	NetworkInitialize();
   963 
   963 
   964 	// Try to connect
   964 	// Try to connect
   965 	_networking = NetworkConnect(host, port);
   965 	_networking = NetworkConnect(host, port);
   966 
   966 
  1032 	NetworkInitialize();
  1032 	NetworkInitialize();
  1033 	if (!NetworkListen()) return false;
  1033 	if (!NetworkListen()) return false;
  1034 
  1034 
  1035 	// Try to start UDP-server
  1035 	// Try to start UDP-server
  1036 	_network_udp_server = true;
  1036 	_network_udp_server = true;
  1037 	_network_udp_server = NetworkUDPListen(&_udp_server_socket, _network_server_bind_ip, _network_server_port, false);
  1037 	_network_udp_server = _udp_server_socket->Listen(_network_server_bind_ip, _network_server_port, false);
  1038 
  1038 
  1039 	_network_server = true;
  1039 	_network_server = true;
  1040 	_networking = true;
  1040 	_networking = true;
  1041 	_frame_counter = 0;
  1041 	_frame_counter = 0;
  1042 	_frame_counter_server = 0;
  1042 	_frame_counter_server = 0;
  1268 
  1268 
  1269 // We have to do some UDP checking
  1269 // We have to do some UDP checking
  1270 void NetworkUDPGameLoop(void)
  1270 void NetworkUDPGameLoop(void)
  1271 {
  1271 {
  1272 	if (_network_udp_server) {
  1272 	if (_network_udp_server) {
  1273 		NetworkUDPReceive(_udp_server_socket);
  1273 		_udp_server_socket->ReceivePackets();
  1274 		if (_udp_master_socket != INVALID_SOCKET) {
  1274 		_udp_master_socket->ReceivePackets();
  1275 			NetworkUDPReceive(_udp_master_socket);
  1275 	} else {
  1276 		}
  1276 		_udp_client_socket->ReceivePackets();
  1277 	} else if (_udp_client_socket != INVALID_SOCKET) {
       
  1278 		NetworkUDPReceive(_udp_client_socket);
       
  1279 		if (_network_udp_broadcast > 0) _network_udp_broadcast--;
  1277 		if (_network_udp_broadcast > 0) _network_udp_broadcast--;
  1280 	}
  1278 	}
  1281 }
  1279 }
  1282 
  1280 
  1283 // The main loop called from ttd.c
  1281 // The main loop called from ttd.c
  1388 
  1386 
  1389 /** This shuts the network down */
  1387 /** This shuts the network down */
  1390 void NetworkShutDown(void)
  1388 void NetworkShutDown(void)
  1391 {
  1389 {
  1392 	NetworkDisconnect();
  1390 	NetworkDisconnect();
  1393 	NetworkUDPStop();
  1391 	NetworkUDPShutdown();
  1394 
  1392 
  1395 	DEBUG(net, 3, "[core] shutting down network");
  1393 	DEBUG(net, 3, "[core] shutting down network");
  1396 
  1394 
  1397 	_network_available = false;
  1395 	_network_available = false;
  1398 
  1396