viking

webkit based web browser for Enlightenment
Log | Files | Refs | LICENSE

commit 28e751af49d53fb11cef5e2407cd13f04490f4e5
parent 9ecc0687e6d8520a7bd237200683db0542617a31
Author: Kyle Milz <kmilz@ucalgary.ca>
Date:   Sat,  6 Oct 2012 19:18:08 -0600

move the server connection check to very beginning

its best if we know a server is running early so we can send a message
to it and then exit with minimal init/shutdown.

this is helpful because there really is quite a lot of init/shutdown
work.

Diffstat:
Msrc/main.c | 104++++++++++++++++++++++++++++++++++++++++----------------------------------------
1 file changed, 52 insertions(+), 52 deletions(-)

diff --git a/src/main.c b/src/main.c @@ -163,16 +163,18 @@ static Searchengine searchengines[] = { }; static Eina_Bool -_socket_send(void *data, int type, Ecore_Con_Event_Server_Add *ev) +_client_add(void *data, int type, Ecore_Con_Event_Server_Add *ev) { - char welcome[] = "http://reddit.com/r/aww"; + char *url = data; + + printf("_client_add() %s\n", url); printf("Server with ip %s, name %s, port %d, connected = %d!\n", ecore_con_server_ip_get(ev->server), ecore_con_server_name_get(ev->server), ecore_con_server_port_get(ev->server), ecore_con_server_connected_get(ev->server)); - ecore_con_server_send(ev->server, welcome, sizeof(welcome)); + ecore_con_server_send(ev->server, url, strlen(url)); ecore_con_server_flush(ev->server); ecore_main_loop_quit(); @@ -180,7 +182,7 @@ _socket_send(void *data, int type, Ecore_Con_Event_Server_Add *ev) } static Eina_Bool -_socket_err(void *data, int type, Ecore_Con_Event_Server_Del *ev) +_client_del(void *data, int type, Ecore_Con_Event_Server_Del *ev) { if (!ev->server) { @@ -198,7 +200,7 @@ _socket_err(void *data, int type, Ecore_Con_Event_Server_Del *ev) } static Eina_Bool -_socket_receive(void *data, int type, Ecore_Con_Event_Client_Data *ev) +_server_data(void *data, int type, Ecore_Con_Event_Client_Data *ev) { char fmt[128]; @@ -232,7 +234,7 @@ EAPI_MAIN int elm_main(int argc, char *argv[]) { App_Data *ad; - char *basename, *uri, path[PATH_MAX]; + char *basename, *uri = NULL, path[PATH_MAX]; Config *config; Hist *hist; Session *session; @@ -242,6 +244,7 @@ elm_main(int argc, char *argv[]) Ewk_Cookie_Manager *cookie_manager; Ecore_Timer *session_save_timer = NULL; Eina_Bool quit_option = EINA_FALSE; + Ecore_Con_Server *svr; Ecore_Getopt_Value values[] = { ECORE_GETOPT_VALUE_BOOL(quit_option), @@ -252,13 +255,31 @@ elm_main(int argc, char *argv[]) }; args = ecore_getopt_parse(&options, values, argc, argv); - if (args < 0) - ERR("Could not parse command line options."); + if (args < 0) ERR("Could not parse command line options."); + if (args < argc) + uri = uri_sanitize(argv[args]); if (!elm_need_web()) return -1; + ecore_con_init(); + if ((svr = ecore_con_server_connect(ECORE_CON_LOCAL_USER, "viking", 0, NULL))) { + if (!uri) + uri = "NULL"; + + printf("server found, sending url ..\n"); + ecore_event_handler_add(ECORE_CON_EVENT_SERVER_ADD, + (Ecore_Event_Handler_Cb)_client_add, uri); + ecore_event_handler_add(ECORE_CON_EVENT_SERVER_DEL, + (Ecore_Event_Handler_Cb)_client_del, uri); + + ecore_main_loop_begin(); + ecore_con_shutdown(); + elm_shutdown(); + exit(0); + } + viking_state_init(); /* calloc zeros the memory!! */ @@ -327,13 +348,6 @@ elm_main(int argc, char *argv[]) if (!session_save_timer) ERR("Could not register session save timer"); - /* url included on command line */ - if (args < argc) { - uri = uri_sanitize(argv[args]); - printf("setup_config() cmd line uri = %s\n", uri); - free(uri); - } - make_searchengines_list(searchengines, LENGTH(searchengines)); make_uri_handlers_list(uri_handlers, LENGTH(uri_handlers)); @@ -350,48 +364,32 @@ elm_main(int argc, char *argv[]) ad->zoomstep = 0.1f; - ecore_con_init(); + if (!(svr = ecore_con_server_add(ECORE_CON_LOCAL_USER, "viking", 0, NULL))) { + printf("could not create server -- this is bad!\n"); + exit(1); + } - Ecore_Con_Server *svr; - if (!(svr = ecore_con_server_connect(ECORE_CON_LOCAL_USER, "viking", 0, NULL))) { - printf("server not found, creating new one ..\n"); - - if (!(svr = ecore_con_server_add(ECORE_CON_LOCAL_USER, "viking", 0, NULL))) { - printf("could not create server -- this is bad!\n"); - exit(1); - } - - ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DEL, - (Ecore_Event_Handler_Cb)_server_del, NULL); - ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DATA, - (Ecore_Event_Handler_Cb)_socket_receive, NULL); - ecore_con_server_timeout_set(svr, 10); - // ecore_con_server_client_limit_set(svr, 3, 0); - - - /* try to restore session */ - if (config_restore_state_get(config) && session_windows_count(session) > 0 - && session_restore()) { - printf("main() session restored successfully.\n"); - } - else { - Arg arg; - arg.i = DefaultBuf; - window_add(&arg, ad); - } - - elm_run(); + ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DEL, + (Ecore_Event_Handler_Cb)_server_del, NULL); + ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DATA, + (Ecore_Event_Handler_Cb)_server_data, NULL); + ecore_con_server_timeout_set(svr, 10); + // ecore_con_server_client_limit_set(svr, 3, 0); + + + /* try to restore session */ + if (session_windows_count(session) > 0 && session_restore()) { + printf("session restored successfully.\n"); } else { - printf("server found, sending url ..\n"); - ecore_event_handler_add(ECORE_CON_EVENT_SERVER_ADD, - (Ecore_Event_Handler_Cb)_socket_send, NULL); - ecore_event_handler_add(ECORE_CON_EVENT_SERVER_DEL, - (Ecore_Event_Handler_Cb)_socket_err, NULL); - - ecore_main_loop_begin(); + Arg arg; + arg.i = DefaultBuf; + window_add(&arg, ad); } + elm_run(); + + // printf("viking was up for %0.3f seconds\n", ecore_con_server_uptime_get(svr)); ecore_con_shutdown(); @@ -422,6 +420,8 @@ elm_main(int argc, char *argv[]) elm_shutdown(); viking_state_shutdown(); + free(uri); + return 0; } ELM_MAIN()