MCPcopy Create free account
hub / github.com/DescentDevelopers/Descent3 / SendDataChunk

Function SendDataChunk

Descent3/multi.cpp:7864–7919  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

7862}
7863
7864void SendDataChunk(int playernum) {
7865 int outcount = 0;
7866 static uint8_t outdata[MAX_PACKET_SIZE];
7867 static uint8_t readbuf[MAX_PACKET_SIZE];
7868 int size;
7869 int dataread;
7870 int done = 0;
7871 // mprintf(0,"Sending a data chunk to %d.\n",playernum);
7872 // Read the next chunk of the file and send it!
7873 if ((DATA_CHUNK_SIZE + NetPlayers[playernum].file_xfer_pos) >
7874 (uint32_t)NetPlayers[playernum].file_xfer_cfile->size) {
7875 dataread = NetPlayers[playernum].file_xfer_cfile->size - NetPlayers[playernum].file_xfer_pos;
7876 // This is the end of the file
7877 mprintf(0, "End of file detected!\n");
7878 done = 1;
7879 } else {
7880 dataread = DATA_CHUNK_SIZE;
7881 }
7882
7883 try {
7884 cf_ReadBytes(readbuf, dataread, NetPlayers[playernum].file_xfer_cfile);
7885 } catch (cfile_error *cfe) {
7886 int t = cfe->read_write; // this is is here to fix compile warning
7887 // Woops, can't read the file, better error out!
7888 MultiCancelFile(playernum, NetPlayers[playernum].file_xfer_id, NetPlayers[playernum].file_xfer_who);
7889 Int3();
7890 return;
7891 }
7892
7893 if (done) {
7894 cfclose(NetPlayers[playernum].file_xfer_cfile);
7895 NetPlayers[playernum].file_xfer_cfile = NULL;
7896 NetPlayers[playernum].file_xfer_pos = 0;
7897 NetPlayers[playernum].file_xfer_flags = NETFILE_NONE;
7898 }
7899 // Send them the next chunk
7900 size = START_DATA(MP_FILE_DATA, outdata, &outcount);
7901 MultiAddUint(NetPlayers[playernum].file_xfer_total_len, outdata, &outcount);
7902 MultiAddUint(NetPlayers[playernum].file_xfer_pos, outdata, &outcount);
7903 MultiAddUshort(NetPlayers[playernum].file_xfer_id, outdata, &outcount);
7904 if (Netgame.local_role == LR_SERVER)
7905 MultiAddUshort(NetPlayers[playernum].file_xfer_who, outdata, &outcount);
7906 else
7907 MultiAddUshort(Player_num, outdata, &outcount);
7908 // MultiAddUshort (NetPlayers[playernum].file_xfer_who,outdata,&outcount);
7909 MultiAddUshort(dataread, outdata, &outcount);
7910 memcpy(outdata + outcount, readbuf, dataread);
7911 outcount += dataread;
7912 END_DATA(outcount, outdata, size);
7913 if (Netgame.local_role == LR_SERVER) {
7914 nw_SendReliable(NetPlayers[playernum].reliable_socket, outdata, outcount, true);
7915 } else {
7916 nw_SendReliable(NetPlayers[Player_num].reliable_socket, outdata, outcount, true);
7917 }
7918 NetPlayers[playernum].file_xfer_pos += dataread;
7919}
7920
7921void MultiDoFileCancelled(uint8_t *data) {

Callers 2

MultiDoFileReqFunction · 0.85
MultiDoFileAckFunction · 0.85

Calls 8

cf_ReadBytesFunction · 0.85
MultiCancelFileFunction · 0.85
cfcloseFunction · 0.85
START_DATAFunction · 0.85
MultiAddUintFunction · 0.85
MultiAddUshortFunction · 0.85
END_DATAFunction · 0.85
nw_SendReliableFunction · 0.85

Tested by

no test coverage detected