Commit 16fdf54de506004bf90e6ed32572fb33b847eadb

Authored by Georg Hopp
1 parent 08533a4b

now the internal random value will be create only once every 30 seconds thus one…

… can see that it is realy an internal state of the server
... ... @@ -44,7 +44,7 @@ HttpResponse httpResponse304(
44 44 const char *, size_t);
45 45 HttpResponse httpResponse404();
46 46 HttpResponse httpResponseMe();
47   -HttpResponse httpResponseRandval(int);
  47 +HttpResponse httpResponseRandval(time_t, int);
48 48 HttpResponse httpResponseAsset(
49 49 const char *,
50 50 const char *, size_t,
... ...
... ... @@ -25,6 +25,7 @@
25 25 #define __HTTP_WORKER_H__
26 26
27 27 #include <sys/types.h>
  28 +#include <time.h>
28 29
29 30 #include "class.h"
30 31 #include "http/parser.h"
... ... @@ -40,10 +41,15 @@
40 41 #define FALSE ((void *)0)
41 42 #endif
42 43
  44 +struct randval {
  45 + time_t timestamp;
  46 + int value;
  47 +};
  48 +
43 49
44 50 CLASS(HttpWorker) {
45   - char * id;
46   - int * val;
  51 + char * id;
  52 + struct randval * val;
47 53
48 54 Cbuf pbuf;
49 55 Cbuf wbuf;
... ...
... ... @@ -42,8 +42,6 @@
42 42 "<title>My own little Web-App</title>" \
43 43 "<style type=\"text/css\">" \
44 44 "div#randval {" \
45   - "width: 120px;" \
46   - "height: 30px;" \
47 45 "left: 200px;" \
48 46 "top: 100px;" \
49 47 "position: fixed;" \
... ... @@ -52,7 +50,10 @@
52 50 "border: 1px solid black;" \
53 51 "}" \
54 52 "div.hide#randval {" \
55   - "top: -50px;" \
  53 + "top: -500px;" \
  54 + "}" \
  55 + ".small {" \
  56 + "font-size: small;" \
56 57 "}" \
57 58 "</style>" \
58 59 "<script type=\"text/javascript\" src=\"/jquery/\"></script>" \
... ...
... ... @@ -33,16 +33,20 @@
33 33 #include "http/message.h"
34 34 #include "http/header.h"
35 35
36   -
37   -#define RESP_DATA "%02d"
  36 +#define RESP_DATA "<span class=\"small\">" \
  37 + "Value created at:<br/>%s<br/>Next value in: %ld seconds</span>" \
  38 + "<br />Value: %02d"
38 39
39 40 HttpResponse
40   -httpResponseRandval(int value)
  41 +httpResponseRandval(time_t ctime, int value)
41 42 {
  43 + char timebuf[200];
42 44 char buffer[200];
43 45 HttpResponse response;
44 46 HttpMessage message;
45 47 size_t nbuf;
  48 + struct tm * tmp;
  49 + time_t remaining;
46 50
47 51 response = new(HttpResponse, "HTTP/1.1", 200, "OK");
48 52 message = (HttpMessage)response;
... ... @@ -55,9 +59,17 @@ httpResponseRandval(int value)
55 59 sizeof("text/html")-1));
56 60
57 61 message->type = HTTP_MESSAGE_BUFFERED;
58   - message->nbody = sizeof(RESP_DATA)-1-2;
59   - message->body = malloc(sizeof(RESP_DATA)-2);
60   - sprintf(message->body, RESP_DATA, value);
  62 +
  63 + tmp = localtime(&ctime);
  64 + nbuf = strftime(timebuf, sizeof(timebuf), "%a, %d %b %Y %T %Z", tmp);
  65 +
  66 + remaining = 30 - (time(NULL) - ctime);
  67 +
  68 + nbuf = sprintf(buffer, RESP_DATA, timebuf, remaining, value);
  69 +
  70 + message->nbody = nbuf;
  71 + message->body = malloc(nbuf);
  72 + memcpy(message->body, buffer, nbuf);
61 73
62 74 nbuf = sprintf(buffer, "%d", message->nbody);
63 75
... ...
... ... @@ -21,12 +21,12 @@ httpWorkerCtor(void * _this, va_list * params)
21 21 {
22 22 HttpWorker this = _this;
23 23 char * id = va_arg(*params, char *);
24   - int * val = va_arg(*params, int *);
25 24 char cbuf_id[100];
26 25
27 26 this->id = malloc(strlen(id) + 1);
28 27 strcpy(this->id, id);
29   - this->val = val;
  28 +
  29 + this->val = va_arg(*params, struct randval *);
30 30
31 31 sprintf(cbuf_id, "%s_%s", "parser", id);
32 32 this->pbuf = new(Cbuf, cbuf_id, PARSER_MAX_BUF);
... ...
... ... @@ -59,7 +59,9 @@ httpWorkerProcess(HttpWorker this, int fd)
59 59 }
60 60
61 61 if (0 == strcmp("/randval/", request->uri)) {
62   - response = (HttpMessage)httpResponseRandval(*(this->val));
  62 + response = (HttpMessage)httpResponseRandval(
  63 + this->val->timestamp,
  64 + this->val->value);
63 65 }
64 66
65 67 if (0 == strcmp("/image/", request->uri)) {
... ...
... ... @@ -56,7 +56,6 @@ serverRun(Server this)
56 56 }
57 57
58 58 for (i=1; i < this->nfds; i++) {
59   - int fd = (this->fds)[i].fd;
60 59 int nreads = 10, nwrites = 10;
61 60
62 61 /**
... ...
... ... @@ -42,10 +42,10 @@
42 42
43 43 #include "utils/signalHandling.h"
44 44
45   -#define DEFAULT_SECS 1
46   -#define DEFAULT_USECS (1000000 / HZ * 2)
  45 +#define DEFAULT_SECS 30
  46 +//#define DEFAULT_USECS (1000000 / HZ * 2)
47 47 //#define DEFAULT_SECS 1
48   -//#define DEFAULT_USECS 0
  48 +#define DEFAULT_USECS 0
49 49
50 50 void nullhandler() {}
51 51
... ... @@ -54,11 +54,11 @@ void daemonize(void);
54 54 int
55 55 main()
56 56 {
57   - pid_t pid;
58   - long psize = sysconf(_SC_PAGESIZE);
59   - int status;
60   - int shm;
61   - int * value;
  57 + pid_t pid;
  58 + long psize = sysconf(_SC_PAGESIZE);
  59 + int status;
  60 + int shm;
  61 + struct randval * value;
62 62
63 63 struct rlimit limit = {RLIM_INFINITY, RLIM_INFINITY};
64 64 setrlimit(RLIMIT_CPU, &limit);
... ... @@ -82,9 +82,10 @@ main()
82 82 struct sigaction s;
83 83 struct itimerval interval;
84 84
85   - value = mmap (0, sizeof(int), PROT_READ|PROT_WRITE,
  85 + value = mmap (0, sizeof(struct randval), PROT_READ|PROT_WRITE,
86 86 MAP_SHARED, shm, 0);
87   - *value = 0;
  87 + value->timestamp = 0;
  88 + value->value = 0;
88 89
89 90 close(shm);
90 91
... ... @@ -112,7 +113,8 @@ main()
112 113
113 114 // child
114 115 while(!doShutdown) {
115   - *value = rand() % 100;
  116 + value->timestamp = time(NULL);
  117 + value->value = rand() % 100;
116 118 sigsuspend(&pause_mask);
117 119 }
118 120
... ...
Please register or login to post a comment