mirror of
https://github.com/debauchee/barrier.git
synced 2026-07-16 11:01:53 +08:00
Refactored file assemble and send code #4601
This commit is contained in:
@@ -780,25 +780,6 @@ Client::writeToDropDirThread(void*)
|
||||
m_receivedFileData);
|
||||
}
|
||||
|
||||
void
|
||||
Client::clearReceivedFileData()
|
||||
{
|
||||
m_receivedFileData.clear();
|
||||
}
|
||||
|
||||
void
|
||||
Client::setExpectedFileSize(String data)
|
||||
{
|
||||
std::istringstream iss(data);
|
||||
iss >> m_expectedFileSize;
|
||||
}
|
||||
|
||||
void
|
||||
Client::fileChunkReceived(String data)
|
||||
{
|
||||
m_receivedFileData += data;
|
||||
}
|
||||
|
||||
void
|
||||
Client::dragInfoReceived(UInt32 fileNum, String data)
|
||||
{
|
||||
|
||||
@@ -85,15 +85,6 @@ public:
|
||||
*/
|
||||
virtual void handshakeComplete();
|
||||
|
||||
//! Clears the file buffer
|
||||
void clearReceivedFileData();
|
||||
|
||||
//! Set the expected size of receiving file
|
||||
void setExpectedFileSize(String data);
|
||||
|
||||
//! Received a chunk of file data
|
||||
void fileChunkReceived(String data);
|
||||
|
||||
//! Received drag information
|
||||
void dragInfoReceived(UInt32 fileNum, String data);
|
||||
|
||||
@@ -131,7 +122,10 @@ public:
|
||||
bool isReceivedFileSizeValid();
|
||||
|
||||
//! Return expected file size
|
||||
size_t getExpectedFileSize() { return m_expectedFileSize; }
|
||||
size_t& getExpectedFileSize() { return m_expectedFileSize; }
|
||||
|
||||
//! Return received file data
|
||||
String& getReceivedFileData() { return m_receivedFileData; }
|
||||
|
||||
//@}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include "client/ServerProxy.h"
|
||||
|
||||
#include "client/Client.h"
|
||||
#include "synergy/FileChunk.h"
|
||||
#include "synergy/ClipboardChunk.h"
|
||||
#include "synergy/StreamChunker.h"
|
||||
#include "synergy/Clipboard.h"
|
||||
@@ -37,8 +38,6 @@
|
||||
// ServerProxy
|
||||
//
|
||||
|
||||
const UInt16 ServerProxy::m_intervalThreshold = 1;
|
||||
|
||||
ServerProxy::ServerProxy(Client* client, synergy::IStream* stream, IEventQueue* events) :
|
||||
m_client(client),
|
||||
m_stream(stream),
|
||||
@@ -53,10 +52,7 @@ ServerProxy::ServerProxy(Client* client, synergy::IStream* stream, IEventQueue*
|
||||
m_keepAliveAlarm(0.0),
|
||||
m_keepAliveAlarmTimer(NULL),
|
||||
m_parser(&ServerProxy::parseHandshakeMessage),
|
||||
m_events(events),
|
||||
m_stopwatch(true),
|
||||
m_elapsedTime(0),
|
||||
m_receivedDataSize(0)
|
||||
m_events(events)
|
||||
{
|
||||
assert(m_client != NULL);
|
||||
assert(m_stream != NULL);
|
||||
@@ -860,50 +856,13 @@ ServerProxy::infoAcknowledgment()
|
||||
void
|
||||
ServerProxy::fileChunkReceived()
|
||||
{
|
||||
// parse
|
||||
UInt8 mark = 0;
|
||||
String content;
|
||||
ProtocolUtil::readf(m_stream, kMsgDFileTransfer + 4, &mark, &content);
|
||||
int result = FileChunk::assemble(
|
||||
m_stream,
|
||||
m_client->getReceivedFileData(),
|
||||
m_client->getExpectedFileSize());
|
||||
|
||||
switch (mark) {
|
||||
case kDataStart:
|
||||
m_client->clearReceivedFileData();
|
||||
m_client->setExpectedFileSize(content);
|
||||
if (CLOG->getFilter() >= kDEBUG2) {
|
||||
LOG((CLOG_DEBUG2 "recv file data from server: size=%s", content.c_str()));
|
||||
m_stopwatch.start();
|
||||
}
|
||||
break;
|
||||
|
||||
case kDataChunk:
|
||||
m_client->fileChunkReceived(content);
|
||||
if (CLOG->getFilter() >= kDEBUG2) {
|
||||
LOG((CLOG_DEBUG2 "recv file data from server: size=%i", content.size()));
|
||||
double interval = m_stopwatch.getTime();
|
||||
LOG((CLOG_DEBUG2 "recv file data from server: interval=%f s", interval));
|
||||
m_receivedDataSize += content.size();
|
||||
if (interval >= m_intervalThreshold) {
|
||||
double averageSpeed = m_receivedDataSize / interval / 1000;
|
||||
LOG((CLOG_DEBUG2 "recv file data from server: average speed=%f kb/s", averageSpeed));
|
||||
|
||||
m_receivedDataSize = 0;
|
||||
m_elapsedTime += interval;
|
||||
m_stopwatch.reset();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case kDataEnd:
|
||||
if (result == kFinish) {
|
||||
m_events->addEvent(Event(m_events->forIScreen().fileRecieveCompleted(), m_client));
|
||||
if (CLOG->getFilter() >= kDEBUG2) {
|
||||
LOG((CLOG_DEBUG2 "file data transfer finished"));
|
||||
m_elapsedTime += m_stopwatch.getTime();
|
||||
double averageSpeed = m_client->getExpectedFileSize() / m_elapsedTime / 1000;
|
||||
LOG((CLOG_DEBUG2 "file data transfer finished: total time consumed=%f s", m_elapsedTime));
|
||||
LOG((CLOG_DEBUG2 "file data transfer finished: total data received=%i kb", m_client->getExpectedFileSize() / 1000));
|
||||
LOG((CLOG_DEBUG2 "file data transfer finished: total average speed=%f kb/s", averageSpeed));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -927,23 +886,7 @@ ServerProxy::handleClipboardSendingEvent(const Event& event, void*)
|
||||
void
|
||||
ServerProxy::fileChunkSending(UInt8 mark, char* data, size_t dataSize)
|
||||
{
|
||||
String chunk(data, dataSize);
|
||||
|
||||
switch (mark) {
|
||||
case kDataStart:
|
||||
LOG((CLOG_DEBUG2 "file sending start: size=%s", data));
|
||||
break;
|
||||
|
||||
case kDataChunk:
|
||||
LOG((CLOG_DEBUG2 "file chunk sending: size=%i", chunk.size()));
|
||||
break;
|
||||
|
||||
case kDataEnd:
|
||||
LOG((CLOG_DEBUG2 "file sending finished"));
|
||||
break;
|
||||
}
|
||||
|
||||
ProtocolUtil::writef(m_stream, kMsgDFileTransfer, mark, &chunk);
|
||||
FileChunk::send(m_stream, mark, data, dataSize);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -130,9 +130,4 @@ private:
|
||||
|
||||
MessageParser m_parser;
|
||||
IEventQueue* m_events;
|
||||
|
||||
Stopwatch m_stopwatch;
|
||||
double m_elapsedTime;
|
||||
size_t m_receivedDataSize;
|
||||
static const UInt16 m_intervalThreshold;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user