/* * Copyright (c) 2010 Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. */#pragma once#include<boost/shared_ptr.hpp>#include<boost/optional.hpp>#include<vector>#include"Swiften/Network/BoostIOServiceThread.h"#include"Swiften/Network/ConnectionServer.h"#include"Swiften/Server/UserRegistry.h"#include"Swiften/Server/ServerSession.h"#include"Swiften/Base/IDGenerator.h"#include"Swiften/Server/ServerFromClientSession.h"#include"Swiften/JID/JID.h"#include"Swiften/Base/ByteArray.h"#include"Swiften/Entity/Entity.h"#include"Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.h"#include"Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.h"#include<Swiften/TLS/CertificateWithKey.h>#include<Swiften/Parser/PlatformXMLParserFactory.h>namespaceSwift{classConnectionServer;classSessionTracer;classEventLoop;classNetworkFactories;classStanzaChannel;classIQRouter;classTLSServerContextFactory;classServer:publicEntity{public:Server(EventLoop*eventLoop,NetworkFactories*networkFactories,UserRegistry*userRegistry,constJID&jid,conststd::string&address,intport);~Server();voidstart();voidstop();intgetPort()const{returnport_;}StanzaChannel*getStanzaChannel()const{returnstanzaChannel_;}IQRouter*getIQRouter()const{returniqRouter_;}boost::shared_ptr<ConnectionServer>getConnectionServer()const{returnserverFromClientConnectionServer;}boost::signal<void(constSafeByteArray&)>onDataRead;boost::signal<void(constSafeByteArray&)>onDataWritten;voidaddTLSEncryption(TLSServerContextFactory*tlsContextFactory,CertificateWithKey::refcert);private:voidhandleNewClientConnection(boost::shared_ptr<Connection>c);voidhandleSessionStarted(boost::shared_ptr<ServerFromClientSession>);voidhandleSessionFinished(boost::shared_ptr<ServerFromClientSession>);voidhandleElementReceived(boost::shared_ptr<Element>element,boost::shared_ptr<ServerFromClientSession>session);voidhandleDataRead(constSafeByteArray&);voidhandleDataWritten(constSafeByteArray&);private:IDGeneratoridGenerator;UserRegistry*userRegistry_;intport_;EventLoop*eventLoop;NetworkFactories*networkFactories_;boolstopping;boost::shared_ptr<ConnectionServer>serverFromClientConnectionServer;std::vector<boost::bsignals::connection>serverFromClientConnectionServerSignalConnections;std::list<boost::shared_ptr<ServerFromClientSession>>serverFromClientSessions;JIDselfJID;StanzaChannel*stanzaChannel_;IQRouter*iqRouter_;TLSServerContextFactory*tlsFactory;CertificateWithKey::refcert;PlatformXMLParserFactory*parserFactory_;std::stringaddress_;};}