[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