Commit d4b1c3fd3a74779de65a3e13c33c9b0da781a243

Authored by Georg Hopp
1 parent 69cfdd07

now the session livetime is shown with a bar, as well as the current session id.…

… These are updated on reload or ajax call.
... ... @@ -7,18 +7,36 @@
7 7 <link rel="stylesheet" type="text/css" href="/assets/style/common">
8 8 <script type="text/javascript" src="/assets/js/jquery"></script>
9 9 <script type="text/javascript" src="/assets/js/serverval"></script>
  10 + <script type="text/javascript" src="/assets/js/session"></script>
10 11 <script>
11 12 //<![CDATA[
  13 + var sess = null;
  14 +
12 15 $(document).ready(function() {
13 16 var sval = new ServerVal("#randval");
14 17
  18 + sess = new Session("#sessinfo");
  19 + $.getJSON("/sessinfo/", $.proxy(sess.loadJSON, sess));
  20 +
15 21 $("ul#menu li:eq(0)").click(function() {
16 22 sval.start();
17 23 });
18 24
  25 + $("ul#menu li:eq(1)").click(function() {
  26 + $("#login").removeClass("hide");
  27 + });
  28 +
19 29 $("#randval").click(function() {
20 30 sval.stop();
21 31 });
  32 +
  33 + $("#login form").submit(function(event) {
  34 + event.preventDefault();
  35 + $.post("/login/",
  36 + $("#login form").serialize(),
  37 + $.proxy(sess.loadJSON, sess));
  38 + $("#login").addClass("hide");
  39 + });
22 40 });
23 41 //]]>
24 42 </script>
... ... @@ -26,7 +44,17 @@
26 44 <body>
27 45 <ul id="menu">
28 46 <li>random Value</li>
  47 + <li>login</li>
29 48 </ul>
  49 + <div id="sessinfo" class="x-small">
  50 + Session: <span></span><br />
  51 + <canvas width="100px" height="3px"></canvas>
  52 + </div>
  53 + <div id="login" class="hide">
  54 + <form>
  55 + <input type="text" name="username" />
  56 + </form>
  57 + </div>
30 58 <div id="randval" class="hide">
31 59 <span class=\"small">
32 60 Value created at: <br />
... ...
... ... @@ -33,13 +33,17 @@ ServerVal.prototype.show = function()
33 33
34 34 ServerVal.prototype.start = function()
35 35 {
36   - this.interval = setInterval($.proxy(this.process, this), 1000);
  36 + if (null === this.interval) {
  37 + this.interval = setInterval($.proxy(this.process, this), 1000);
  38 + }
37 39 }
38 40
39 41 ServerVal.prototype.process = function()
40 42 {
41 43 if (0 >= this.vnext) {
42   - $.getJSON("/randval/", $.proxy(this.loadJSON, this));
  44 + $.getJSON("/randval/", $.proxy(this.loadJSON, this))
  45 + .error($.proxy(function() {this.stop();}, this));
  46 + $.getJSON("/sessinfo/", $.proxy(sess.loadJSON, sess));
43 47 }
44 48
45 49 else {
... ...
  1 +function Session(sId)
  2 +{
  3 + this.eSid = $(sId + " span");
  4 + this.canvas = $(sId + " canvas").get(0);
  5 + this.context = this.canvas.getContext("2d");
  6 +
  7 + this.id = "none"
  8 + this.timeout = 0;
  9 + this.timeleft = 0;
  10 + this.interval = null;
  11 +
  12 + this.draw();
  13 +}
  14 +
  15 +Session.prototype.loadJSON = function(data)
  16 +{
  17 + this.id = ("0" == data.id)? "none" : data.id;
  18 + this.timeout = data.timeout;
  19 + this.timeleft = data.timeleft;
  20 +
  21 + this.draw();
  22 + if (0 < this.timeleft)
  23 + this.start();
  24 +}
  25 +
  26 +Session.prototype.draw = function()
  27 +{
  28 + this.eSid.empty().append(this.id);
  29 +
  30 + this.context.fillStyle = "rgb(255, 0, 0)";
  31 + this.context.fillRect(0, 0, this.canvas.width, this.canvas.height);
  32 +
  33 + this.context.fillStyle = "rgb(0, 255, 0)";
  34 + this.context.fillRect(0, 0,
  35 + this.canvas.width / this.timeout * this.timeleft,
  36 + this.canvas.height);
  37 +}
  38 +
  39 +Session.prototype.start = function()
  40 +{
  41 + if (null === this.interval) {
  42 + this.interval = setInterval($.proxy(this.process, this), 1000);
  43 + }
  44 +}
  45 +
  46 +Session.prototype.process = function()
  47 +{
  48 + if (0 >= this.timeleft) {
  49 + this.stop();
  50 + }
  51 +
  52 + else {
  53 + this.timeleft--;
  54 + this.draw();
  55 + }
  56 +}
  57 +
  58 +Session.prototype.stop = function()
  59 +{
  60 + clearInterval(this.interval);
  61 + this.interval = null;
  62 + this.id = "none";
  63 + this.timeout = 0;
  64 + this.timeleft = 0;
  65 +
  66 + this.draw();
  67 +}
  68 +
  69 +// vim: set ts=4 sw=4:
... ...
... ... @@ -8,14 +8,22 @@ div#randval {
8 8 border-radius: 10px;
9 9 }
10 10
11   -div.hide#randval {
12   - top: -500px;
  11 +div#login {
  12 + position: fixed;
  13 +}
  14 +
  15 +div.hide {
  16 + top: -500px !important;
13 17 }
14 18
15 19 .small {
16 20 font-size: small;
17 21 }
18 22
  23 +.x-small {
  24 + font-size: x-small;
  25 +}
  26 +
