network.c
changeset 279 3110fc81af0b
parent 276 a7eb4b5eaac3
child 280 263555c42d40
equal deleted inserted replaced
278:a0a9b0d903aa 279:3110fc81af0b
   669 }
   669 }
   670 
   670 
   671 static void HandleFilePacket(FilePacketHdr *fp)
   671 static void HandleFilePacket(FilePacketHdr *fp)
   672 {
   672 {
   673 	int n = fp->packet_length - sizeof(FilePacketHdr);
   673 	int n = fp->packet_length - sizeof(FilePacketHdr);
       
   674 	char *tempfile = str_fmt("%s/networkc.tmp", _path.personal_dir);
       
   675 
   674 	if (n == 0) {
   676 	if (n == 0) {
   675 		assert(_networking_queuing);
   677 		assert(_networking_queuing);
   676 		assert(!_networking_sync);
   678 		assert(!_networking_sync);
   677 		// eof
   679 		// eof
   678 		if (_recv_file) { fclose(_recv_file); _recv_file = NULL; }
   680 		if (_recv_file) { fclose(_recv_file); _recv_file = NULL; }
   679 
   681 
   680 		// attempt loading the game.
   682 		// attempt loading the game.
   681 		_game_mode = GM_NORMAL;
   683 		_game_mode = GM_NORMAL;
   682 		if (SaveOrLoad("networkc.tmp", SL_LOAD) != SL_OK) {
   684 		if (SaveOrLoad(tempfile, SL_LOAD) != SL_OK) {
   683 				NetworkCoreDisconnect();
   685 				NetworkCoreDisconnect();
   684 				NetworkHandleSaveGameError();
   686 				NetworkHandleSaveGameError();
   685 				return;
   687 				return;
   686 				}
   688 				}
   687 		// sync to server.
   689 		// sync to server.
   701 				_local_player = OWNER_SPECTATOR;
   703 				_local_player = OWNER_SPECTATOR;
   702 		}
   704 		}
   703 
   705 
   704 	} else {
   706 	} else {
   705 		if(!_recv_file) {
   707 		if(!_recv_file) {
   706 			_recv_file = fopen("networkc.tmp", "wb");
   708 			_recv_file = fopen(tempfile, "wb");
   707 			if (!_recv_file) error("can't open savefile");
   709 			if (!_recv_file) error("can't open savefile");
   708 		}
   710 		}
   709 		fwrite( (char*)fp + sizeof(*fp), n, 1, _recv_file);
   711 		fwrite( (char*)fp + sizeof(*fp), n, 1, _recv_file);
   710 	}
   712 	}
   711 }
   713 }