[Cppfcplib] r14059 - trunk/apps/CppFCPLib
mkolar at freenetproject.org
mkolar at freenetproject.org
Fri Jul 13 10:06:45 UTC 2007
Author: mkolar
Date: 2007-07-13 10:06:45 +0000 (Fri, 13 Jul 2007)
New Revision: 14059
Modified:
trunk/apps/CppFCPLib/Message.cpp
trunk/apps/CppFCPLib/Message.h
trunk/apps/CppFCPLib/Server.cpp
trunk/apps/CppFCPLib/Server.h
Log:
removed bugs from Server implementation (still some tests are needed with DataMessages)
Modified: trunk/apps/CppFCPLib/Message.cpp
===================================================================
--- trunk/apps/CppFCPLib/Message.cpp 2007-07-12 22:16:19 UTC (rev 14058)
+++ trunk/apps/CppFCPLib/Message.cpp 2007-07-13 10:06:45 UTC (rev 14059)
@@ -1,5 +1,7 @@
#include "Message.h"
#include <boost/lexical_cast.hpp>
+#include <iterator>
+#include <algorithm>
using namespace FCPLib;
@@ -60,12 +62,19 @@
}
void
-Message::toStream(std::ostream& ostream)
+Message::toStream(std::ostream& output_stream)
{
- ostream << toString();
+ output_stream << toString();
+ output_stream.flush();
}
void
+Message::toSocket(boost::asio::ip::tcp::socket& socket)
+{
+ boost::asio::write(socket, boost::asio::buffer(toString()));
+}
+
+void
DataMessage::setStream(std::istream* s_, int dataLength)
{
stream_ = s_;
@@ -77,20 +86,26 @@
if (isReprValid)
return repr;
Message::toString();
- repr += "DataLength\n" + boost::lexical_cast<std::string>(dataLength_);
+ repr += "DataLength=" + boost::lexical_cast<std::string>(dataLength_);
repr += "Data\n";
isReprValid = true;
return repr;
}
void
-DataMessage::toStream(std::ostream& ostream)
+DataMessage::toStream(std::ostream& output_stream)
{
- ostream << toString();
- ostream << *stream_;
+ output_stream << toString();
+ std::copy(std::istream_iterator<char> (*stream_),
+ std::istream_iterator<char> (),
+ std::ostream_iterator<char> (output_stream));
+ output_stream.flush();
}
-void operator<<(std::ostream& ostream, Message::MessagePtr m)
+void
+DataMessage::toSocket(boost::asio::ip::tcp::socket& socket)
{
- ostream << m;
+ boost::asio::write( socket, boost::asio::buffer(toString()) );
+ boost::asio::write( socket, boost::asio::buffer(stream_->rdbuf(), dataLength_) );
}
+
Modified: trunk/apps/CppFCPLib/Message.h
===================================================================
--- trunk/apps/CppFCPLib/Message.h 2007-07-12 22:16:19 UTC (rev 14058)
+++ trunk/apps/CppFCPLib/Message.h 2007-07-13 10:06:45 UTC (rev 14059)
@@ -8,6 +8,7 @@
#include <ostream>
#include <istream>
#include <boost/shared_ptr.hpp>
+#include <boost/asio.hpp>
namespace FCPLib {
@@ -37,7 +38,7 @@
virtual const std::string& toString();
virtual void toStream(std::ostream&);
-
+ virtual void toSocket(boost::asio::ip::tcp::socket& socket);
virtual ~Message() {}
};
@@ -46,12 +47,11 @@
int dataLength_;
protected:
DataMessage() { isDataType = true; }
-
+public:
void setStream(std::istream* s_, int dataLength);
const std::string& toString();
void toStream(std::ostream&);
-
-public:
+ void toSocket(boost::asio::ip::tcp::socket& socket);
~DataMessage() {}
friend class Message;
};
Modified: trunk/apps/CppFCPLib/Server.cpp
===================================================================
--- trunk/apps/CppFCPLib/Server.cpp 2007-07-12 22:16:19 UTC (rev 14058)
+++ trunk/apps/CppFCPLib/Server.cpp 2007-07-13 10:06:45 UTC (rev 14059)
@@ -49,19 +49,15 @@
void Server::send(const std::string &s){
log().log(DEBUG, "Sending:\n"+s+"-----------------\n");
- boost::asio::streambuf request;
- std::ostream request_stream(&request);
- request_stream << s;
- boost::asio::write(*socket_, request);
+
+ boost::asio::write(*socket_, boost::asio::buffer(s));
}
void Server::send(const Message::MessagePtr m)
{
log().log(DEBUG, "Sending:\n"+m->toString()+"-----------------\n");
- boost::asio::streambuf request;
- std::ostream request_stream(&request);
- m->toStream(request_stream);
- boost::asio::write(*socket_, request);
+
+ m->toSocket(*socket_);
}
bool Server::dataAvailable(){
Modified: trunk/apps/CppFCPLib/Server.h
===================================================================
--- trunk/apps/CppFCPLib/Server.h 2007-07-12 22:16:19 UTC (rev 14058)
+++ trunk/apps/CppFCPLib/Server.h 2007-07-13 10:06:45 UTC (rev 14059)
@@ -4,6 +4,7 @@
#include <string>
#include <boost/asio.hpp>
+#include <memory>
#include "Message.h"
namespace FCPLib {
@@ -23,6 +24,13 @@
void send(const std::string &s);
void send(Message::MessagePtr m);
bool dataAvailable();
+
+ #ifdef _DEBUG_
+ static std::auto_ptr<Server> create_server(std::string& host, int port)
+ {
+ return std::auto_ptr<Server>( new Server(host, port) );
+ }
+ #endif
};
}
More information about the Cppfcplib
mailing list