summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/main.c b/main.c
index dcd886a..8806683 100644
--- a/main.c
+++ b/main.c
@@ -134,10 +134,26 @@ i64 list_find_d(void **d,i64 len,void *value){
#define LIST_FIND(_list,_value) list_find_d((void**)(_list)->d,(_list)->len,(void*)(_value))
+void room_broadcast_line(Room *room,const char *line){
+ for(i64 i=0;i<room->members.len;i++){
+ tcp_send_line(room->members.d[i]->sock,line);
+ }
+}
+
+__attribute__((format (printf,2,3)))
+void room_broadcast_line_f(Room *room,const char *format,...){
+ va_list ap;
+ va_start(ap,format);
+ char *buf;
+ if(vasprintf(&buf,format,ap)<0)throw("vasprintf: allocation error");
+ room_broadcast_line(room,buf);
+ free(buf);
+}
+
//Returns false iff conn was already in specified room.
bool room_join(Room *room,Connection *conn){
if(LIST_FIND(&room->members,conn)!=-1)return false;
- //TODO: notify other members
+ room_broadcast_line_f(room,"room_join %s %s %" PRIi64,room->gameid,room->roomid,conn->id);
clist_add(&room->members,conn);
rlist_add(&conn->rooms,room);
return true;
@@ -151,7 +167,7 @@ bool room_leave(Room *room,Connection *conn){
if(idx==-1)return false;
clist_remove(&room->members,conn);
rlist_remove(&conn->rooms,room);
- //TODO: notify other members
+ room_broadcast_line_f(room,"room_leave %s %s %" PRIi64,room->gameid,room->roomid,conn->id);
if(room->members.len==0){
room_destroy(room);
}