comparison 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
comparison
equal deleted inserted replaced
485:ad7ddce47878 486:d48327519b17
824 // Alias /listallusers 824 // Alias /listallusers
825 return nn_conn_send_msg(conn, optUserNameEnc, "%2Flistallusers"); 825 return nn_conn_send_msg(conn, optUserNameEnc, "%2Flistallusers");
826 } 826 }
827 827
828 828
829 int nncmd_names(nn_conn_t *conn, char *buf) 829 #define NAME_NUM_PER_LINE 3
830 { 830 #define NAME_ENTRY_SIZE 64
831 #define NAME_ENTRY_WIDTH 22
832
833 typedef struct
834 {
835 char buf[(NAME_NUM_PER_LINE * NAME_ENTRY_SIZE) + 16];
836 size_t offs;
837 int i, total;
838 } nncmd_namedata_t;
839
840
841 static int nncmd_names_do(const nn_user_t *user, void *data)
842 {
843 nncmd_namedata_t *d = data;
844 char name[NAME_ENTRY_SIZE];
845 size_t len;
846
847 snprintf(name, sizeof(name), "[½3½%-20s½0½] ", user->name);
848
849 d->total++;
850 if (d->i >= NAME_NUM_PER_LINE)
851 {
852 printMsgQ(currWin, "%s\n", d->buf);
853 d->i = 0;
854 d->offs = 0;
855 }
856
857 len = strlen(name);
858 memcpy(d->buf + d->offs, name, len + 1);
859 d->offs += len;
860 d->i++;
861
862 return 0;
863 }
864
865
866 int nncmd_names(nn_conn_t *conn, char *arg)
867 {
868 nncmd_namedata_t data;
831 (void) conn; 869 (void) conn;
832 (void) buf; 870 (void) arg;
833 871
834 printMsgQ(currWin, "Not implemented yet.\n"); 872 printMsgQ(currWin, "Users:\n");
873 data.i = data.total = 0;
874 data.offs = 0;
875
876 nn_userhash_foreach(nnUsers, nncmd_names_do, &data);
877
878 if (data.i > 0)
879 {
880 printMsgQ(currWin, "%s\n", data.buf);
881 }
882
883 printMsgQ(currWin, "%d users total.\n", data.total);
835 return 0; 884 return 0;
836 } 885 }
837 886
838 887
839 int nncmd_save_config(nn_conn_t *conn, char *buf) 888 int nncmd_save_config(nn_conn_t *conn, char *buf)