Commit 3222e3af authored by Andrew Price's avatar Andrew Price

Logon/join/leave/logoff improvements

Don't send separate messages to announce these events, have mw display
them on receipt of onoff events, if scripted handlers allow it to.
parent b58c7806
Pipeline #557 passed with stage
in 8 minutes and 13 seconds
......@@ -114,6 +114,24 @@ void ClearStack(void) {
MesgStacked=0;
}
static void display_onoff(int action, const char *name, int room)
{
switch (action) {
case ONOFF_LEAVE:
format_message("\03311* %s has just left the talker.", name);
break;
case ONOFF_JOIN:
format_message("\03310* %s has just joined talker room %d.", name, room);
break;
case ONOFF_LOGOFF:
format_message("\03302* %s has just left the board.", name);
break;
case ONOFF_LOGON:
format_message("\03301* %s has just entered the board.", name);
break;
}
}
void DisplayStack(void)
{
struct mstack *new;
......@@ -203,13 +221,14 @@ void DisplayStack(void)
};
char *onoff_name;
const char *uname, *reason;
int ccode, isquiet, action, type;
int ccode, isquiet, action, type, room = 0;
struct mwevent ev = {
.ev_type = MWEV_TYPE_ONOFF,
.ev_data.onoff = new->msg,
};
script_output = 1;
js_handle_event(&ev);
if (cp_test(user, CP_SCRIPT))
js_handle_event(&ev);
/* go through list and find checkonoff function */
onoff_name = NULL;
......@@ -227,6 +246,8 @@ void DisplayStack(void)
reason = json_getstring(j, "reason");
else
reason = json_getstring(j, "message");
if (action == ONOFF_JOIN)
room = json_getint(j, "channel");
if (action >= ONOFF_SIZE)
break;
......@@ -286,7 +307,10 @@ void DisplayStack(void)
a.version[0] = '3';
if (reason != NULL)
snprintf(a.reason, MAXTEXTLENGTH - 1, "%s", reason);
ExecEvent2(onoff_name, "CheckOnOff", new->from, 0, 6, aargs);
if (cp_test(user, CP_SCRIPT))
ExecEvent2(onoff_name, "CheckOnOff", new->from, 0, 6, aargs);
if (script_output && !isquiet)
display_onoff(action, uname, room);
break;
}
default:
......@@ -554,15 +578,13 @@ static void display_content(ipc_message_t *msg)
}
} else
if (msg->head.type == IPC_CHECKONOFF) {
if (cp_test(user, CP_SCRIPT)) {
struct mstack *ms;
ms = calloc(1, sizeof(*ms));
ms->flags = MST_SCREV;
ms->preamble = EST_CHECKONOFF;
ms->from = strdup(whom);
InsertMesg(ms, msg);
}
struct mstack *ms;
ms = calloc(1, sizeof(*ms));
ms->flags = MST_SCREV;
ms->preamble = EST_CHECKONOFF;
ms->from = strdup(whom);
InsertMesg(ms, msg);
} else {
printf("Unknown message type %4.4s", (char *)&msg->head.type);
}
......@@ -980,9 +1002,6 @@ static void zod(const char *from, const char *msg)
printf(_("%s just sent the Zebedee of Death to you.\n"),from);
fflush(stdout);
/* broadcast leaving message if not quiet */
if (!quietmode) broadcast(4|0x100, "\03311%s has just left the talker", user->record.name);
/* set 'off talker' permissions for commands */
set_rights();
disable_rl(1);
......
......@@ -633,17 +633,13 @@ int main(int argc, char **argv)
if (login_status == 3) /* Autoregistered */
broadcast(3, "Auto-registered %s", user->record.name);
quietmode = 0;
if ((s_quiet(user) || u_god(user)) && qflag)
{
extern int talker_logontype;
quietmode=1;
talker_logontype |= LOGONMASK_QUIET;
}else
{
broadcast(1, _("\03301%s has just entered the board."),user->record.name);
quietmode=0;
}
{
struct sockaddr_in sa;
socklen_t ss;
......@@ -907,9 +903,6 @@ void close_down(int logofftype, char *sourceuser, char *reason)
stop_js();
alarm_cleanup();
if (!quietmode && logofftype != LOGOFF_TIMEOUT && logofftype != LOGOFF_EOFS)
broadcast(1, "\03302%s has just left the board.", user->record.name);
mwlog(user, "LOGOUT");
sleep(1); //dodgy hack for race condition in checkonoff, cunningly we currently get woken by the very message we're waiting for.
......
......@@ -183,12 +183,8 @@ void t_uptime(CommandList *cm, int argc, const char **argv, char *args)
void t_quit(CommandList *cm, int argc, const char **argv, char *args)
{
char text[MAXTEXTLENGTH];
user->record.chatmode = cm_clear(user, CM_ONCHAT);
update_user(user);
snprintf(text, MAXTEXTLENGTH-1, "\03311%s has just left the talker", user->record.name);
if (!quietmode) talk_send_rawbcast(text);
announce_leave(user->record.name, user->record.room, LEAVE_NORMAL, NULL, NULL, quietmode);
set_rights();
}
......@@ -1106,25 +1102,15 @@ void t_uri(CommandList *cm, int argc, const char **argv, char *args)
void t_chaton(void)
{
struct person *urec = &user->record;
char text[MAXTEXTLENGTH];
char mtext[MAXTEXTLENGTH];
set_talk_rights();
/* set mode to 'on talker', and update whofile for autoexec function */
urec->chatmode = cm_set(user, CM_ONCHAT);
update_user(user);
if (user->room.name!=NULL)
snprintf(mtext, MAXTEXTLENGTH-1, "\03310%s has just joined talker in %s",
urec->name, user->room.name);
else
snprintf(mtext, MAXTEXTLENGTH-1, "\03310%s has just joined talker room %d",
urec->name, urec->room);
snprintf(text, MAXTEXTLENGTH-1, "\03310%s has just joined talker room %d",
urec->name, urec->room);
if (!quietmode) talk_send_rawbcast(text);
printf("Now entering the talker. Use \".quit\" to leave and \".help\" for help.\n");
format_message("\03310* Joining talker room %d. "
"Use \".quit\" to leave and \".help\" for help.\n",
urec->room);
/* run the common stuff for entering the talker */
enter_talker(1);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment