diff --git a/src/lib/base/EventQueue.cpp b/src/lib/base/EventQueue.cpp index 71208661..e6d8bdbb 100644 --- a/src/lib/base/EventQueue.cpp +++ b/src/lib/base/EventQueue.cpp @@ -47,6 +47,7 @@ EVENT_TYPE_ACCESSOR(IKeyState) EVENT_TYPE_ACCESSOR(IPrimaryScreen) EVENT_TYPE_ACCESSOR(IScreen) EVENT_TYPE_ACCESSOR(Clipboard) +EVENT_TYPE_ACCESSOR(File) // interrupt handler. this just adds a quit event to the queue. static @@ -84,6 +85,7 @@ EventQueue::EventQueue() : m_typesForIPrimaryScreen(NULL), m_typesForIScreen(NULL), m_typesForClipboard(NULL), + m_typesForFile(NULL), m_readyMutex(new Mutex), m_readyCondVar(new CondVar(m_readyMutex, false)) { diff --git a/src/lib/base/EventQueue.h b/src/lib/base/EventQueue.h index cf6dd01d..f741120e 100644 --- a/src/lib/base/EventQueue.h +++ b/src/lib/base/EventQueue.h @@ -158,6 +158,7 @@ public: IPrimaryScreenEvents& forIPrimaryScreen(); IScreenEvents& forIScreen(); ClipboardEvents& forClipboard(); + FileEvents& forFile(); private: ClientEvents* m_typesForClient; @@ -179,6 +180,7 @@ private: IPrimaryScreenEvents* m_typesForIPrimaryScreen; IScreenEvents* m_typesForIScreen; ClipboardEvents* m_typesForClipboard; + FileEvents* m_typesForFile; Mutex* m_readyMutex; CondVar* m_readyCondVar; std::queue m_pending; diff --git a/src/lib/base/EventTypes.cpp b/src/lib/base/EventTypes.cpp index 0fdb87d7..afa51900 100644 --- a/src/lib/base/EventTypes.cpp +++ b/src/lib/base/EventTypes.cpp @@ -176,8 +176,6 @@ REGISTER_EVENT(IScreen, error) REGISTER_EVENT(IScreen, shapeChanged) REGISTER_EVENT(IScreen, suspend) REGISTER_EVENT(IScreen, resume) -REGISTER_EVENT(IScreen, fileChunkSending) -REGISTER_EVENT(IScreen, fileRecieveCompleted) // // IpcServer @@ -192,4 +190,12 @@ REGISTER_EVENT(IpcServer, messageReceived) REGISTER_EVENT(Clipboard, clipboardGrabbed) REGISTER_EVENT(Clipboard, clipboardChanged) -REGISTER_EVENT(Clipboard, clipboardSending) \ No newline at end of file +REGISTER_EVENT(Clipboard, clipboardSending) + +// +// File +// + +REGISTER_EVENT(File, fileChunkSending) +REGISTER_EVENT(File, fileRecieveCompleted) +REGISTER_EVENT(File, keepAlive) diff --git a/src/lib/base/EventTypes.h b/src/lib/base/EventTypes.h index 33ee28cc..b10fb6b8 100644 --- a/src/lib/base/EventTypes.h +++ b/src/lib/base/EventTypes.h @@ -625,9 +625,7 @@ public: m_error(Event::kUnknown), m_shapeChanged(Event::kUnknown), m_suspend(Event::kUnknown), - m_resume(Event::kUnknown), - m_fileChunkSending(Event::kUnknown), - m_fileRecieveCompleted(Event::kUnknown) { } + m_resume(Event::kUnknown) { } //! @name accessors //@{ @@ -660,12 +658,6 @@ public: */ Event::Type resume(); - //! Sending a file chunk - Event::Type fileChunkSending(); - - //! Completed receiving a file - Event::Type fileRecieveCompleted(); - //@} private: @@ -673,8 +665,6 @@ private: Event::Type m_shapeChanged; Event::Type m_suspend; Event::Type m_resume; - Event::Type m_fileChunkSending; - Event::Type m_fileRecieveCompleted; }; class ClipboardEvents : public EventTypes { @@ -717,3 +707,30 @@ private: Event::Type m_clipboardChanged; Event::Type m_clipboardSending; }; + +class FileEvents : public EventTypes { +public: + FileEvents() : + m_fileChunkSending(Event::kUnknown), + m_fileRecieveCompleted(Event::kUnknown), + m_keepAlive(Event::kUnknown) { } + + //! @name accessors + //@{ + + //! Sending a file chunk + Event::Type fileChunkSending(); + + //! Completed receiving a file + Event::Type fileRecieveCompleted(); + + //! Send a keep alive + Event::Type keepAlive(); + + //@} + +private: + Event::Type m_fileChunkSending; + Event::Type m_fileRecieveCompleted; + Event::Type m_keepAlive; +}; diff --git a/src/lib/base/IEventQueue.h b/src/lib/base/IEventQueue.h index 0dcc088a..fa04434c 100644 --- a/src/lib/base/IEventQueue.h +++ b/src/lib/base/IEventQueue.h @@ -49,6 +49,7 @@ class IKeyStateEvents; class IPrimaryScreenEvents; class IScreenEvents; class ClipboardEvents; +class FileEvents; //! Event queue interface /*! @@ -246,4 +247,5 @@ public: virtual IPrimaryScreenEvents& forIPrimaryScreen() = 0; virtual IScreenEvents& forIScreen() = 0; virtual ClipboardEvents& forClipboard() = 0; + virtual FileEvents& forFile() = 0; }; diff --git a/src/lib/client/Client.cpp b/src/lib/client/Client.cpp index c738a044..52258d69 100644 --- a/src/lib/client/Client.cpp +++ b/src/lib/client/Client.cpp @@ -96,11 +96,11 @@ Client::Client( &Client::handleResume)); if (m_args.m_enableDragDrop) { - m_events->adoptHandler(m_events->forIScreen().fileChunkSending(), + m_events->adoptHandler(m_events->forFile().fileChunkSending(), this, new TMethodEventJob(this, &Client::handleFileChunkSending)); - m_events->adoptHandler(m_events->forIScreen().fileRecieveCompleted(), + m_events->adoptHandler(m_events->forFile().fileRecieveCompleted(), this, new TMethodEventJob(this, &Client::handleFileRecieveCompleted)); diff --git a/src/lib/client/ServerProxy.cpp b/src/lib/client/ServerProxy.cpp index a4c06ee1..e1be8404 100644 --- a/src/lib/client/ServerProxy.cpp +++ b/src/lib/client/ServerProxy.cpp @@ -868,7 +868,7 @@ ServerProxy::fileChunkReceived() m_client->getExpectedFileSize()); if (result == kFinish) { - m_events->addEvent(Event(m_events->forIScreen().fileRecieveCompleted(), m_client)); + m_events->addEvent(Event(m_events->forFile().fileRecieveCompleted(), m_client)); } else if (result == kStart) { String filename = m_client->getDragFileList().at(0).getFilename(); diff --git a/src/lib/server/Server.cpp b/src/lib/server/Server.cpp index 440fe128..4420b2dd 100644 --- a/src/lib/server/Server.cpp +++ b/src/lib/server/Server.cpp @@ -184,11 +184,11 @@ Server::Server( &Server::handleFakeInputEndEvent)); if (m_enableDragDrop) { - m_events->adoptHandler(m_events->forIScreen().fileChunkSending(), + m_events->adoptHandler(m_events->forFile().fileChunkSending(), this, new TMethodEventJob(this, &Server::handleFileChunkSendingEvent)); - m_events->adoptHandler(m_events->forIScreen().fileRecieveCompleted(), + m_events->adoptHandler(m_events->forFile().fileRecieveCompleted(), this, new TMethodEventJob(this, &Server::handleFileRecieveCompletedEvent)); diff --git a/src/test/integtests/net/NetworkTests.cpp b/src/test/integtests/net/NetworkTests.cpp index cd9be3c2..489ccfc3 100644 --- a/src/test/integtests/net/NetworkTests.cpp +++ b/src/test/integtests/net/NetworkTests.cpp @@ -147,7 +147,7 @@ TEST_F(NetworkTests, sendToClient_mockData) Client client(&m_events, "stub", serverAddress, clientSocketFactory, &clientScreen, args); m_events.adoptHandler( - m_events.forIScreen().fileRecieveCompleted(), &client, + m_events.forFile().fileRecieveCompleted(), &client, new TMethodEventJob( this, &NetworkTests::sendToClient_mockData_fileRecieveCompleted)); @@ -156,7 +156,7 @@ TEST_F(NetworkTests, sendToClient_mockData) m_events.initQuitTimeout(10); m_events.loop(); m_events.removeHandler(m_events.forClientListener().connected(), &listener); - m_events.removeHandler(m_events.forIScreen().fileRecieveCompleted(), &client); + m_events.removeHandler(m_events.forFile().fileRecieveCompleted(), &client); m_events.cleanupQuitTimeout(); } @@ -203,7 +203,7 @@ TEST_F(NetworkTests, sendToClient_mockFile) Client client(&m_events, "stub", serverAddress, clientSocketFactory, &clientScreen, args); m_events.adoptHandler( - m_events.forIScreen().fileRecieveCompleted(), &client, + m_events.forFile().fileRecieveCompleted(), &client, new TMethodEventJob( this, &NetworkTests::sendToClient_mockFile_fileRecieveCompleted)); @@ -212,7 +212,7 @@ TEST_F(NetworkTests, sendToClient_mockFile) m_events.initQuitTimeout(10); m_events.loop(); m_events.removeHandler(m_events.forClientListener().connected(), &listener); - m_events.removeHandler(m_events.forIScreen().fileRecieveCompleted(), &client); + m_events.removeHandler(m_events.forFile().fileRecieveCompleted(), &client); m_events.cleanupQuitTimeout(); } @@ -257,7 +257,7 @@ TEST_F(NetworkTests, sendToServer_mockData) this, &NetworkTests::sendToServer_mockData_handleClientConnected, &client)); m_events.adoptHandler( - m_events.forIScreen().fileRecieveCompleted(), &server, + m_events.forFile().fileRecieveCompleted(), &server, new TMethodEventJob( this, &NetworkTests::sendToServer_mockData_fileRecieveCompleted)); @@ -266,7 +266,7 @@ TEST_F(NetworkTests, sendToServer_mockData) m_events.initQuitTimeout(10); m_events.loop(); m_events.removeHandler(m_events.forClientListener().connected(), &listener); - m_events.removeHandler(m_events.forIScreen().fileRecieveCompleted(), &server); + m_events.removeHandler(m_events.forFile().fileRecieveCompleted(), &server); m_events.cleanupQuitTimeout(); } @@ -312,7 +312,7 @@ TEST_F(NetworkTests, sendToServer_mockFile) this, &NetworkTests::sendToServer_mockFile_handleClientConnected, &client)); m_events.adoptHandler( - m_events.forIScreen().fileRecieveCompleted(), &server, + m_events.forFile().fileRecieveCompleted(), &server, new TMethodEventJob( this, &NetworkTests::sendToServer_mockFile_fileRecieveCompleted)); @@ -321,7 +321,7 @@ TEST_F(NetworkTests, sendToServer_mockFile) m_events.initQuitTimeout(10); m_events.loop(); m_events.removeHandler(m_events.forClientListener().connected(), &listener); - m_events.removeHandler(m_events.forIScreen().fileRecieveCompleted(), &server); + m_events.removeHandler(m_events.forFile().fileRecieveCompleted(), &server); m_events.cleanupQuitTimeout(); } @@ -418,7 +418,7 @@ NetworkTests::sendMockData(void* eventTarget) String size = synergy::string::sizeTypeToString(kMockDataSize); FileChunk* sizeMessage = FileChunk::start(size); - m_events.addEvent(Event(m_events.forIScreen().fileChunkSending(), eventTarget, sizeMessage)); + m_events.addEvent(Event(m_events.forFile().fileChunkSending(), eventTarget, sizeMessage)); // send chunk messages with incrementing chunk size size_t lastSize = 0; @@ -433,7 +433,7 @@ NetworkTests::sendMockData(void* eventTarget) // first byte is the chunk mark, last is \0 FileChunk* chunk = FileChunk::data(m_mockData, dataSize); - m_events.addEvent(Event(m_events.forIScreen().fileChunkSending(), eventTarget, chunk)); + m_events.addEvent(Event(m_events.forFile().fileChunkSending(), eventTarget, chunk)); sentLength += dataSize; lastSize = dataSize; @@ -446,7 +446,7 @@ NetworkTests::sendMockData(void* eventTarget) // send last message FileChunk* transferFinished = FileChunk::end(); - m_events.addEvent(Event(m_events.forIScreen().fileChunkSending(), eventTarget, transferFinished)); + m_events.addEvent(Event(m_events.forFile().fileChunkSending(), eventTarget, transferFinished)); } UInt8* diff --git a/src/test/mock/synergy/MockEventQueue.h b/src/test/mock/synergy/MockEventQueue.h index d6256790..73d008aa 100644 --- a/src/test/mock/synergy/MockEventQueue.h +++ b/src/test/mock/synergy/MockEventQueue.h @@ -62,5 +62,6 @@ public: MOCK_METHOD0(forIPrimaryScreen, IPrimaryScreenEvents&()); MOCK_METHOD0(forIScreen, IScreenEvents&()); MOCK_METHOD0(forClipboard, ClipboardEvents&()); + MOCK_METHOD0(forFile, FileEvents&()); MOCK_CONST_METHOD0(waitForReady, void()); };