#include "includes"
#include "EPoll.h"
#include "ConsoleServer.h"
#include "Exception.h"
#include "File.h"
#include "Log.h"
#include "IPAddress.h"
#include "HTTPServer.h"

int main(int argc, char **argv) {

   try {

      coreutils::Log(new coreutils::File("/tmp/http.log", O_WRONLY | O_APPEND | O_CREAT, 0644));
      coreutils::Log(coreutils::LOG_INFO) << "HTTP Server starting. Build " << __DATE__ << " " << __TIME__;

      std::string ipAddress = "0.0.0.0";
   
      core::EPoll ePoll;
      
      http::HTTPSessions httpSessions;
      http::HTTPServer http(ePoll, core::IPAddress(ipAddress, 8080), httpSessions);
//      http::HTTPSServer http(ePoll, core::IPAddress(ipAddress, 8143));

      core::ConsoleServer console(ePoll, core::IPAddress(ipAddress, 1027));
      
      console.commands.add(ePoll, "threads");
      console.commands.add(httpSessions, "sessions"); 
      console.commands.add(console, "consoles");
      console.commands.add(console.commands, "help");
      ePoll.start(2, 1000);

      while(true)
        sleep(300);
   
      ePoll.stop();
   
   }

   catch(coreutils::Exception exception) {
      std::cout << exception.text << " Error reason is '" << strerror(exception.errorNumber) << "' in file " << exception.file << " at line " << exception.line << std::endl;
   }
   
}
