X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Froomchat.c;fp=webcit%2Froomchat.c;h=0933fa6168e1647a91300e3f57ff813306c73a5b;hb=8ce55d0a3cc3011b8e8bb08106f6a067f68d9df9;hp=0000000000000000000000000000000000000000;hpb=f5eaf23b3ef68375c89ac37d3c3cf060ef8d5238;p=citadel.git diff --git a/webcit/roomchat.c b/webcit/roomchat.c new file mode 100644 index 000000000..0933fa616 --- /dev/null +++ b/webcit/roomchat.c @@ -0,0 +1,179 @@ +/* + * $Id$ + * + * This module handles multiuser chat. + * + * Copyright (c) 1996-2010 by the citadel.org team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "webcit.h" + + +/* + * Display the screen containing multiuser chat for a room. + */ +void do_chat(void) +{ + char buf[256]; + + WC->last_chat_seq = 0; + WC->last_chat_user[0] = 0; + + output_headers(1, 1, 1, 0, 0, 0); + do_template("roomchat", NULL); + + serv_puts("RCHT enter"); + serv_getln(buf, sizeof buf); + + wDumpContent(1); +} + + +/* + * Receiving side of the chat window. + * This does JavaScript writes to + * other divs whenever it refreshes and finds new data. + */ +void chat_recv(void) { + char buf[SIZ]; + char cl_user[SIZ]; + char cl_text[SIZ]; + int cl_text_len = 0; + + begin_ajax_response(); + + serv_printf("RCHT poll|%d", WC->last_chat_seq); + serv_getln(buf, sizeof buf); + if (buf[0] == '1') { + WC->last_chat_seq = extract_int(&buf[4], 0); + extract_token(cl_user, &buf[4], 2, '|', sizeof cl_user); + cl_text[0] = 0; + cl_text_len = 0; + while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) { + safestrncpy(&cl_text[cl_text_len], buf, (sizeof(cl_text) - cl_text_len)); + cl_text_len += strlen(buf); + } + + wc_printf("
"); + + if (!strcasecmp(cl_user, ":")) { + wc_printf(""); + } + + if (strcasecmp(cl_user, WC->last_chat_user)) { + wc_printf(""); + + if (!strcasecmp(cl_user, ChrPtr(WC->wc_fullname))) { + wc_printf(""); + } + else { + wc_printf(""); + } + jsescputs(cl_user); + + wc_printf(": "); + } + else { + wc_printf(" "); + } + jsescputs(cl_text); + if (!strcasecmp(cl_user, ":")) { + wc_printf(""); + } + + wc_printf(" |