-
Notifications
You must be signed in to change notification settings - Fork 3
Architecture
jacquesd edited this page Feb 16, 2013
·
18 revisions
The ASQ app utilizes websockets to transfer events between connected clients and the server. The basic entitities of the app are:
In the following sections we present the architecture of the basic entities of ASQ
* *name* : `String` Name of the user (must be unique). * *password* : `String` (Password, stored as plain text...) * *email* : `String` Email of the user. * *slides* : `[ObjectId]` References to all the slides in the db owned by the user. * *current* : `ObjectId` Reference to the current session hosted to the user. (Defaults to `null`). * *title* : `String` Title of the slideshow * *course* : `String` Used for categorization (Max please confirm!) (Defaults to `General`) * *owner* : `ObjectId` Reference to the owner of the slideshow. * *questions* : `[ObjectId]` References to the questions related to the slideshow. * *links* : `[String]` : Links to be included with the slideshow in the head part of the page. (For css and such.) * *path* : `[Virtual:String]` : Local path to the slideshow folder on the server, to be used internally only. * *questionText* : `String` Text of the question * *questionType* : `String` Used to categorize the question by its type * *afterslide* : `String` Indicates after which slides the question comes * *answeroptions* : `[ObjectId]` References to the possible answer options provided with the question. * *optionText* : `String` Text of the option * *correct* : `String` "yes" or "no" to indicate the correctness of the option * *presenter* : `ObjectId` Reference to the user in control of the session. * *slides* : `ObjectId` Reference to the slides used in the session. * *activeSlide* : `String` Id of the current slide (ids are generated by impress.js), defaults to `'0'`. * *date* : `Date` Date of the session. Default to the date of creation. * *viewers* :`[String]` Keep track of the nicknames of viewers as string * *answers* :`[ObjectId]` Store the id of the answers submitted by viewers. (Ansers are stored in a different db.) * *showingQuestion* : `Boolean` Indicates the state of a question popup. * *showingAnswer* : `Boolean` Indicates the state of a answer popup. * *question* : `Method with callback` Callback return err and question. If there no error, err is null. If there is no question, question is null. * *path* : `String` (Virtual) Returns the path to the folder containing the slides.Websockets connect immediately once the page is loaded. Admin sockets should be authenticated.
-
viewer
: Emitted by a viewer when he first joins thefolo
namespace. -
admin
: Emitted by an admin when he first joins thectrl
namespace. -
impress:start
: Emitted by an admin when he hides the welcome popup and starts the presentation. Sent to all namespaces. -
goto
: Emitted by an admin when he moves to a slide. Re-transmitted to all namespaces.
If there is a question, aquestion
event is transmitted instead. -
question
: Emitted from thectrl
namespace when a question needs to be displayed. -
show:answer
Emitted toctrl
namespace when then answer needs to be displayed.
If a answer can be displayed, aanswer
event is transmitted to all namespaces. -
answer
Emitted fromctrl
to all namespaces. Indicates a popup answer must be displayed. -
hide
Emitted fromctrl
to all namespaces. Indicates a popup answer must be hidden. -
submit
Emitted by followers (in thefolo
namespace) when a follower submits his answer to a question.
-
/live/:user/
:Verb: GET
Follow a live presentation from user :user. -
/admin/
:Verb: GET
Control your live presentation. -
/user/:user/upload/
:Verb: POST
Upload a presentation archive. (The archive must be located atreq.files.upload
) -
/start/:id/
: Initialize a new session with the slides matching id, providing the authenticated use matches the owner of the slides.
Use absolute path to serve files from the public folder. For example to serve the file style.css in the css folder in public,
the path should be/css/style.css
and notcss/style.css
.
All paths should end up with a trailing
/
.
The following routes are reserved and used for the websocket traffic.
-
/ctrl
: Used to control the presentation, (ie. To emitgoto
events and such.) require authentification -
/folo
: Used to follow a presentation, receivegoto
events and submit answers to questions and such.