--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html> <head>
+<link rel="stylesheet" type="text/css" href="static/style.css">
+<title>Empire Web Client</title>
+
+<script type="text/javascript" src="static/dojo-release-1.1.1/dojo/dojo.js.uncompressed.js"
+ djConfig="parseOnLoad:true, isDebug:false"></script>
+<script type="text/javascript" src="static/eow.js"></script>
+<script type="text/javascript">
+var init = function(){
+ console.log("I run after the page is ready. See this in the console");
+ setup_client();
+ get_next_update();
+};
+dojo.addOnLoad(init);
+</script>
+
+</head>
+
+<body>
+<div id="output">
+<span class="less">EOW alpha0 Empire/Ajax</span>
+<br/>
+<br/>
+<span class="info">Welcome to the Empire over the Web client (EOW).</span>
+</div>
+<div id="input">
+<form id="cmdline" name='f' onsubmit='return false;' class='cmdline' action=''>
+<table class="inputtable"><tr><td><div id='prompt' class='less'>>
+</div></td><td class="inputtd"><input id='inputfield' name='q'
+ type='text' class='cmdline' autocomplete='off' value=""
+ onkeyup="inputfield_keyup(event);" /></td></tr></table>
+</form>
+</div>
+
+<hr>
+<address></address>
+<!-- hhmts start --> Last modified: Sat Dec 20 22:16:28 CET 2008 <!-- hhmts end -->
+</body> </html>
+++ /dev/null
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html> <head>
-<link rel="stylesheet" type="text/css" href="style.css">
-<title>Empire Web Client</title>
-
-<script type="text/javascript" src="dojo-release-1.1.1/dojo/dojo.js.uncompressed.js"
- djConfig="parseOnLoad:true, isDebug:false"></script>
-<script type="text/javascript" src="eow.js"></script>
-<script type="text/javascript">
-var init = function(){
- console.log("I run after the page is ready. See this in the console");
- setup_client();
- get_next_update();
-};
-dojo.addOnLoad(init);
-</script>
-
-</head>
-
-<body>
-<div id="output">
-<span class="less">EOW alpha0 Empire/Ajax</span>
-<br/>
-<br/>
-<span class="info">Welcome to the Empire over the Web client (EOW).</span>
-</div>
-<div id="input">
-<form id="cmdline" name='f' onsubmit='return false;' class='cmdline' action=''>
-<table class="inputtable"><tr><td><div id='prompt' class='less'>>
-</div></td><td class="inputtd"><input id='inputfield' name='q'
- type='text' class='cmdline' autocomplete='off' value=""
- onkeyup="inputfield_keyup(event);" /></td></tr></table>
-</form>
-</div>
-
-<hr>
-<address></address>
-<!-- hhmts start --> Last modified: Sun Dec 14 23:04:50 CET 2008 <!-- hhmts end -->
-</body> </html>
:directory (pathname-directory *this-file*)))
(defparameter +templates-root+ (namestring *this-dir*))
-(defparameter +root-url+ "/eow/static/test.html")
+(defparameter +root-url+ "/eow/")
(defparameter +web-root-base+ "/eow")
(defparameter +web-root+ (concatenate 'string +web-root-base+ "/"))
(defparameter +static-web-root+ (concatenate 'string +web-root+ "static/"))
(defparameter +static-files-root+ (concatenate 'string +templates-root+ "static/"))
(defparameter +login-page+ (concatenate 'string +static-web-root+ "login.html"))
+(defparameter +root-page-file+ "root.html")
(defun string-starts-with (string prefix)
;; (from Hunchentoot)
(defgeneric prompt (session minutes btus))
(defgeneric data (session message))
+(defvar *session*)
+
(defun update ()
"Send stream of updates to client"
- (let ((s (session-value `session)))
- (locked-queue:dequeue (update-queue s))))
+ (with-session
+ (locked-queue:dequeue (update-queue *session*))))
(defmethod send ((s session) string)
"Push a javascript update fragment to the client."
(defmethod data ((s session) message)
(send s (parenscript:ps* `(msg ,message))))
-(defun login ()
- (let ((s (session-value 'session)))
- (if s
- (redirect +root-url+)
- (redirect +login-page+))))
+(defmacro with-session (&body body)
+ `(let ((*session* (session-value 'session)))
+ (if *session*
+ (progn ,@body)
+ (redirect +login-page+))))
;; destination of login-form
(defun login-action ()
(format nil "Connection error: ~a~%" e))))
(defun command-action ()
- (let ((s (session-value 'session)))
- (empire:send-message (connection s) (get-parameter "q"))))
+ (with-session
+ (empire:send-message (connection *session*) (get-parameter "q"))))
+
+(defun root-page ()
+ (with-session
+ (handle-static-file (concatenate 'string +static-files-root+ +root-page-file+))))
(defun dispatch (request)
(let ((script-name (script-name request)))
((string= script-name "/eow/login") 'login-action)
((string= script-name "/eow/command") 'command-action)
((or (string-equal script-name +web-root-base+)
- (string-equal script-name +web-root+)) 'login) ; go to the start page
+ (string-equal script-name +web-root+)) 'root-page) ; go to the start page
((string-starts-with script-name +static-web-root+) 'serve-static)))) ; serve static file