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:
M | src/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()