Mercurial > hg > nnchat
diff main.c @ 486:d48327519b17
Implement /who / /names functionality.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sat, 26 May 2012 15:33:14 +0300 |
parents | 73a648387d10 |
children | ba48840b8525 |
line wrap: on
line diff
--- a/main.c Sat May 26 15:30:46 2012 +0300 +++ b/main.c Sat May 26 15:33:14 2012 +0300 @@ -826,12 +826,61 @@ } -int nncmd_names(nn_conn_t *conn, char *buf) +#define NAME_NUM_PER_LINE 3 +#define NAME_ENTRY_SIZE 64 +#define NAME_ENTRY_WIDTH 22 + +typedef struct +{ + char buf[(NAME_NUM_PER_LINE * NAME_ENTRY_SIZE) + 16]; + size_t offs; + int i, total; +} nncmd_namedata_t; + + +static int nncmd_names_do(const nn_user_t *user, void *data) { + nncmd_namedata_t *d = data; + char name[NAME_ENTRY_SIZE]; + size_t len; + + snprintf(name, sizeof(name), "[½3½%-20s½0½] ", user->name); + + d->total++; + if (d->i >= NAME_NUM_PER_LINE) + { + printMsgQ(currWin, "%s\n", d->buf); + d->i = 0; + d->offs = 0; + } + + len = strlen(name); + memcpy(d->buf + d->offs, name, len + 1); + d->offs += len; + d->i++; + + return 0; +} + + +int nncmd_names(nn_conn_t *conn, char *arg) +{ + nncmd_namedata_t data; (void) conn; - (void) buf; - - printMsgQ(currWin, "Not implemented yet.\n"); + (void) arg; + + printMsgQ(currWin, "Users:\n"); + data.i = data.total = 0; + data.offs = 0; + + nn_userhash_foreach(nnUsers, nncmd_names_do, &data); + + if (data.i > 0) + { + printMsgQ(currWin, "%s\n", data.buf); + } + + printMsgQ(currWin, "%d users total.\n", data.total); return 0; }