19 27 ul#menu {
20 28 list-style: none inside;
21 29 margin: 0px;
... ... @@ -38,4 +46,9 @@ ul#menu li {
38 46 float: left;
39 47 margin-right: 1px;
40 48 }
  49 +
  50 +div#sessinfo canvas {
  51 + border: 1px solid black;
  52 +}
  53 +
41 54 /* vim: set st=4 sw=4: */
... ...
... ... @@ -29,6 +29,7 @@
29 29
30 30 #include "class.h"
31 31 #include "http/message.h"
  32 +#include "session.h"
32 33
33 34
34 35 CLASS(HttpResponse) {
... ... @@ -47,6 +48,7 @@ HttpResponse httpResponse403();
47 48 HttpResponse httpResponseMe();
48 49 HttpResponse httpResponseLoginForm();
49 50 HttpResponse httpResponseRandval(time_t, int);
  51 +HttpResponse httpResponseSession(Session);
50 52 HttpResponse httpResponseAsset(
51 53 const char *,
52 54 const char *, size_t,
... ...
... ... @@ -30,7 +30,8 @@ RESP = http/response.c \
30 30 http/response/403.c \
31 31 http/response/login_form.c \
32 32 http/response/asset.c \
33   - http/response/randval.c
  33 + http/response/randval.c \
  34 + http/response/session.c
34 35 PARSER = http/parser.c \
35 36 http/parser/parse.c \
36 37 http/parser/new_message.c \
... ...
  1 +/**
  2 + * \file
  3 + *
  4 + * \author Georg Hopp
  5 + *
  6 + * \copyright
  7 + * Copyright (C) 2012 Georg Hopp
  8 + *
  9 + * This program is free software: you can redistribute it and/or modify
  10 + * it under the terms of the GNU General Public License as published by
  11 + * the Free Software Foundation, either version 3 of the License, or
  12 + * (at your option) any later version.
  13 + *
  14 + * This program is distributed in the hope that it will be useful,
  15 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17 + * GNU General Public License for more details.
  18 + *
  19 + * You should have received a copy of the GNU General Public License
  20 + * along with this program. If not, see <http://www.gnu.org/licenses/>.
  21 + */
  22 +
  23 +#include <stdlib.h>
  24 +#include <string.h>
  25 +#include <stdio.h>
  26 +#include <time.h>
  27 +#include <sys/types.h>
  28 +
  29 +#include "class.h"
  30 +#include "interface/class.h"
  31 +
  32 +#include "http/response.h"
  33 +#include "http/message.h"
  34 +#include "http/header.h"
  35 +#include "session.h"
  36 +
  37 +#include "utils/memory.h"
  38 +
  39 +#define RESP_DATA "{\"id\":\"%lu\",\"timeout\":%d,\"timeleft\":%ld}"
  40 +
  41 +HttpResponse
  42 +httpResponseSession(Session session)
  43 +{
  44 + char buffer[200];
  45 + HttpResponse response;
  46 + HttpMessage message;
  47 + size_t nbuf;
  48 +
  49 + response = new(HttpResponse, "HTTP/1.1", 200, "OK");
  50 + message = (HttpMessage)response;
  51 +
  52 + httpHeaderAdd(&(message->header),
  53 + new(HttpHeader, CSTRA("Content-Type"), CSTRA("application/json")));
  54 +
  55 + message->type = HTTP_MESSAGE_BUFFERED;
  56 +
  57 + nbuf = sprintf(buffer, RESP_DATA,
  58 + (NULL != session)? session->id : 0,
  59 + (NULL != session)? SESSION_LIVETIME : 0,
  60 + (NULL != session)? session->livetime - time(NULL) : 0);
  61 +
  62 + message->nbody = nbuf;
  63 + message->body = malloc(nbuf);
  64 + memcpy(message->body, buffer, nbuf);
  65 +
  66 + return response;
  67 +}
  68 +
  69 +// vim: set ts=4 sw=4:
... ...
... ... @@ -24,6 +24,7 @@
24 24 #include <stdio.h>
25 25 #include <stdlib.h>
26 26 #include <time.h>
  27 +#include <sys/time.h>
27 28
28 29 #include "class.h"
29 30 #include "interface/class.h"
... ... @@ -91,7 +92,7 @@ httpWorkerProcess(HttpWorker this, Stream st)
91 92 }
92 93
93 94 if (0 == strcmp("POST", request->method)) {
94   - if (0 == strcmp("/me/", request->uri)) {
  95 + if (0 == strcmp("/login/", request->uri)) {
95 96 char * delim = memchr(rmessage->body, '=', rmessage->nbody);
96 97 char * val;
97 98 size_t nkey, nval;
... ... @@ -108,10 +109,7 @@ httpWorkerProcess(HttpWorker this, Stream st)
108 109 new(Session, val, nval));
109 110 nbuf = sprintf(buffer, "sid=%lu;Path=/", this->session->id);
110 111
111   - response = httpWorkerGetAsset(
112   - request,
113   - "./assets/html/main.html",
114   - CSTRA("text/html"));
  112 + response = (HttpMessage)httpResponseSession(this->session);
115 113
116 114 httpHeaderAdd(
117 115 &(response->header),
... ... @@ -121,10 +119,6 @@ httpWorkerProcess(HttpWorker this, Stream st)
121 119
122 120 if (0 == strcmp("GET", request->method)) {
123 121
124   - if (0 == strcmp("/login/", request->uri)) {
125   - response = (HttpMessage)httpResponseLoginForm();
126   - }
127   -
128 122 if (0 == strcmp("/", request->uri)) {
129 123 response = httpWorkerGetAsset(
130 124 request,
... ... @@ -132,14 +126,18 @@ httpWorkerProcess(HttpWorker this, Stream st)
132 126 CSTRA("text/html"));
133 127 }
134 128
  129 + if (0 == strcmp("/sessinfo/", request->uri)) {
  130 + response = (HttpMessage)httpResponseSession(this->session);
  131 + }
  132 +
135 133 if (0 == strcmp("/randval/", request->uri)) {
136   - //if (NULL != this->session) {
  134 + if (NULL != this->session) {
137 135 response = (HttpMessage)httpResponseRandval(
138 136 this->val->timestamp,
139 137 this->val->value);
140   - //} else {
141   - // response = (HttpMessage)httpResponse403();
142   - //}
  138 + } else {
  139 + response = (HttpMessage)httpResponse403();
  140 + }
143 141 }
144 142
145 143 if (0 == strcmp("/image/me", request->uri)) {
... ... @@ -163,6 +161,13 @@ httpWorkerProcess(HttpWorker this, Stream st)
163 161 CSTRA("text/javascript"));
164 162 }
165 163
  164 + if (0 == strcmp("/assets/js/session", request->uri)) {
  165 + response = httpWorkerGetAsset(
  166 + request,
  167 + "./assets/js/session.js",
  168 + CSTRA("text/javascript"));
  169 + }
  170 +
166 171 if (0 == strcmp("/assets/style/common", request->uri)) {
167 172 response = httpWorkerGetAsset(
168 173 request,
... ...
Please register or login to post a comment