rendering of mainpage starts to work

At least it seems working. No dynamic objects are created
for now...
This commit is contained in:
john stone 2014-02-22 18:03:05 +01:00
parent 1b5b8b7413
commit e9c7f79bc3
7 changed files with 96 additions and 44 deletions

View File

@ -12,6 +12,8 @@ siccc_SOURCES = \
src/options.c \
src/Routerin.H \
src/Routerin.cc \
src/DynamicObjects.cc \
src/DynamicObjects.H \
src/sicmain.cc \
src/StaticFileHandler.H \
src/StaticFileHandler.cc \

View File

@ -1,22 +1,24 @@
#pragma once
#include <mongoose.h>
#include "Sicmaster.H"
#include "Routerin.H"
#include "Sicobject.H"
#include <string>
#include <map>
class Routerin;
class DynamicObjects
{
public:
std::string render_object_list();
std::string cleanpath(const char * const);
DynamicObjects(Sicmaster & sicmaster):sicmaster(sicmaster) {};
DynamicObjects(Routerin * merouterin) : _merouterin(merouterin){ };
~DynamicObjects() {};
private:
std::string _cleanpath (const char * const path);
std::map<unsigned int, Sicobject *> _themap;
Sicmaster & sicmaster;
Routerin * _merouterin;
};

View File

@ -10,7 +10,7 @@ std::string DynamicObjects::render_object_list(){
for (auto it : this->_themap){
output += u8"<li>\n";
output += u8"<a href=\"" + it.second->get_loadurl() + u8"\">";
output += u8"<a href=\"" + it.second->get_loadurl() + u8"\">"; //we could include baseurl here?
output += it.second->get_fname();
output += u8"</a> <span class=\"size\">";
output += it.second->bytesize_string();

View File

@ -4,6 +4,9 @@
#include <mongoose.h>
#include "StaticFileHandler.H"
#include "DynamicObjects.H"
class DynamicObjects;
class Routerin
{
@ -38,9 +41,14 @@ public:
return rouri->event_fallback_route(event);
}
}
std::string & get_baseurl(){return _baseurl;}
void set_baseurl(std::string baseurl);
private:
explicit Routerin();
std::unique_ptr<StaticFileHandler> sfh;
DynamicObjects * _dyn_obs;
std::string _baseurl;
bool hasInstance = false;
int event_request_route ( struct mg_event *event);
@ -52,5 +60,6 @@ private:
int rq_file(char const * const reststr , struct mg_event *event);
int rq_date(char const * const reststr , struct mg_event *event);
int rq_upload(char const * const reststr , struct mg_event *event);
int rq_render_mainpage(struct mg_event *event);
};

View File

@ -2,21 +2,65 @@
#include <cstring>
#include <cstdlib>
#include <iostream>
using std::strcmp;
#include "Foohash.H"
#include "Routerin.H"
using std::strcmp;
using std::cout;
using std::endl;
//put this in class ?? Util??
//FIXME:
static const std::string std_html_header= u8R"HUENERBLUBBE(<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Sharing is Caring</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
)HUENERBLUBBE" ;
static const std::string std_mainpage= u8R"HASENBLUBBE(
<body>
<div id="page">
<h1>
<span style="color: red">Sharing</span>
<span style="color: blue">is</span>
<span style="color: green">Caring</span>
</h1>
<div id="up">
<form action="/upload" method="post" enctype="multipart/form-data">
<input id="file" name="file" type="file">
<input type="submit" value="Hochladen">
</form>
<p class="hint">
Wie wärs mit einem schicken Foto? Dem Flyer der nächsten
Party? Oder gar einem gesprochenen Kommentar?
</p>
</div>
)HASENBLUBBE" ;
static const std::string std_footer= u8R"FISCHBLUBBE(
<p class="foot">
Eine Guerilla-Kunstaktion von <b>&lt;&lt;&lt;/&gt;&gt;</b>
</p>
</div>
</body>
</html>
)FISCHBLUBBE" ;
Routerin::Routerin():
sfh( new StaticFileHandler())
{
cout << "Konstr Routering" << std::endl;
}
{
_dyn_obs = new DynamicObjects(this);
cout << "Konstr Routering" << endl;
}
int Routerin::event_request_route(struct mg_event *event){
const RouterOp *blub=0;
@ -59,7 +103,8 @@ int Routerin::event_request_route(struct mg_event *event){
};
}else{
std::cerr << "no blub! in " << __LINE__ << endl;
retval = rq_static("illegalurl.htm",event);
//retval = rq_static("illegalurl.htm",event);
retval = rq_render_mainpage(event);
}
}
@ -74,6 +119,30 @@ int Routerin::event_request_route(struct mg_event *event){
}
void Routerin::set_baseurl(std::string baseurl){
_baseurl = baseurl;
return;
}
int Routerin::rq_render_mainpage(struct mg_event * event){
std::cerr << "rendering main page!" << endl;
const std::string fubb =
std_html_header +
std_mainpage +
_dyn_obs->render_object_list()+
std_footer.c_str() ;
mg_printf(event->conn, "HTTP/1.0 200 OK\r\n"
"Content-Length: %lu\r\n"
"Content-Type: text/html\r\n\r\n%s",
fubb.size(),
fubb.c_str());
return 1;
}
int Routerin::rq_static(char const * const reststr , struct mg_event *event)
{
std::cerr << " a static file is reqested!" << endl;

View File

@ -1,34 +0,0 @@
#pragma once
/// Laufzeitrelevante Anwendungsdatensammlung und Signaling
#include <string>
class Sicmaster
{
public:
//Sicmaster(StaticFileHandler &sfh);
~Sicmaster();
// const ???
static Sicmaster * get_instance()
{
static Sicmaster * me = nullptr;
if (!me)
return me = new Sicmaster();
return me;
}
std::string & get_baseurl(){
return _baseurl;
}
private:
explicit Sicmaster();
unsigned int _portnum;
unsigned int _filedir;
std::string _baseurl;
};

View File

@ -24,12 +24,15 @@ class MongooseHandler{
public:
//default listenport:8080
MongooseHandler(int listenport=8080):
MongooseHandler(int listenport=8080,std::string baseurl="http://[::1]/"):
ctx(nullptr),
listenport(listenport)
{
char portstring[8];
Routerin *routerin = Routerin::get_instance();
routerin->set_baseurl(baseurl);
std::snprintf(portstring,8,"%d",this->listenport);
const char *options[] =
{"listening_ports",portstring,nullptr};
@ -62,6 +65,7 @@ void dump_args()
cout << "value of listen: " <<
args_info.listen_arg[i] <<std::endl;
// if (args_info.saveconf_given) {
// if (cmd_parser_file_save(args_info.conffile_arg,
// &args_info) == EXIT_FAILURE)