diff options
author | tomsmeding <tom.smeding@gmail.com> | 2017-03-16 21:06:11 +0100 |
---|---|---|
committer | tomsmeding <tom.smeding@gmail.com> | 2017-03-16 21:06:57 +0100 |
commit | 047e1828901b5b08cd538a7b11c0de2149606797 (patch) | |
tree | 9249612fe9bb88bf3063733744a6c02c391e5739 /db.c | |
parent | a441b302c2c11c291df60fe642ec0d51646218dd (diff) |
Basic message sending
TODO: broadcast to all online fd's of a user?
TODO: close users that aren't reachable in a broadcast?
Diffstat (limited to 'db.c')
-rw-r--r-- | db.c | 31 |
1 files changed, 31 insertions, 0 deletions
@@ -85,6 +85,37 @@ bool db_is_member(i64 roomid,i64 userid){ return success; } +struct db_user_list db_get_members(i64 roomid){ + sqlite3_stmt *stmt; + SQLITE(prepare_v2,database, + "select U.id, U.name " + "from Users as U, Members as M " + "where M.room = ? and M.user = U.id" + ,-1,&stmt,NULL); + SQLITE(bind_int64,stmt,1,roomid); + + struct db_user_list ul; + i64 cap=4; + ul.count=0; + ul.list=malloc(cap,struct db_name_id); + + int ret; + while((ret=sqlite3_step(stmt))==SQLITE_ROW){ + if(ul.count==cap){ + cap*=2; + ul.list=realloc(ul.list,cap,struct db_name_id); + } + ul.list[ul.count].id=sqlite3_column_int64(stmt,0); + ul.list[ul.count].name=strdup((const char*)sqlite3_column_text(stmt,1)); + ul.count++; + } + + if(ret!=SQLITE_DONE)die_sqlite("sqlite3_step"); + SQLITE(finalize,stmt); + + return ul; +} + i64 db_find_room(const char *name){ sqlite3_stmt *stmt; SQLITE(prepare_v2,database,"select id from Rooms where name = ?",-1,&stmt,NULL); |