changeset 486:d48327519b17

Implement /who / /names functionality.
author Matti Hamalainen <ccr@tnsp.org>
date Sat, 26 May 2012 15:33:14 +0300
parents ad7ddce47878
children fed7bb8b7ccc
files main.c
diffstat 1 files changed, 53 insertions(+), 4 deletions(-) [+]
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;
 }