X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Examples%2FTCPClientServer%2Fserver.cc;h=3ec471dc6308bce181f060ebdc5b9717e573715c;hb=6df7613bc4c5a8c27a6af11450d2cb8fbb6ea3a6;hp=99991f7f4fb4712c8fa21cf8539dd346735b62b6;hpb=52dcdfccdc3c371bc9d884935ad348755fd38e55;p=senf.git diff --git a/Examples/TCPClientServer/server.cc b/Examples/TCPClientServer/server.cc index 99991f7..3ec471d 100644 --- a/Examples/TCPClientServer/server.cc +++ b/Examples/TCPClientServer/server.cc @@ -1,23 +1,30 @@ // $Id$ // // Copyright (C) 2007 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) +// Fraunhofer Institute for Open Communication Systems (FOKUS) // -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. +// The contents of this file are subject to the Fraunhofer FOKUS Public License +// Version 1.0 (the "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// http://senf.berlios.de/license.html // -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// The Fraunhofer FOKUS Public License Version 1.0 is based on, +// but modifies the Mozilla Public License Version 1.1. +// See the full license text for the amendments. // -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the -// Free Software Foundation, Inc., -// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// Software distributed under the License is distributed on an "AS IS" basis, +// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +// for the specific language governing rights and limitations under the License. +// +// The Original Code is Fraunhofer FOKUS code. +// +// The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V. +// (registered association), Hansastraße 27 c, 80686 Munich, Germany. +// All Rights Reserved. +// +// Contributor(s): +// Thorsten Horstmann + // Definition of non-inline non-template functions @@ -26,44 +33,45 @@ // Custom includes #include -#include "Scheduler/Scheduler.hh" -#include "Utils/membind.hh" -#include "Socket/TCPSocketHandle.hh" -#include "Socket/INetAddressing.hh" -#include "Packets/EthernetPacket.hh" - +#include +#include +#include +#include class Server { senf::TCPv4ServerSocketHandle serverSock; + senf::scheduler::FdEvent acceptevent; + senf::scheduler::FdEvent readevent; public: - Server(std::string const & host, unsigned int port) - : serverSock(senf::INet4Address(host, port)) {} - - void run() + Server(senf::INet4Address const & host, unsigned int port) + : serverSock(senf::INet4SocketAddress(host, port)), + acceptevent("Server accept", senf::membind(&Server::accept, this), + serverSock, senf::scheduler::FdEvent::EV_READ), + readevent("Server read", 0) + {} + + void run() { - senf::Scheduler::instance().add( - serverSock, - senf::membind(&Server::accept, this), - senf::Scheduler::EV_READ); - senf::Scheduler::instance().process(); + senf::scheduler::process(); } - + private: - void accept(senf::FileHandle /* ignored */, senf::Scheduler::EventId event) + void accept(int event) { senf::TCPv4ClientSocketHandle clientSock (serverSock.accept()); - senf::Scheduler::instance().add( - clientSock, - senf::membind(&Server::readFromClient, this), - senf::Scheduler::EV_READ); + readevent + .action(boost::bind(&Server::readFromClient, this, clientSock, _1)) + .handle(clientSock) + .events(senf::scheduler::FdEvent::EV_READ) + .enable(); } - - void readFromClient(senf::TCPv4ClientSocketHandle clientSock, senf::Scheduler::EventId event) + + void readFromClient(senf::TCPv4ClientSocketHandle clientSock, int event) { if (!clientSock) { - senf::Scheduler::instance().remove(clientSock); + readevent.disable(); return; } std::string data (clientSock.read()); @@ -75,7 +83,7 @@ private: int main(int argc, char const * argv[]) { try { - Server myServer ("127.0.0.1", 4243); + Server myServer (senf::INet4Address::Loopback, 4243); myServer.run(); } catch (std::exception const & ex) { @@ -83,3 +91,14 @@ int main(int argc, char const * argv[]) } return 0; } + + +// Local Variables: +// mode: c++ +// fill-column: 100 +// c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" +// compile-command: "scons -u" +// comment-column: 40 +// End: