1 #include "precompiled.h"
14 CFileTransferResponseMessage* respMessage = (CFileTransferResponseMessage*)message;
18 LOGERROR(L
"Net transfer: Unsolicited file transfer response (id=%d)", (
int)respMessage->m_RequestID);
24 LOGERROR(L
"Net transfer: Invalid size for file transfer response (length=%d)", (
int)respMessage->m_Length);
30 task->m_Length = respMessage->m_Length;
31 task->m_Buffer.reserve(respMessage->m_Length);
33 LOGMESSAGERENDER(L
"Downloading data over network (%d KB) - please wait...", (
int)(task->m_Length/1024));
40 CFileTransferDataMessage* dataMessage = (CFileTransferDataMessage*)message;
44 LOGERROR(L
"Net transfer: Unsolicited file transfer data (id=%d)", (
int)dataMessage->m_RequestID);
50 task->m_Buffer += dataMessage->m_Data;
52 if (task->m_Buffer.size() > task->m_Length)
54 LOGERROR(L
"Net transfer: Invalid size for file transfer data (length=%d actual=%d)", (
int)task->m_Length, (
int)task->m_Buffer.size());
58 CFileTransferAckMessage ackMessage;
59 ackMessage.m_RequestID = task->m_RequestID;
60 ackMessage.m_NumPackets = 1;
63 if (task->m_Buffer.size() == task->m_Length)
78 LOGMESSAGERENDER(L
"Downloading data: %.1f%% of %d KB", 100.f*task->m_Buffer.size()/task->m_Length, (int)(task->m_Length/1024));
86 CFileTransferAckMessage* ackMessage = (CFileTransferAckMessage*)message;
90 LOGERROR(L
"Net transfer: Unsolicited file transfer ack (id=%d)", (
int)ackMessage->m_RequestID);
98 LOGERROR(L
"Net transfer: Invalid num packets for file transfer ack (num=%d inflight=%d)",
116 task->m_RequestID = requestID;
119 CFileTransferRequestMessage request;
120 request.m_RequestID = requestID;
134 CFileTransferResponseMessage respMessage;
135 respMessage.m_RequestID = requestID;
136 respMessage.m_Length = task.
buffer.size();
146 while (it->second.packetsInFlight < it->second.maxWindowSize && it->second.offset < it->second.buffer.size())
148 CFileTransferDataMessage dataMessage;
149 dataMessage.m_RequestID = it->second.requestID;
151 dataMessage.m_Data = it->second.buffer.substr(it->second.offset, packetSize);
152 it->second.offset += packetSize;
153 it->second.packetsInFlight++;
FileSendTasksMap m_FileSendTasks
static const size_t DEFAULT_FILE_TRANSFER_WINDOW_SIZE
static const size_t MAX_FILE_TRANSFER_SIZE
static const size_t DEFAULT_FILE_TRANSFER_PACKET_SIZE
void StartTask(const shared_ptr< CNetFileReceiveTask > &task)
Registers a file-receiving task.
void StartResponse(u32 requestID, const std::string &data)
Registers data to be sent in response to a request.
double m_LastProgressReportTime
Status HandleMessageReceive(const CNetMessage *message)
Should be called when a message is received from the network.
FileReceiveTasksMap m_FileReceiveTasks
virtual bool SendMessage(const CNetMessage *message)=0
i64 Status
Error handling system.
NetMessageType GetType() const
Retrieves the message type.
The base class for all network messages exchanged within the game.
void Poll()
Call frequently (e.g.
Network client/server sessions.
Asynchronous file-sending task.