From 047e1828901b5b08cd538a7b11c0de2149606797 Mon Sep 17 00:00:00 2001 From: tomsmeding Date: Thu, 16 Mar 2017 21:06:11 +0100 Subject: Basic message sending TODO: broadcast to all online fd's of a user? TODO: close users that aren't reachable in a broadcast? --- user_data.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'user_data.c') diff --git a/user_data.c b/user_data.c index 5bd4a6d..77e09cc 100644 --- a/user_data.c +++ b/user_data.c @@ -1,3 +1,5 @@ +#include +#include #include "user_data.h" @@ -28,8 +30,7 @@ void userdata_register(i64 userid,int fd){ if(item){ for(i64 i=0;idata.fds_len;i++){ if(item->data.fds[i]==fd){ - debug("userdata_register(%lld, %d) while pair already existed",userid,fd); - return; + die("userdata_register(%lld, %d) while pair already existed",userid,fd); } } if(item->data.fds_len==item->data.fds_cap){ @@ -49,6 +50,23 @@ void userdata_register(i64 userid,int fd){ } } -void userdata_unregister(i64 userid,int fd); +void userdata_unregister(i64 userid,int fd){ + struct hash_item *item=find_userdata(userid); + assert(item); + i64 i; + for(i=0;idata.fds_len;i++){ + if(item->data.fds[i]==fd)break; + } + if(i==item->data.fds_len){ + die("userdata_unregister(%lld, %d) while nonexistent",userid,fd); + } + memmove(item->data.fds+i,item->data.fds+i+1,item->data.fds_len-i-1); + item->data.fds_len--; +} -bool userdata_online(i64 userid); +int userdata_online(i64 userid){ + struct hash_item *item=find_userdata(userid); + if(!item)return false; + assert(item->data.fds_len!=0); + return item->data.fds[0]; // TODO: return all fds in some way? +} -- cgit v1.2.3-70-g09d2