From 9965b3f3134c9440244191435ace3e6e272ae67b Mon Sep 17 00:00:00 2001 From: Patrick Hornecker Date: Wed, 23 Dec 2009 16:11:38 +0100 Subject: more changes in threading of msg_sender, receiver and sender...not able to build BROKEN BROKEN BROKEN --- friendfinder/Makefile.inc | 2 +- friendfinder/gui.c | 44 ++++++++++++++------ friendfinder/gui.h | 2 + friendfinder/handler.c | 100 +++++++--------------------------------------- friendfinder/handler.h | 12 ++++-- friendfinder/msg_sender.c | 55 +++++-------------------- friendfinder/msg_sender.h | 14 +++---- friendfinder/receiver.c | 22 ++++------ friendfinder/receiver.h | 7 +--- friendfinder/sender.c | 12 ++---- friendfinder/sender.h | 8 +--- 11 files changed, 87 insertions(+), 191 deletions(-) (limited to 'friendfinder') diff --git a/friendfinder/Makefile.inc b/friendfinder/Makefile.inc index beb8f07..87fba13 100644 --- a/friendfinder/Makefile.inc +++ b/friendfinder/Makefile.inc @@ -4,7 +4,7 @@ CFLAGS = -g -Wall -std=c99 INCLUDES = -I../include -LIBS = -ledje -lecore -levas -lelementary -lircclient -lcrypto -lproj +LIBS = -ledje -lecore -levas -lelementary -lircclient -lcrypto -lproj -lpthread ########### diff --git a/friendfinder/gui.c b/friendfinder/gui.c index 62b35ff..b5d5bf8 100644 --- a/friendfinder/gui.c +++ b/friendfinder/gui.c @@ -22,18 +22,22 @@ char *from, *to, *current_msg, *last_msg; static Evas_Object *win, *bbx; - - - static void on_cancel(void *data, Evas_Object *obj, void *event_info) { /* cleanly exit */ elm_exit(); elm_shutdown(); - disconnect_receiver(); - disconnect_sender(); - disconnect_msg_sender(); - shutdown_ecore_handler(); + close_threads(); +} + +static void on_own_position(void *data, Evas_Object *obj, void *event_info) +{ + init_sender_thread(from); +} + +static void on_show_users(void *data, Evas_Object *obj, void *event_info) +{ + init_receiver_thread(from); } static void on_chat(void *data, Evas_Object *obj, void *event_info) @@ -286,7 +290,7 @@ void init_toolbar() void init_options() { - Evas_Object *bg, *bx, *bx2, *bt; + Evas_Object *bg, *bx, *bx2, *bt, *bt2, *bt3; /* add a standard bg */ bg = elm_bg_add(win); @@ -311,12 +315,28 @@ void init_options() evas_object_show(bx2); bt = elm_button_add(win); - elm_button_label_set(bt, "fiend friends"); + elm_button_label_set(bt, "Find friends"); evas_object_size_hint_weight_set(bt, 1.0, 0.0); evas_object_size_hint_align_set(bt, -1.0, -1.0); elm_box_pack_end(bx, bt); evas_object_smart_callback_add(bt, "clicked", NULL, NULL); - evas_object_show(bt); + evas_object_show(bt); + + bt2 = elm_button_add(win); + elm_button_label_set(bt2, "Send own position"); + evas_object_size_hint_weight_set(bt2, 1.0, 0.0); + evas_object_size_hint_align_set(bt2, -1.0, -1.0); + elm_box_pack_end(bx, bt2); + evas_object_smart_callback_add(bt2, "clicked", on_own_position, NULL); + evas_object_show(bt2); + + bt3 = elm_button_add(win); + elm_button_label_set(bt3, "Show other users"); + evas_object_size_hint_weight_set(bt3, 1.0, 0.0); + evas_object_size_hint_align_set(bt3, -1.0, -1.0); + elm_box_pack_end(bx, bt3); + evas_object_smart_callback_add(bt3, "clicked", on_show_users, NULL); + evas_object_show(bt3); } void init_map() @@ -430,8 +450,8 @@ void elm_main () /* show the window */ evas_object_show(win); - init_ecore_handler(from, to); - /* get going and draw/respond to the user */ + init_msg_thread(from, to); + /* get going and draw/respond to the user */ elm_run(); /* standard shutdown */ diff --git a/friendfinder/gui.h b/friendfinder/gui.h index 48b11f6..65fd3fa 100644 --- a/friendfinder/gui.h +++ b/friendfinder/gui.h @@ -7,6 +7,8 @@ //callback functions static void on_cancel(void *data, Evas_Object *obj, void *event_info); static void on_send_message(void *data, Evas_Object *obj, void *event_info); +static void on_own_position(void *data, Evas_Object *obj, void *event_info); +static void on_show_users(void *data, Evas_Object *obj, void *event_info); static void on_message(void *data, Evas_Object *obj, void *event_info); static void on_options(void *data, Evas_Object *obj, void *event_info); static void on_chat(void *data, Evas_Object *obj, void *event_info); diff --git a/friendfinder/handler.c b/friendfinder/handler.c index 6967351..e3f7087 100644 --- a/friendfinder/handler.c +++ b/friendfinder/handler.c @@ -1,103 +1,33 @@ -#include "Ecore.h" -#include "Evas.h" -#include "Ecore_Evas.h" -#include "Elementary.h" +#include "pthread.h" -#include "receiver.h" -#include "sender.h" #include "msg_sender.h" +#include "sender.h" +#include "receiver.h" -int is_init = 0; -double interval = 0.1; -int pos_start = 0; - - -void pause_msg_sender() -{ - msg_stop_irc(); -} +pthread_t msg_thread, sender_thread, receiver_thread; -void continue_msg_sender() -{ - msg_run_irc(); -} -void pause_receiver() +void init_msg_thread(char *from, char *to) { - receiver_stop_irc(); -} + struct nick *nicknames = (struct nick*) malloc(sizeof(struct nick)); + nicknames->from = from; + nicknames->to = to; -void continue_receiver() -{ - receiver_run_irc(); + pthread_create(&msg_thread, NULL, msg_main_loop, (void*) nicknames); } -void pause_sender() +void init_receiver_thread(char *from) { - sender_stop_irc(); -} + pthread_create(&sender_thread, NULL, sender_main, (void*) from); -void continue_sender() -{ - sender_run_irc(); } -void continue_gui(void *data) +void init_sender_thread(char *from) { - elm_run(); -} - -void start_pos() -{ - pos_start = 1; -} - -void init_ecore_handler(char *from, char *to) -{ - ecore_init(); - - if (is_init == 0) - { - is_init = 1; - msg_main_loop(from, to); - sender_main(from); - receiver_main(from); - } - ecore_idle_exiter_add(continue_gui, NULL); - - ecore_idle_exiter_add(continue_msg_sender, NULL); - - ecore_idle_exiter_add(pause_msg_sender, NULL); - - ecore_idle_exiter_add(continue_gui, NULL); - - if (pos_start == 1) - { - printf("HANDLER: sender started\n"); - - ecore_idle_exiter_add(continue_sender, NULL); - - ecore_idle_exiter_add(pause_sender, NULL); - } - - ecore_idle_exiter_add(continue_gui, NULL); - - if (pos_start == 1) - { - printf("HANDLER: receiver_started"); - - ecore_idle_exiter_add(continue_receiver, NULL); - - ecore_idle_exiter_add(pause_receiver, NULL); - } - - ecore_idle_exiter_add(continue_gui, NULL); - - ecore_main_loop_begin(); + pthread_create(&receiver_thread, NULL, receiver_main, (void*) from); } -void shutdown_ecore_handler() +void close_threads() { - ecore_main_loop_quit(); - ecore_shutdown(); + pthread_exit(NULL); } diff --git a/friendfinder/handler.h b/friendfinder/handler.h index bb3256b..6de03bd 100644 --- a/friendfinder/handler.h +++ b/friendfinder/handler.h @@ -4,10 +4,14 @@ /* starts postition sending */ void start_pos(); -/* inits all needed parts of ecore for the handlers */ -void init_ecore_handler(char *from, char *to); +/* init threads */ +void init_msg_thread(char *from, char *to); -/* shutdown all ecore handler parts */ -void shutdown_ecore_handler(); +void init_sender_thread(char *from); + +void init_receiver_thread(char *from); + +/* close all threads */ +void close_threads() #endif diff --git a/friendfinder/msg_sender.c b/friendfinder/msg_sender.c index 0499f92..4994ce2 100644 --- a/friendfinder/msg_sender.c +++ b/friendfinder/msg_sender.c @@ -10,7 +10,7 @@ static irc_session_t *session; irc_callbacks_t callbacks; -char* nick; +char* nick_from; char* send_to; char* received_msg; char* msg_to_send; @@ -196,7 +196,7 @@ void on_dcc_req(irc_session_t * session, const char * event, const char * origin } -void msg_main_loop(char *sender, char *receiver) +void msg_main_loop(void *nicknames) { memset(&callbacks, 0, sizeof(callbacks)); @@ -205,52 +205,15 @@ void msg_main_loop(char *sender, char *receiver) callbacks.event_dcc_chat_req = on_dcc_req; callbacks.event_channel = on_channel; - nick = sender; - send_to = receiver; + struct nick *nicks= (struct nick*) malloc(sizeof(struct nick)); + nicks = (struct nick*) nicknames; + nick_from = nicks->from; + send_to = nicks->to; - if (init_connection("127.0.0.1", sender) == 0) + if (init_connection("127.0.0.1", nick_from) == 0) { printf("MSG_SENDER: connection succesfull\n"); } -} - -void msg_run_irc() -{ - if (run_session == 0) - { - irc_run(session); - run_session = 1; - } -} - -void msg_stop_irc() -{ - irc_cmd_quit(session, "paused"); -} - -/* -int main (int argc, char **argv) -{ - memset(&callbacks, 0, sizeof(callbacks)); - - callbacks.event_connect = on_connect; - callbacks.event_join = on_join; - callbacks.event_dcc_chat_req = on_dcc_req; - callbacks.event_channel = on_channel; - - nick = argv[1]; - send_to = argv[2]; - - if (init_connection("127.0.0.1", argv[1]) == 0) - { - int ses = irc_run(session); - return 0; - } - - else - { - printf("aborting...\n"); - return 1; - } -}*/ + irc_run(session); +} diff --git a/friendfinder/msg_sender.h b/friendfinder/msg_sender.h index de90e3c..c7497c1 100644 --- a/friendfinder/msg_sender.h +++ b/friendfinder/msg_sender.h @@ -1,14 +1,14 @@ #ifndef __MSG_SENDER_H_ #define __MSG_SENDER_H_ -/* inits main loop of message sender. callbacks are initialized in this function */ -void msg_main_loop(char *sender, char *receiver); - -/* starts infinite loop */ -void msg_run_ircm(); +struct nick +{ + char *from; + char *to; +}; -/* stops infinite loop * loop */ -void msg_stop_irc(); +/* inits main loop of message sender. callbacks are initialized in this function */ +void msg_main_loop(void *nicknames); /* input for message which has to be sent */ void set_txt_msg(char *msg); diff --git a/friendfinder/receiver.c b/friendfinder/receiver.c index b588103..10a7d94 100644 --- a/friendfinder/receiver.c +++ b/friendfinder/receiver.c @@ -31,6 +31,7 @@ int init_connection_receiver(char* server_ip, char* user) if (irc_is_connected(session) == 1) { printf("RECEIVER: connected...\n"); + return 1; } } @@ -85,14 +86,14 @@ void get_position(irc_session_t * session, const char * event, const char * orig } //send an aknowledge to the sender (=sendername, to differ between multiple sender) - if (strcmp(params[1], "128") != 0) + // if (strcmp(params[1], "128") != 0) { irc_cmd_msg(session, "#test", sender_name); counter++; } - else + // else { - counter++; + // counter++; } } @@ -100,30 +101,23 @@ void get_position(irc_session_t * session, const char * event, const char * orig void on_connect_receiver(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count) { + printf("on_connect_receiver"); BF_set_key(&key, 5, "abcde"); irc_cmd_join(session, "#test", NULL); irc_cmd_msg(session, "#test", "connected"); } -void receiver_main(char *user) +void receiver_main(void *user) { - memset(&callbacks, 0, sizeof(callbacks)); callbacks.event_channel = get_position; callbacks.event_connect = on_connect_receiver; - init_connection_receiver("127.0.0.1", user); + char *username = (char*) user; -} + init_connection_receiver("127.0.0.1", username); -void receiver_run_irc() -{ irc_run(session); } - -void receiver_stop_irc() -{ - irc_cmd_quit(session, "paused"); -} diff --git a/friendfinder/receiver.h b/friendfinder/receiver.h index c222342..2398cbc 100644 --- a/friendfinder/receiver.h +++ b/friendfinder/receiver.h @@ -2,12 +2,7 @@ #define __GUI_H_ /* calls main for receiver */ -void receiver_main(char *user); +void receiver_main(void *user); -/* start irc session */ -void receiver_run_irc(); - -/* stop irc session */ -void receiver_stop_irc(); #endif diff --git a/friendfinder/sender.c b/friendfinder/sender.c index 3472430..ed4f90c 100644 --- a/friendfinder/sender.c +++ b/friendfinder/sender.c @@ -141,23 +141,17 @@ void get_aknowledge(irc_session_t * session, const char * event, const char * or } } -void sender_main(char *nick) +void sender_main(void *user) { memset(&callbacks, 0, sizeof(callbacks)); callbacks.event_connect = send_position; callbacks.event_channel = get_aknowledge; + char *username = (char*)user; - init_connection_sender("127.0.0.1", nick); -} + init_connection_sender("127.0.0.1", username); -void sender_run_irc() -{ irc_run(session); } -void sender_stop_irc() -{ - irc_cmd_quit(session, "paused"); -} diff --git a/friendfinder/sender.h b/friendfinder/sender.h index 78c9f67..254764c 100644 --- a/friendfinder/sender.h +++ b/friendfinder/sender.h @@ -2,12 +2,6 @@ #define __SENDER_H_ /* inits sender */ -void sender_main(char *nick); - -/* starts irc session */ -void sender_run_irc(); - -/* stops irc session */ -void sender_stop_irc(); +void sender_main(void *nick); #endif -- cgit v1.2.3-55-g7522