WIP, Remote Client/Server...
This commit is contained in:
@@ -8,6 +8,7 @@ remote_SOURCES = \
|
||||
$(srcdir)/TestDatabase.cpp \
|
||||
$(top_srcdir)/remote/server/Server.cpp \
|
||||
$(top_srcdir)/remote/server/RequestHandler.cpp \
|
||||
$(top_srcdir)/remote/server/AudioCollectionRequestHandler.cpp \
|
||||
$(top_srcdir)/remote/server/ConnectionManager.cpp \
|
||||
$(top_srcdir)/remote/server/Connection.cpp \
|
||||
$(top_srcdir)/remote/messages/auth.pb.cc \
|
||||
|
||||
@@ -120,6 +120,7 @@ database_integrity_LINK = $(CXXLD) $(database_integrity_CXXFLAGS) \
|
||||
am_remote_OBJECTS = remote-RemoteClientServer.$(OBJEXT) \
|
||||
remote-TestDatabase.$(OBJEXT) remote-Server.$(OBJEXT) \
|
||||
remote-RequestHandler.$(OBJEXT) \
|
||||
remote-AudioCollectionRequestHandler.$(OBJEXT) \
|
||||
remote-ConnectionManager.$(OBJEXT) remote-Connection.$(OBJEXT) \
|
||||
remote-auth.pb.$(OBJEXT) remote-collection.pb.$(OBJEXT) \
|
||||
remote-common.pb.$(OBJEXT) remote-media.pb.$(OBJEXT) \
|
||||
@@ -497,6 +498,7 @@ remote_SOURCES = \
|
||||
$(srcdir)/TestDatabase.cpp \
|
||||
$(top_srcdir)/remote/server/Server.cpp \
|
||||
$(top_srcdir)/remote/server/RequestHandler.cpp \
|
||||
$(top_srcdir)/remote/server/AudioCollectionRequestHandler.cpp \
|
||||
$(top_srcdir)/remote/server/ConnectionManager.cpp \
|
||||
$(top_srcdir)/remote/server/Connection.cpp \
|
||||
$(top_srcdir)/remote/messages/auth.pb.cc \
|
||||
@@ -622,6 +624,7 @@ distclean-compile:
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/database_integrity-Track.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/database_integrity-Video.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/remote-Artist.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/remote-AudioCollectionRequestHandler.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/remote-Checksum.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/remote-Connection.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/remote-ConnectionManager.Po@am__quote@
|
||||
@@ -965,6 +968,20 @@ remote-RequestHandler.obj: $(top_srcdir)/remote/server/RequestHandler.cpp
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(remote_CXXFLAGS) $(CXXFLAGS) -c -o remote-RequestHandler.obj `if test -f '$(top_srcdir)/remote/server/RequestHandler.cpp'; then $(CYGPATH_W) '$(top_srcdir)/remote/server/RequestHandler.cpp'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/remote/server/RequestHandler.cpp'; fi`
|
||||
|
||||
remote-AudioCollectionRequestHandler.o: $(top_srcdir)/remote/server/AudioCollectionRequestHandler.cpp
|
||||
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(remote_CXXFLAGS) $(CXXFLAGS) -MT remote-AudioCollectionRequestHandler.o -MD -MP -MF $(DEPDIR)/remote-AudioCollectionRequestHandler.Tpo -c -o remote-AudioCollectionRequestHandler.o `test -f '$(top_srcdir)/remote/server/AudioCollectionRequestHandler.cpp' || echo '$(srcdir)/'`$(top_srcdir)/remote/server/AudioCollectionRequestHandler.cpp
|
||||
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/remote-AudioCollectionRequestHandler.Tpo $(DEPDIR)/remote-AudioCollectionRequestHandler.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(top_srcdir)/remote/server/AudioCollectionRequestHandler.cpp' object='remote-AudioCollectionRequestHandler.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(remote_CXXFLAGS) $(CXXFLAGS) -c -o remote-AudioCollectionRequestHandler.o `test -f '$(top_srcdir)/remote/server/AudioCollectionRequestHandler.cpp' || echo '$(srcdir)/'`$(top_srcdir)/remote/server/AudioCollectionRequestHandler.cpp
|
||||
|
||||
remote-AudioCollectionRequestHandler.obj: $(top_srcdir)/remote/server/AudioCollectionRequestHandler.cpp
|
||||
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(remote_CXXFLAGS) $(CXXFLAGS) -MT remote-AudioCollectionRequestHandler.obj -MD -MP -MF $(DEPDIR)/remote-AudioCollectionRequestHandler.Tpo -c -o remote-AudioCollectionRequestHandler.obj `if test -f '$(top_srcdir)/remote/server/AudioCollectionRequestHandler.cpp'; then $(CYGPATH_W) '$(top_srcdir)/remote/server/AudioCollectionRequestHandler.cpp'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/remote/server/AudioCollectionRequestHandler.cpp'; fi`
|
||||
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/remote-AudioCollectionRequestHandler.Tpo $(DEPDIR)/remote-AudioCollectionRequestHandler.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(top_srcdir)/remote/server/AudioCollectionRequestHandler.cpp' object='remote-AudioCollectionRequestHandler.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(remote_CXXFLAGS) $(CXXFLAGS) -c -o remote-AudioCollectionRequestHandler.obj `if test -f '$(top_srcdir)/remote/server/AudioCollectionRequestHandler.cpp'; then $(CYGPATH_W) '$(top_srcdir)/remote/server/AudioCollectionRequestHandler.cpp'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/remote/server/AudioCollectionRequestHandler.cpp'; fi`
|
||||
|
||||
remote-ConnectionManager.o: $(top_srcdir)/remote/server/ConnectionManager.cpp
|
||||
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(remote_CXXFLAGS) $(CXXFLAGS) -MT remote-ConnectionManager.o -MD -MP -MF $(DEPDIR)/remote-ConnectionManager.Tpo -c -o remote-ConnectionManager.o `test -f '$(top_srcdir)/remote/server/ConnectionManager.cpp' || echo '$(srcdir)/'`$(top_srcdir)/remote/server/ConnectionManager.cpp
|
||||
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/remote-ConnectionManager.Tpo $(DEPDIR)/remote-ConnectionManager.Po
|
||||
|
||||
+57
-24
@@ -44,7 +44,6 @@ class TestServer
|
||||
|
||||
};
|
||||
|
||||
|
||||
class TestClient
|
||||
{
|
||||
public:
|
||||
@@ -56,7 +55,21 @@ class TestClient
|
||||
|
||||
void getArtists(std::vector<std::string>& artists)
|
||||
{
|
||||
// Send request
|
||||
Remote::ClientMessage msg;
|
||||
|
||||
msg.set_type( Remote::ClientMessage_Type_AudioCollectionRequest );
|
||||
|
||||
msg.mutable_audio_collection_request()->set_type( Remote::AudioCollectionRequest_Type_TypeGetArtistList);
|
||||
msg.mutable_audio_collection_request()->mutable_get_artists()->set_preferred_batch_size(64);
|
||||
|
||||
sendMsg(msg);
|
||||
|
||||
// Receive responses
|
||||
Remote::ServerMessage response;
|
||||
recvMsg(response);
|
||||
|
||||
//
|
||||
|
||||
}
|
||||
|
||||
@@ -66,10 +79,10 @@ class TestClient
|
||||
|
||||
void sendMsg(const ::google::protobuf::Message& message)
|
||||
{
|
||||
std::ostream os(&_outputStreamBuf);
|
||||
|
||||
// Serialize message
|
||||
std::string outputStr;
|
||||
if (message.SerializeToString(&outputStr))
|
||||
if (message.SerializeToOstream(&os))
|
||||
{
|
||||
// Send message header
|
||||
std::array<unsigned char, Remote::Header::size> headerBuffer;
|
||||
@@ -77,14 +90,21 @@ class TestClient
|
||||
// Generate header content
|
||||
{
|
||||
Remote::Header header;
|
||||
header.setSize(outputStr.size());
|
||||
header.setSize(_outputStreamBuf.size());
|
||||
header.to_buffer(headerBuffer);
|
||||
}
|
||||
|
||||
boost::asio::write(_socket, boost::asio::buffer(headerBuffer));
|
||||
|
||||
// Send serialized message
|
||||
boost::asio::write(_socket, boost::asio::buffer(outputStr));
|
||||
std::size_t n = boost::asio::write(_socket,
|
||||
_outputStreamBuf.data(),
|
||||
boost::asio::transfer_exactly(_outputStreamBuf.size()));
|
||||
assert(n == _outputStreamBuf.size());
|
||||
|
||||
_outputStreamBuf.consume(n);
|
||||
|
||||
std::cout << "Client: Message sent!" << std::endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -96,40 +116,53 @@ class TestClient
|
||||
|
||||
void recvMsg(::google::protobuf::Message& message)
|
||||
{
|
||||
boost::asio::streambuf messageStreamBuffer;
|
||||
std::istream responseStream(&response);
|
||||
std::istream is(&_inputStreamBuf);
|
||||
|
||||
boost::asio::read(_socket,
|
||||
messageStreamBuffer,
|
||||
boost::asio::transfer_exactly(Remote::Header::size));
|
||||
{
|
||||
// reserve bytes in output sequence
|
||||
boost::asio::streambuf::mutable_buffers_type bufs = _inputStreamBuf.prepare(Remote::Header::size);
|
||||
|
||||
bool error;
|
||||
Remote::Header header (Remote::Header::from_buffer(headerBuffer, error));
|
||||
if (error)
|
||||
std::cout << "Client: waiting for header message!" << std::endl;
|
||||
std::size_t n = boost::asio::read(_socket,
|
||||
bufs,
|
||||
boost::asio::transfer_exactly(Remote::Header::size));
|
||||
|
||||
assert(n == Remote::Header::size);
|
||||
_inputStreamBuf.commit(n);
|
||||
|
||||
std::cout << "Client: Header message received!" << std::endl;
|
||||
}
|
||||
|
||||
Remote::Header header;
|
||||
if (!header.from_istream(is))
|
||||
throw std::runtime_error("Cannot read header from buffer!");
|
||||
|
||||
if (header.getSize() > _inputBuffer.size())
|
||||
throw std::runtime_error("Input buffer too small!");
|
||||
|
||||
// Read in a stream buffer
|
||||
{
|
||||
boost::asio::streambuf response;
|
||||
boost::asio::read(_socket,
|
||||
response,
|
||||
boost::asio::transfer_exactly(header.getSize()));
|
||||
// reserve bytes in output sequence
|
||||
boost::asio::streambuf::mutable_buffers_type bufs = _inputStreamBuf.prepare(header.getSize());
|
||||
|
||||
std::cout << "Client: waiting for message!" << std::endl;
|
||||
std::size_t n = boost::asio::read(_socket,
|
||||
bufs,
|
||||
boost::asio::transfer_exactly(header.getSize()));
|
||||
|
||||
if (!message.ParseFromIstream(&responseStream))
|
||||
assert(n == header.getSize());
|
||||
_inputStreamBuf.commit(n);
|
||||
|
||||
std::cout << "Client: message received!" << std::endl;
|
||||
|
||||
if (!message.ParseFromIstream(&is))
|
||||
throw std::runtime_error("message.ParseFromIstream failed!");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
boost::asio::io_service _ioService;
|
||||
boost::asio::ip::tcp::socket _socket;
|
||||
|
||||
boost::streambuf _inputStreamBuf;
|
||||
|
||||
std::array<unsigned char, 65536> _inputBuffer;
|
||||
boost::asio::streambuf _inputStreamBuf;
|
||||
boost::asio::streambuf _outputStreamBuf;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ DatabaseHandler* create()
|
||||
boost::filesystem::path p ("test_db");
|
||||
|
||||
// Remove previous db
|
||||
boost::filesystem::remove(p);
|
||||
// boost::filesystem::remove(p);
|
||||
|
||||
DatabaseHandler* db = new DatabaseHandler(p);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user