From 9d21406d68ebdce18110431fb24c9963dcc44373 Mon Sep 17 00:00:00 2001 From: tomsmeding Date: Thu, 16 Mar 2017 21:42:24 +0100 Subject: Send new messages to every fd of user --- command.c | 11 +++++++---- user_data.c | 10 +++++++--- user_data.h | 4 +++- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/command.c b/command.c index 0f2cd06..bf6c29d 100644 --- a/command.c +++ b/command.c @@ -212,10 +212,13 @@ static bool cmd_send(struct conn_data *data,const char *tag,const char **args){ struct db_user_list members=db_get_members(roomid); for(i64 i=0;ifd){ - send_push(fd,"message",args[1]); - // TODO: unregister and close users that aren't reachable anymore; maybe ping instead? + i64 nfds; + const int *fds=userdata_online(members.list[i].id,&nfds); + if(nfds<=0)continue; + for(i64 j=0;jfd){ + send_push(fds[j],"message",args[1]); + } } } diff --git a/user_data.c b/user_data.c index 77e09cc..65587ad 100644 --- a/user_data.c +++ b/user_data.c @@ -64,9 +64,13 @@ void userdata_unregister(i64 userid,int fd){ item->data.fds_len--; } -int userdata_online(i64 userid){ +const int* userdata_online(i64 userid,i64 *nfds){ struct hash_item *item=find_userdata(userid); - if(!item)return false; + if(!item){ + *nfds=0; + return NULL; + } assert(item->data.fds_len!=0); - return item->data.fds[0]; // TODO: return all fds in some way? + *nfds=item->data.fds_len; + return item->data.fds; } diff --git a/user_data.h b/user_data.h index 4b4fc10..094ad75 100644 --- a/user_data.h +++ b/user_data.h @@ -5,4 +5,6 @@ void userdata_register(i64 userid,int fd); void userdata_unregister(i64 userid,int fd); -int userdata_online(i64 userid); // Returns fd + +// Returns array of nfds fd's; valid until next call to (un)register +const int* userdata_online(i64 userid,i64 *nfds); -- cgit v1.2.3-70-g09d2