summaryrefslogtreecommitdiffstats
path: root/friendfinder
diff options
context:
space:
mode:
authorPatrick Hornecker2010-01-04 17:05:27 +0100
committerPatrick Hornecker2010-01-04 17:05:27 +0100
commit0ff5700527431d9372ae56179f541bcea2a72f97 (patch)
treebfa8e354e860327520bc5a25f76104c837734a96 /friendfinder
parentdrawing of user positions (diff)
downloadfriendfinder-0ff5700527431d9372ae56179f541bcea2a72f97.tar.gz
friendfinder-0ff5700527431d9372ae56179f541bcea2a72f97.tar.xz
friendfinder-0ff5700527431d9372ae56179f541bcea2a72f97.zip
more position features
Diffstat (limited to 'friendfinder')
-rw-r--r--friendfinder/bugs11
-rw-r--r--friendfinder/draw_user.c69
-rw-r--r--friendfinder/draw_user.h7
-rw-r--r--friendfinder/e_smart_map.c3
-rw-r--r--friendfinder/gui.c48
-rw-r--r--friendfinder/gui.h3
-rw-r--r--friendfinder/map/object.c5
-rw-r--r--friendfinder/msg_sender.c38
-rw-r--r--friendfinder/receiver.c48
-rw-r--r--friendfinder/sender.c37
-rw-r--r--friendfinder/sender.h3
11 files changed, 192 insertions, 80 deletions
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