[Cppfcplib] r14272 - in trunk/apps/CppFCPLib: . examples examples/message_sending
mkolar at freenetproject.org
mkolar at freenetproject.org
Mon Jul 23 10:29:11 UTC 2007
Author: mkolar
Date: 2007-07-23 10:29:10 +0000 (Mon, 23 Jul 2007)
New Revision: 14272
Added:
trunk/apps/CppFCPLib/Utils.h
trunk/apps/CppFCPLib/examples/
trunk/apps/CppFCPLib/examples/message_sending/
trunk/apps/CppFCPLib/examples/message_sending/blocking_tcp_echo_server.cpp
trunk/apps/CppFCPLib/examples/message_sending/readme.txt
trunk/apps/CppFCPLib/examples/message_sending/send_message.cpp
Modified:
trunk/apps/CppFCPLib/AdditionalFields.h
trunk/apps/CppFCPLib/JobTicket.cpp
trunk/apps/CppFCPLib/Node.cpp
Log:
* "true" : "false" --> function
* add examples dir
Modified: trunk/apps/CppFCPLib/AdditionalFields.h
===================================================================
--- trunk/apps/CppFCPLib/AdditionalFields.h 2007-07-22 22:55:17 UTC (rev 14271)
+++ trunk/apps/CppFCPLib/AdditionalFields.h 2007-07-23 10:29:10 UTC (rev 14272)
@@ -5,6 +5,7 @@
#include <string>
#include <boost/lexical_cast.hpp>
#include <exception>
+#include "Utils.h"
namespace FCPLib {
@@ -19,7 +20,7 @@
fields[key] = value;
}
void addField(std::string key, bool value) {
- fields[key] = value ? "true" : "false";
+ fields[key] = Converter::toString( value );
}
bool hasField(std::string key) const {
if (fields.find(key) == fields.end()) return false;
Modified: trunk/apps/CppFCPLib/JobTicket.cpp
===================================================================
--- trunk/apps/CppFCPLib/JobTicket.cpp 2007-07-22 22:55:17 UTC (rev 14271)
+++ trunk/apps/CppFCPLib/JobTicket.cpp 2007-07-23 10:29:10 UTC (rev 14272)
@@ -3,6 +3,7 @@
#include "Log.h"
#include <boost/lexical_cast.hpp>
+#include "Utils.h"
using namespace FCPLib;
@@ -116,7 +117,7 @@
isReprValid = true;
repr += "Job id=" + id + " " +
- " keepJob=" + (keep ? "true" : "false") + "\n";
+ " keepJob=" + Converter::toString( keep ) + "\n";
repr += "Message=" + cmd->getHeader();
// TODO:
Modified: trunk/apps/CppFCPLib/Node.cpp
===================================================================
--- trunk/apps/CppFCPLib/Node.cpp 2007-07-22 22:55:17 UTC (rev 14271)
+++ trunk/apps/CppFCPLib/Node.cpp 2007-07-23 10:29:10 UTC (rev 14272)
@@ -9,6 +9,7 @@
#include "Log.h"
#include "Exceptions.h"
#include "Base64.h"
+#include "Utils.h"
using namespace FCPLib;
@@ -552,8 +553,8 @@
Node::watchGlobal( bool enabled, int verbosity )
{
Message::Ptr m = Message::factory( std::string("WatchGlobal") );
- m->setField("Enabled", enabled ? "true" : "false");
- m->setField("VerbosityMask", boost::lexical_cast<std::string>(verbosity));
+ m->setField( "Enabled", Converter::toString( enabled ) );
+ m->setField( "VerbosityMask", boost::lexical_cast<std::string>(verbosity) );
JobTicket::Ptr job = JobTicket::factory( "", m, false );
clientReqQueue->put(job);
Added: trunk/apps/CppFCPLib/Utils.h
===================================================================
--- trunk/apps/CppFCPLib/Utils.h (rev 0)
+++ trunk/apps/CppFCPLib/Utils.h 2007-07-23 10:29:10 UTC (rev 14272)
@@ -0,0 +1,9 @@
+#ifndef UTILS_H_INCLUDED
+#define UTILS_H_INCLUDED
+
+class Converter {
+public:
+static std::string toString( bool v ) { return v ? "true" : "false"; }
+};
+
+#endif // UTILS_H_INCLUDED
Added: trunk/apps/CppFCPLib/examples/message_sending/blocking_tcp_echo_server.cpp
===================================================================
--- trunk/apps/CppFCPLib/examples/message_sending/blocking_tcp_echo_server.cpp (rev 0)
+++ trunk/apps/CppFCPLib/examples/message_sending/blocking_tcp_echo_server.cpp 2007-07-23 10:29:10 UTC (rev 14272)
@@ -0,0 +1,82 @@
+//
+// blocking_tcp_echo_server.cpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2007 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#include <cstdlib>
+#include <iostream>
+#include <boost/thread.hpp>
+#include <boost/bind.hpp>
+#include <boost/smart_ptr.hpp>
+#include <boost/asio.hpp>
+
+using boost::asio::ip::tcp;
+
+const int max_length = 1024;
+
+typedef boost::shared_ptr<tcp::socket> socket_ptr;
+
+void session(socket_ptr sock)
+{
+ try
+ {
+ for (;;)
+ {
+ char data[max_length];
+
+ boost::system::error_code error;
+ size_t length = sock->read_some(boost::asio::buffer(data), error);
+ if (error == boost::asio::error::eof)
+ break; // Connection closed cleanly by peer.
+ else if (error)
+ throw boost::system::system_error(error); // Some other error.
+
+ boost::asio::write(*sock, boost::asio::buffer(data, length));
+ std::cout << data;
+ std::cout.flush();
+ }
+ }
+ catch (std::exception& e)
+ {
+ std::cerr << "Exception in thread: " << e.what() << "\n";
+ }
+}
+
+void server(boost::asio::io_service& io_service, short port)
+{
+ tcp::acceptor a(io_service, tcp::endpoint(tcp::v4(), port));
+ for (;;)
+ {
+ socket_ptr sock(new tcp::socket(io_service));
+ a.accept(*sock);
+ boost::thread t(boost::bind(session, sock));
+ }
+}
+
+int main(int argc, char* argv[])
+{
+ try
+ {
+ if (argc != 2)
+ {
+ std::cerr << "Usage: blocking_tcp_echo_server <port>\n";
+ return 1;
+ }
+
+ boost::asio::io_service io_service;
+
+ using namespace std; // For atoi.
+ server(io_service, atoi(argv[1]));
+ }
+ catch (std::exception& e)
+ {
+ std::cerr << "Exception: " << e.what() << "\n";
+ }
+
+ return 0;
+}
Added: trunk/apps/CppFCPLib/examples/message_sending/readme.txt
===================================================================
--- trunk/apps/CppFCPLib/examples/message_sending/readme.txt (rev 0)
+++ trunk/apps/CppFCPLib/examples/message_sending/readme.txt 2007-07-23 10:29:10 UTC (rev 14272)
@@ -0,0 +1,24 @@
+======
+README
+======
+
+This directory contains examples of use of the CppFCPLib.
+
+List of Files
+=============
+
+blocking_tcp_echo_server.cpp
+----------------------------
+
+Server listens on localhost on the specified port. Everything received
+to that port is printed out to stdout. Used to test message creation
+and message sending from the library.
+
+Usage::
+
+ ./blocking_tcp_echo_server <port>
+
+send_message.cpp
+----------------
+
+Sending a data message to a server. Currently used only for testing.
\ No newline at end of file
Added: trunk/apps/CppFCPLib/examples/message_sending/send_message.cpp
===================================================================
--- trunk/apps/CppFCPLib/examples/message_sending/send_message.cpp (rev 0)
+++ trunk/apps/CppFCPLib/examples/message_sending/send_message.cpp 2007-07-23 10:29:10 UTC (rev 14272)
@@ -0,0 +1,43 @@
+#include "Message.h"
+#include "Server.h"
+#include <memory>
+#include <string>
+#include <sstream>
+#include <fstream>
+#include <algorithm>
+#include <iterator>
+//#include <iostream>
+
+#include <boost/asio.hpp>
+
+using boost::asio::ip::tcp;
+
+int main(){
+ std::string host = "127.0.0.1";
+ int port = 10000;
+
+ std::auto_ptr<FCPLib::Server> s = FCPLib::Server::create_server(host, port);
+ /*
+ FCPLib::Message::Ptr m = FCPLib::Message::factory( std::string("ClientHello") );
+ m->setField("Name", "name_identifier");
+ m->setField("ExpectedVersion", "2.0");
+
+ s->send(m);
+ s->send(m);
+ s->send(m);
+ */
+ std::ifstream is("/home/mladen/Desktop/tech video/Navigating the World's Photographs.gvi");
+
+ FCPLib::DataMessage::Ptr dm = boost::dynamic_pointer_cast<FCPLib::DataMessage,FCPLib::Message>
+ ( FCPLib::Message::factory( std::string("DataMessage"), true ) );
+
+ is.seekg(0, std::ios::end);
+ int dataLength = is.tellg();
+ is.seekg(0, std::ios::beg);
+ dm->setStream(&is, dataLength);
+
+ s->send(dm);
+
+ getchar();
+ return 0;
+}
More information about the Cppfcplib
mailing list