equal
deleted
inserted
replaced
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 } |