defuze.me  Client
networkcore.hpp
00001 /**************************************************************************
00002 ** defuze.me Epitech Innovative Project
00003 **
00004 ** Copyright 2010
00005 **   Athena Calmettes - Jocelyn De La Rosa - Francois Gaillard
00006 **   Adrien Jarthon - Alexandre Moore - Luc Peres - Arnaud Sellier
00007 **
00008 ** All rights reserved.
00009 **************************************************************************/
00010 
00011 namespace Network {
00012     class NetworkCore;
00013 }
00014 
00015 #ifndef NETWORKCORE_HPP
00016 #define NETWORKCORE_HPP
00017 
00018 #include <QString>
00019 #include <QVariant>
00020 #include <QNetworkAccessManager>
00021 #include <QNetworkInterface>
00022 #include <QNetworkRequest>
00023 #include <QNetworkReply>
00024 #include <QTcpServer>
00025 #include <QUdpSocket>
00026 #include <QUrl>
00027 #include "core.hpp"
00028 #include "authenticator.hpp"
00029 #include "parser.hpp"
00030 #include "doorman.hpp"
00031 
00032 namespace Network
00033 {
00037     class NetworkCore : public QObject, public Core
00038     {
00039         Q_OBJECT
00040     public:
00041         NetworkCore(QStringList &arguments);
00042         ~NetworkCore();
00043         void                            init(Cores* cores);
00044         void                            aboutToQuit();
00045         const QString                   name();
00046 
00047         void                            initRCServer(unsigned short port);                  
00048         QNetworkAccessManager&          web();                                              
00049         QTcpServer&                     remoteControl();                                    
00050         QUdpSocket&                     autoDiscovery();                                    
00051         QNetworkRequest                 apiRequest(const QString& url) const;               
00052         const Parser&                   apiParser() const;                                  
00053         QVariantList                    discoveryAddresses() const;
00054         QVariantMap                     getRadioInfo() const;
00055 
00056     signals:
00057         void                            newRemoteClient(RemoteSock*);                       
00058         void                            APIAuthenticated();
00059 
00060     public slots:
00061         void                            invalidateWebToken();                               
00062 
00063     private slots:
00064         void                            giveCredentials(const QString&);
00065         void                            giveAuthorization(const RemoteEvent&);
00066         void                            discoveryRequest();                                 
00067 
00068     private:
00069         QNetworkAccessManager           *webManager;                                        
00070         QTcpServer                      *rcServer;                                          
00071         QUdpSocket                      *adServer;                                          
00072         Authenticator                   *authenticator;                                     
00073         Doorman                         *doorman;                                           
00074         JsonParser                      defaultApiParser;                                   
00075     };
00076 }
00077 
00078 #endif // NETWORKCORE_HPP