From 0ff5700527431d9372ae56179f541bcea2a72f97 Mon Sep 17 00:00:00 2001 From: Patrick Hornecker Date: Mon, 4 Jan 2010 17:05:27 +0100 Subject: more position features --- friendfinder/bugs | 11 ++++++++ friendfinder/draw_user.c | 69 +++++++++++++++++++++++++++++++++++++++++++--- friendfinder/draw_user.h | 7 +++++ friendfinder/e_smart_map.c | 3 +- friendfinder/gui.c | 48 ++++++++++++++++++++++++-------- friendfinder/gui.h | 3 -- friendfinder/map/object.c | 5 ++++ friendfinder/msg_sender.c | 38 +++++++++++-------------- friendfinder/receiver.c | 48 ++++++++++++-------------------- friendfinder/sender.c | 37 +++++++++++++++++++------ friendfinder/sender.h | 3 ++ 11 files changed, 192 insertions(+), 80 deletions(-) create mode 100644 friendfinder/bugs (limited to 'friendfinder') diff --git a/friendfinder/bugs b/friendfinder/bugs new file mode 100644 index 0000000..56be5ba --- /dev/null +++ b/friendfinder/bugs @@ -0,0 +1,11 @@ +receiver.c: + -> wenn zwei receiver und kein sender laufen, senden sich receiver acks + -> pointer zeigt immer auf gleiche variable....damit wird immer gleicher from wert genutzt und _r _s angehängt....fixen + +gui.c: + -> absturz wenn man über oberes panel zu chat wechseln will + +msg_sender.c: + -> dcc_chat wird nich akzeptiert und somit nich initziiert + + diff --git a/friendfinder/draw_user.c b/friendfinder/draw_user.c index d9c493a..1594ecf 100644 --- a/friendfinder/draw_user.c +++ b/friendfinder/draw_user.c @@ -1,11 +1,18 @@ +#include "math.h" + #include "Evas.h" #include "Elementary.h" #include "receiver.h" #include "gui.h" +#include "util/projection.h" +#include "map/smart_map_priv.h" int _h= 600; int _w = 450; +int _distance = 250; +int active_map = 0; +double own_lat, own_lon; Evas_Object *win, *map; @@ -15,12 +22,66 @@ void init_draw_user(Evas_Object *_win, Evas_Object *_map) map = _map; } +void enable_map_bubbles() +{ + active_map = 1; +} + +void disable_map_bubbles() +{ + active_map = 0; +} + +void set_dist(int distance) +{ + _distance = distance; +} + void draw_user(struct position *pos) { - double lat, lon; - lat = atof(pos->lat); - lon = atof(pos->lon); + int *e = NULL, *n = NULL, *own_e = NULL, *own_n = NULL; + + double old_lat, old_lon, sender_lat, sender_lon; + sender_lat = atof(pos->lat); + sender_lon = atof(pos->lon); - e_smart_map_overlay_set_bubble(map, "routing", pos->nick, pos->nick, lat, lon, 0xffffffff); + if (active_map == 1 && test_distance(sender_lat, sender_lon, e, n, own_lat, own_lon, own_e, own_n) == 1) + { + old_lat = sender_lat; + old_lon = sender_lon; + + if (old_lat != sender_lat || old_lon != sender_lon) + { + e_smart_map_overlay_set_bubble(map, "routing", pos->nick, pos->nick, sender_lon, sender_lat, 0xffffffff); + } + } + } +int test_distance(double lat, double lon, int e, int n, double own_lat, double own_lon, int own_e, int own_n) +{ + project_latlon(lat, lon, &e, &n, PROJECTION_UTM); + project_latlon(own_lat, own_lon, &own_e, &own_n, PROJECTION_UTM); + +// printf("sender lat: %f || sender lon: %f || sender easting: %i || sender northing: %i \n", lat, lon, e, n); +// printf("own lat: %f || own lon: %f || own easting: %i || own northing: %i \n", own_lat, own_lon, own_e, own_n); + + if (e != NULL && n !=NULL && own_n != NULL && own_e != NULL) + { + double x = sqrt(((e - own_e)*(e - own_e) + (n - own_n)*(n - own_n))); + + printf("x: %f distance: %i \n", x, _distance); + + if (x <= _distance) + { + return 1; + } + else return 0; + } +} + +void get_own_position(double lat, double lon) +{ + own_lat = lat; + own_lon = lon; +} diff --git a/friendfinder/draw_user.h b/friendfinder/draw_user.h index d59d05e..4d3396a 100644 --- a/friendfinder/draw_user.h +++ b/friendfinder/draw_user.h @@ -8,4 +8,11 @@ void init_draw_user(Evas_Object *_win, Evas_Object *_map); void draw_user(struct position *pos); +void set_dist(int distance); + +void get_own_position(double lat, double lon); + +void enable_map_bubbles(); + +void disable_map_bubbles(); #endif diff --git a/friendfinder/e_smart_map.c b/friendfinder/e_smart_map.c index dc32412..a35abf3 100644 --- a/friendfinder/e_smart_map.c +++ b/friendfinder/e_smart_map.c @@ -80,7 +80,7 @@ static struct bubble *create_text_bubble(struct smart_map *smart, char *info, ch bubble->object.oy = -14; bubble->object.sw = 480; bubble->object.sh = 640; - fprintf(stderr, "FIXME: %s:%i\n", __FILE__, __LINE__); + //fprintf(stderr, "FIXME: %s:%i\n", __FILE__, __LINE__); return bubble; } @@ -150,6 +150,7 @@ void e_smart_map_get_pos(Evas_Object *o, double *lat, double *lon) smart = evas_object_smart_data_get(o); *lat = smart->lat; *lon = smart->lon; + printf("%f \n", smart->lat); } diff --git a/friendfinder/gui.c b/friendfinder/gui.c index 6680937..8a5629c 100644 --- a/friendfinder/gui.c +++ b/friendfinder/gui.c @@ -12,6 +12,7 @@ #include "gui.h" #include "handler.h" #include "sender.h" +#include "draw_user.h" int h= 600; int w = 450; @@ -37,6 +38,13 @@ static void on_own_position(void *data, Evas_Object *obj, void *event_info) init_sender_thread(from); } +static void set_distance(void *data, Evas_Object *obj, void *event_info) +{ + set_dist((int) data); + get_own_position(map); + +} + static void on_show_users(void *data, Evas_Object *obj, void *event_info) { init_receiver_thread(from); @@ -44,6 +52,7 @@ static void on_show_users(void *data, Evas_Object *obj, void *event_info) static void on_chat(void *data, Evas_Object *obj, void *event_info) { + disable_map_bubbles(); init_window_parts(); init_buttons(obj); init_toolbar(obj); @@ -52,12 +61,13 @@ static void on_chat(void *data, Evas_Object *obj, void *event_info) static void on_map(void *data, Evas_Object *obj, void *event_info) { init_map(); - /* init user drawing on map */ + enable_map_bubbles(); init_draw_user(win, map); } static void on_options(void *data, Evas_Object *obj, void *event_info) { + disable_map_bubbles(); init_options(); } @@ -317,15 +327,31 @@ void init_options() evas_object_size_hint_align_set(bx2, -1.0, -1.0); elm_box_pack_end(bx, bx2); evas_object_show(bx2); -/* + bt = elm_button_add(win); - elm_button_label_set(bt, "Find friends"); - evas_object_size_hint_weight_set(bt, 1.0, 0.2); + elm_button_label_set(bt, "Distance = 100 m"); + evas_object_size_hint_weight_set(bt, 1.0, 1.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_smart_callback_add(bt, "clicked", set_distance, 100); evas_object_show(bt); -*/ + + bt2 = elm_button_add(win); + elm_button_label_set(bt2, "Distance = 250 m"); + evas_object_size_hint_weight_set(bt2, 1.0, 1.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", set_distance, 250); + evas_object_show(bt2); + + bt3 = elm_button_add(win); + elm_button_label_set(bt3, "Distance = 1000 m"); + evas_object_size_hint_weight_set(bt3, 1.0, 1.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", set_distance, 1000); + evas_object_show(bt3); + } void init_map() @@ -360,16 +386,16 @@ void init_map() map = e_smart_map_add(win, "data/maps/fr_map.eet"); e_smart_map_set_theme(map, "themes/map.edj", "main"); e_smart_map_set_pos(map, 47.996578, 7.840171); - evas_object_size_hint_min_set(map, w-2*8, h-10*8-60); - evas_object_size_hint_max_set(map, w-2*8, h-10*8-120); -// evas_object_resize(map, w, h*0.7); + evas_object_size_hint_min_set(map, w-2, h-115);//h-10*8-60); +// evas_object_size_hint_max_set(map, w-2, h-100);//-10*8-120); + evas_object_resize(map, w, h*0.65); elm_box_pack_end(bx2, map); evas_object_show(map); bt = elm_button_add(win); elm_button_label_set(bt, "Send own position"); - evas_object_size_hint_weight_set(bt2, 1.0, 1.0); - evas_object_size_hint_align_set(bt2, -1.0, -1.0); + evas_object_size_hint_weight_set(bt, 1.0, 1.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", on_own_position, NULL); evas_object_show(bt); diff --git a/friendfinder/gui.h b/friendfinder/gui.h index 66385d6..47756f3 100644 --- a/friendfinder/gui.h +++ b/friendfinder/gui.h @@ -19,9 +19,6 @@ static void on_chat(void *data, Evas_Object *obj, void *event_info); static void on_map(void *data, Evas_Object *obj, void *event_info); */ -int h= 600; -int w = 450; - //other functions void set_bubble_text(Evas_Object *bb, char *username, char *text); void show_message(char *current_msg); diff --git a/friendfinder/map/object.c b/friendfinder/map/object.c index f4f4c0b..c337cc4 100644 --- a/friendfinder/map/object.c +++ b/friendfinder/map/object.c @@ -11,6 +11,8 @@ #include "smart_map_priv.h" +#include "../draw_user.h" + static void tile_array_add(struct smart_map *smart, int index) { smart->ta.tiles[index] = e_smart_tile_add(smart->evas); @@ -167,6 +169,9 @@ int map_object_update(struct smart_map *smart) if(smart->theme == NULL) return 0; + + get_own_position(smart->ta.lat, smart->ta.lon); + get_sender_position(smart->ta.lat, smart->ta.lon); snprintf(buffer, 512, "%lf * %lf", smart->ta.lat, smart->ta.lon); smart->lat = smart->ta.lat; diff --git a/friendfinder/msg_sender.c b/friendfinder/msg_sender.c index e9b4d7a..8c41619 100644 --- a/friendfinder/msg_sender.c +++ b/friendfinder/msg_sender.c @@ -53,10 +53,12 @@ void disconnect_msg_sender() void set_txt_msg(char *msg) { - if (msg != NULL) + if (msg != NULL && session != NULL) { send_message(session, msg); } + else printf("MSG_SENDER: NULL value \n"); + } void dump_message(char *msg) @@ -74,7 +76,7 @@ void dcc_recv_callback (irc_session_t * session, irc_dcc_t id, int status, void break; case 0: - if ( data == NULL ) + if ( !data ) { printf ("MSG_SENDER: DCC %d: chat connected\n", id); send_message(session, "im here"); @@ -96,13 +98,8 @@ void dcc_recv_callback (irc_session_t * session, irc_dcc_t id, int status, void } } -int i = 0; - void send_message(irc_session_t *session, char *msg) { -// printf("your message %i = test \n", i); - - //char msg[64]; if (msg != NULL) { char crypted_msg[64]; @@ -128,12 +125,12 @@ void on_join(irc_session_t * session, const char * event, const char * origin, c char sender_name[90]; irc_target_get_nick(origin, sender_name, sizeof(sender_name)); - - if (strcmp(sender_name, send_to) == 0) + + if (strcmp(sender_name, send_to) == 0) { printf("MSG_SENDER: Buddy %s joined the channel \n", send_to); - if (irc_dcc_chat(session, NULL, send_to, dcc_recv_callback, &dccid) != 0) + if (irc_dcc_chat(session, 0, send_to, dcc_recv_callback, &dccid) != 0) { printf("MSG_SENDER: ddc_chat_init_error \n"); } @@ -142,13 +139,8 @@ void on_join(irc_session_t * session, const char * event, const char * origin, c { printf("MSG_SENDER: dcc_chat_init_success \n"); printf("MSG_SENDER: dccid %d \n", dccid); - - char _dccid[2]; - sprintf(_dccid, "%d", dccid); - irc_cmd_msg(session, "#msg", _dccid); } } - //irc_cmd_quit(session, "on_join"); } void on_connect(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count) @@ -162,23 +154,24 @@ void on_connect(irc_session_t * session, const char * event, const char * origin void on_channel(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count) { // printf("on_channel()\n"); - if (strcmp(params[1], "connected") != 0) - { + // if (strcmp(params[1], "connected") != 0) +/* { buddy_dccid = atoi(params[1]); printf("MSG_SENDER: buddy_dccid: %d \n", buddy_dccid); - } + }*/ } -void on_dcc_req(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count) +void on_dcc_req(irc_session_t * session, const char * nick, const char * addr, irc_dcc_t id) { printf("on_dcc_req()\n"); - if(irc_dcc_accept (session, 1, 0, dcc_recv_callback) != 0) + int err = irc_dcc_accept(session, id, 0, dcc_recv_callback); + if(err != 0) { - printf("MSG_SENDER: ddc_chat_decline \n"); + printf("MSG_SENDER: ddc_chat_decline by error code %i \n", err); } else { - printf("MSG_SENDER: dcc_chat_accepted \n"); + printf("MSG_SENDER: %s dcc_chat_accepted \n", nick); } } @@ -200,6 +193,7 @@ void msg_main_loop(void *nicknames) if (init_connection("127.0.0.1", nick_from) == 0) { printf("MSG_SENDER: connection succesfull\n"); + irc_run(session); } } diff --git a/friendfinder/receiver.c b/friendfinder/receiver.c index c9a030f..63552ce 100644 --- a/friendfinder/receiver.c +++ b/friendfinder/receiver.c @@ -11,9 +11,11 @@ static irc_session_t *session; irc_callbacks_t callbacks; int counter = 0; char sender_name[100]; +char *lat, *lon; int ret; - +int got_lat = 0; +int got_lon = 0; BF_KEY key; int init_connection_receiver(char* server_ip, char* user) @@ -60,49 +62,33 @@ void get_position(irc_session_t * session, const char * event, const char * orig char *decrypted_lat = (char*) malloc(sizeof(params[1])); char *decrypted_lon = (char*) malloc(sizeof(params[1])); - decrypted_lat = NULL; - decrypted_lon = NULL; - irc_target_get_nick(origin, sender_name, sizeof(sender_name)); - if (sender_name != NULL && strcmp(sender_name, "_s") == 1) + if (sender_name != NULL && strcmp(sender_name, "_s") > 0) { - - //first message is the ret param, which is needed for message decryption - if (counter == 0) - { - //BF_set_key(&key, 5, "abcde"); - } - - //dump_event(session, event, origin, params, count); - if (counter % 2 == 0) + if (counter % 2 != 0) { BF_ecb_encrypt(params[1], decrypted_lat, &key, BF_DECRYPT); - printf("RECEIVER: lat %s, origin: %s \n", decrypted_lat, sender_name); + lat = decrypted_lat; + got_lat = 1; } - if (counter % 2 != 0) + if (counter % 2 == 0) { BF_ecb_encrypt(params[1], decrypted_lon, &key, BF_DECRYPT); - printf("RECEIVER: lon %s , origin: %s \n", decrypted_lon, sender_name); - printf("====\n"); + lon = decrypted_lon; + got_lon = 1; } - if(decrypted_lon != NULL && decrypted_lat != NULL) + if(got_lon == 1 && got_lat == 1) { - dump_data(decrypted_lat, decrypted_lon, sender_name); - decrypted_lon = NULL; - decrypted_lat = NULL; + dump_data(lat, lon, sender_name); + got_lon = 0; + got_lat = 0; } - // if (strcmp(params[1], "128") != 0) - { - irc_cmd_msg(session, "#test", sender_name); - counter++; - } - // else - { - // counter++; - } + + irc_cmd_msg(session, "#test", sender_name); + counter++; } } diff --git a/friendfinder/sender.c b/friendfinder/sender.c index f8abd31..9d37a29 100644 --- a/friendfinder/sender.c +++ b/friendfinder/sender.c @@ -13,6 +13,7 @@ int msg_count = 0; int ack_count = 0; int resend = 0; char* nick; +double own_lat, own_lon; int first_send = 0; @@ -58,6 +59,12 @@ int random_position_x(int bb_x_upper) return rand() % bb_x_upper; } +void get_sender_position(double lat, double lon) +{ + own_lat = lat; + own_lon = lon; +} + void send_position(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count) { @@ -72,18 +79,32 @@ void send_position(irc_session_t * session, const char * event, const char * ori irc_cmd_msg(session, "#test", "connected"); } +/* + char lat_pos[3]; + lat_pos[0] = "47.992119"; + lat_pos[1] = "47.984882"; + lat_pos[2] = "47.984708"; + char lon_pos[3]; + lon_pos[0] = "7.850584"; + lon_pos[1] = "7.857411"; + lon_pos[2] = "7.843972"; +*/ for(int i = 0; i < 2; i++) { - int lat = random_position_x(1000); - printf("lat position %i \n", lat); - int lon = random_position_y(1000); - printf("lon position %i \n", lon); + // int lat = random_position_x(1000); + // printf("lat position %i \n", lat); + // int lon = random_position_y(1000); + // printf("lon position %i \n", lon); + + unsigned char lat_char[8]; + sprintf(lat_char, "%f", own_lat); + // itoa(own_lat, lat_char, 10); - unsigned char lat_char[8]; - sprintf(lat_char, "%i", lat); + unsigned char lon_char[8]; + sprintf(lon_char, "%f", own_lon); + // itoa(own_lat, lat_char, 10); - unsigned char *lon_char[8]; - sprintf(lon_char, "%i", lon); + printf("lat %s, lon %s \n", lat_char, lon_char); BF_ecb_encrypt(lat_char, crypted_lat, &key, BF_ENCRYPT); BF_ecb_encrypt(lon_char, crypted_lon, &key, BF_ENCRYPT); diff --git a/friendfinder/sender.h b/friendfinder/sender.h index 0e9299a..8f6a723 100644 --- a/friendfinder/sender.h +++ b/friendfinder/sender.h @@ -4,4 +4,7 @@ /* inits sender */ void sender_main(void *user); +/* set the position which will the sender send */ +void get_sender_position(double lat, double lon); + #endif -- cgit v1.2.3-55-g7522