/* Copyright (C) 2010 Jonathon Jongsma
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see .
*/
#include
_DEFS(giomm,gio)
_PINCLUDE(giomm/private/socketlistener_p.h)
namespace Gio
{
/** Make it easy to implement a network service.
*
* @see ThreadedSocketService, SocketListener.
*
* A %SocketService is an object that represents a service that is
* provided to the network or over local sockets. When a new
* connection is made to the service signal_incoming() is emitted.
*
* A %SocketService is a subclass of SocketListener and you need
* to add the addresses you want to accept connections on with the
* SocketListener APIs.
*
* There are two options for implementing a network service based on
* %SocketService. The first is to create the service using
* create() and to connect to signal_incoming().
* The second is to subclass %SocketService and override the
* default signal handler implementation, on_incoming().
*
* In either case, the handler must immediately return, or else it
* will block additional incoming connections from being serviced.
* If you are interested in writing connection handlers that contain
* blocking code then see ThreadedSocketService.
*
* The socket service runs on the main loop of the thread-default context
* of the thread it is created in, and is not
* threadsafe in general. However, the calls to start and stop
* the service are threadsafe so these can be used from threads that
* handle incoming clients.
*
* @newin{2,24}
* @ingroup NetworkIO
*/
class GIOMM_API SocketService : public Gio::SocketListener
{
_CLASS_GOBJECT(SocketService, GSocketService, G_SOCKET_SERVICE, Gio::SocketListener, GSocketListener, , , GIOMM_API)
protected:
_CTOR_DEFAULT
public:
_WRAP_CREATE()
_WRAP_METHOD(void start(), g_socket_service_start)
_WRAP_METHOD(void stop(), g_socket_service_stop)
_WRAP_METHOD(bool is_active(), g_socket_service_is_active)
#m4 _CONVERSION(`GObject*',`const Glib::RefPtr&',`Glib::wrap($3, true)')
#m4 _CONVERSION(`GSocketConnection*',`const Glib::RefPtr&',`Glib::wrap($3, true)')
_WRAP_SIGNAL(bool incoming(const Glib::RefPtr& connection, const Glib::RefPtr& source_object), "incoming")
_WRAP_PROPERTY("active", bool, newin "2,46")
};
} // namespace Gio