diff --git a/densaku_types.anubis b/densaku_types.anubis new file mode 100644 index 0000000..b1f2b9f --- /dev/null +++ b/densaku_types.anubis @@ -0,0 +1,27 @@ +/* + * Created by PyramIDE. + * User: フランスのトトロ aka (David RENÉ) + * Date: 07/02/2017 + * Time: 23:01 + * © Calexium + */ + + +read tools/basis.anubis +read densaku_lib/ds_generator.anubis +read calexium_lib/ds_files/ds_types.anubis +read calexium_lib/ds_files/ds_messages.anubis + + +global define One + calexium_lib_ds + ( + List(String) args + ) = + if load_ds_generator is + { + failure then println("Densaku generator can't be load"), + success(ds_gen) then forget(ds_gen.generate_type_files(calexium_lib_types_description, calexium_lib_messages_list, "ds_files/")) + }. + +execute anbexec calexium_lib_ds // generate the file diff --git a/ds_files/ds_messages.anubis b/ds_files/ds_messages.anubis new file mode 100644 index 0000000..7163704 --- /dev/null +++ b/ds_files/ds_messages.anubis @@ -0,0 +1,15 @@ +/* + * Created by PyramIDE. + * User: フランスのトトロ aka (David RENÉ) + * Date: 07/02/2017 + * Time: 23:05 + * © Calexium + */ + + +read densaku_lib/types/densaku.anubis + +public define List(DS_Message) calexium_lib_messages_list = + [ + + ]. diff --git a/ds_files/ds_types.anubis b/ds_files/ds_types.anubis new file mode 100644 index 0000000..d0ca953 --- /dev/null +++ b/ds_files/ds_types.anubis @@ -0,0 +1,70 @@ +/* + * Created by PyramIDE. + * User: フランスのトトロ aka (David RENÉ) + * Date: 07/02/2017 + * Time: 23:05 + * © Calexium + */ + +read densaku_lib/types/densaku.anubis + +public define List(DS_Type) calexium_lib_types_description = + [ +// public type DB_id: +// none, +// db_id(Int value). + ds_type("DB_id", [ + enum("none", comment("no database Primary Key ID")), + alternative("db_id", [ + component( int, "value", comment("Integer value of the Primary Key ID")) + ]) + ]), + +// public type DB_datetime: +// db_datetime(String datetime). //Date and time in ISO8601 format "YYYY-MM-DD hh:mm:ss" + ds_type("DB_datetime", [ + alternative("db_datetime", [ + component(string, "datetime", comment("Date and time in ISO8601 format \"YYYY-MM-DD hh:mm:ss\"")) + ]) + ]), + +// public type DB_date: +// db_date(String date). //Date in ISO8601 format "YYYY-MM-DD" + ds_type("DB_date", [ + alternative("db_date", [ + component(string, "date", comment("Date and time in ISO8601 format \"YYYY-MM-DD\"")) + ]) + ]), + +// public type DB_time: +// db_time(String time). //Time in ISO8601 format "hh:mm:ss" + ds_type("DB_time", [ + alternative("db_time", [ + component(string, "time", comment("Date and time in ISO8601 format \"hh:mm:ss\"")) + ]) + ]), + +// public type DB_integer: +// db_integer(Int value). +// calexium_lib/database/db_types.anubis + ds_type("DB_integer", [ + alternative("db_integer", [ + component(int, "value", comment("Integer from datatase")) + ]) + ]), + +// public type MIME: +// mime(String type, +// String sybtype, +// List(String) file_extensions). +// library/web/mime.anubis + ds_type("MIME", [ + alternative("mime", [ + component(string, "type"), + component(string, "subtype"), + component(list, string, "file_extensions") + ]) + ]), + + ] +. diff --git a/examples/minimal_web_site_vc.anubis b/examples/minimal_web_site_vc.anubis new file mode 100644 index 0000000..2dab6de --- /dev/null +++ b/examples/minimal_web_site_vc.anubis @@ -0,0 +1,282 @@ + + + *Project* The Anubis Project + + *Title* A minimal web site. + + *Copyright* Copyright © Calexium www.calexium.com. + + *Released* + + *Author* David RENÉ + + *Overview* + + This file is just an example which may help to start making a web site with + Anubis Calexium Library + It was based on the example for making a minimal web site made by Alain Prouté and located + in examples/network folder in standard library example + + This example is absolutely minimalist and manage only page. + + +read tools/basis.anubis // required for 'make_directory' and . +read system/convert.anubis +read calexium_lib/web/CXM_common.anubis // required for type 'Web_arg' +read calexium_lib/web/CXM_multihost_http_server.anubis // required for type 'HTTP_Info' +read calexium_lib/web/CXM_controller.anubis +read calexium_lib/web/CXM_making_a_web_site.anubis +read web/mime.anubis // required for list of known MIME types +read calexium_lib/web/CXM_web_arg_utils.anubis +read calexium_lib/web/CXM_form.anubis +read calexium_lib/web/jQuery/CXM_jquery_button.anubis + + *** Server directory. + + A directory for putting files for all web sites. There will be one subdirectory per web + site. + +define String web_sites_directory = my_anubis_directory+"/web_sites". + + +define HTML_Partial_Content + create_login_form + = + + partial_content( + [css(css_file("css/login.css"))], + div([id("login")], + sequence([ + //BODY + div([id("login_body")], + cxm_form( "login_form", [], "do_login", [], [], + [ + input (label(("LOGIN_NAME"), no_help), wan("login_name"), init(""), narrow, non_mandatory), + password_input(label(("PASSWORD"), no_help), wan("password"), init(""), narrow, non_mandatory), + partial(img_submit_button(("CONNECTION"), "login_form" )) + ]) + ), + ]) + )). + +define HTTP_Answer + go_login + ( + One state + )= + html_page + ( + "Example Site 1", // title of web site + [], // list of 'META' tags (empty for this site) + body // body of page + ( + // list of body options + [ + background_color(rgb(255,200,200)) + // add more body options here + ], + + // content of page + partial(create_login_form) + ) + ) +. + +define HTTP_Answer + compute_page_1 + ( + One state + )= + html_page + ( + "Example Site 1", // title of web site + [], // list of 'META' tags (empty for this site) + body // body of page + ( + // list of body options + [ + background_color(rgb(255,200,200)) + // add more body options here + ], + + // content of page + center(text([size(14)],"This is the 'Example 1' web site.")) + ) + ) +. + +define (One, HTTP_Answer) + root_controller + ( + HTTP_Info http_info, + List(Web_arg) lwa, + Bool is_https, + One toto + )= + + with action = get_String(lwa, "action", "go_login"), + if action = "go_login" then + (unique, go_login(unique)) + else + (unique, compute_page_1(unique)). + + +define WEB_Controller(One) + make_root_controller + = + web_controller("root", root_controller) +. + + Making the description of web site 1. In this description, several elements are the + bare minimum. There is no action at all, no data base, almost nothing. See + 'web/making_a_web_site.anubis' for the declaration of the function + 'make_web_site_description'. + +define Web_Site + example_site_1 + = + // make the directory for web site 1 + // (subdirectories of it will be created automatically by the HTTP server) + forget((String)make_directory(web_sites_directory+"/example_site_1")); + + // make a list of all possible 'host names' for web site 1: + with addresses = (List(String)) + [ + "example-site-1", + "127.0.0.1", + "192.168.0.1" + // add more adresses here + ], + + // now make the description of the web site + make_web_site_controller_description( + + //this is the unique ID of the web site. This ID will be use for prepend the cookies + //names belonging to that web site + "example", + + // the list of addresses defined above + addresses, + + // directory for the files of web site 1 + web_sites_directory+"/example_site_1", + + // directory for the states of that web_site + web_sites_directory+"/example_site_1/states", + + // initializing function + (One u) |-> u, // nothing to initialize for web site 1 + + // the function producing the initial state + (HTTP_Info info, + List(Web_arg) lwa, + Bool is_https) |-> unique, // there is ony one possible state for web site 1 + + // the function for handling expired tickets + // (tickets are kept on the server's disk and represent states. They are used for + // passing session informations from pages to pages. See + // 'web/CXM_making_a_web_site.anubis' for detailed explanations.) + (One expired, + Maybe(String) mb_action_name, + HTTP_Info info, + List(Web_arg) lwa, + Bool is_https) |-> unique, // keep the same state + + // the function for handling lost tickets + (Maybe(String) mb_action_name, + HTTP_Info info, + List(Web_arg) lwa, + Bool is_https) |-> unique, // restart with default state + + var([make_root_controller]), + + // the function for producing additional HTTP headers + (One u) |-> [], + + // timeout for tickets (in seconds) + 3600, // does'nt matter since only one state + + // list of redirections (one for each address) + // (see 'web/CXM_common.anubis' for the type 'Redirection') + redirection_list(map((String address) |-> redirect("/",address,"/index.awp"), addresses)), + + // character encoding for web site 1 + "UTF-8", + + // list of URI extensions producing a console/journal message + [ + ".awp", // pages computed by this program + ".jpg", // images, etc... + ".gif", + ".png" + // add more extensions here (they must be known; see 'web/mime.anubis') + ], + + // list of HTTP headers which are traced in the console/journal messages + [ + "host", + "user-agent" + // add more HTTP headers here + ], + + // secret string (used by 'private download') + "HUD76GRD56FD7GFDS4RT", // for a real site, please choose another one + // it must remain secret + + // list of known MIME types (taken from 'web/mime.anubis') + known_mime_types, + + // action to be performed before a file is sent + // (for example, this may be used for counting downloads) + (String action_name, + List(Web_arg) lwa) |-> unique // no action at all + ) +. + + + + + *** Example site 2. + + Imagine another web site here... + + + + + + *** Starting all our web sites together. + +global define One + minimal_web_site_vc + ( + List(String) args + ) = + // make the directory for all web sites (if needed) + forget((String) make_directory(web_sites_directory)); + + with http_port = (Word32)8000, + https_port = (Word32)4430, + // create a variable for handling the shutdown of our web sites + with shutdown_required = var(false), + with is_shutdown = (One u) |-> *shutdown_required, + + // start all web sites + if start_web_sites( + 0, // listen on all IP addresses + http_port, // port for HTTP + https_port, // port for HTTPS + "www.georges.example.com", // common name of SSL certificate + [ + example_site_1 + // add other web sites here + ], + is_shutdown) is + { + cannot_bind_to_port(n) then println("Cannot bind to port: "+n), + cannot_bind_to_port(n,m) then println("Cannot bind to ports: "+n+", "+m), + ok(s1,s2) then println("Servers started on ports "+http_port+" (HTTP) and "+https_port+" (HTTPS).") + } +. + + + -- libgit2 0.21.4