/* called when a keepalive has been received */ void imc_recv_keepalive(const char *from, const char *version, const char *flags) { imc_reminfo *p; if (!strcasecmp(from, imc_name)) return; /* this should never fail, imc.c should create an * entry if one doesn't exist (in the path update * code) */ p=imc_find_reminfo(from, 0); if (!p) /* boggle */ return; if(!time_of_last_ralive) { time_of_last_ralive=time(NULL); } else { time_since_last_ralive = time(NULL) - time_of_last_ralive; time_of_last_ralive =time(NULL); } if (imc_hasname(flags, "hide")) p->hide=1; else p->hide=0; /* lower-level code has already updated p->alive */ if (strcasecmp(version, p->version)) /* remote version has changed? */ { imc_strfree(p->version); /* if so, update it */ p->version=imc_strdup(version); } /* Only routers should ping - and even then, only directly connected muds */ /* and only if there is an open connection - shogar */ if (imc_is_router && imc_getinfo(from) && imc_getinfo(from)->connection && imc_getinfo(from)->connection->state==IMC_CONNECTED) { struct timeval tv; gettimeofday(&tv, NULL); imc_send_ping(from, tv.tv_sec, tv.tv_usec); } /* or muds acting as a hub to another mud - shogar */ if (!imc_is_router && imc_getinfo(from) && imc_getinfo(from)->connection && !(imc_getinfo(from)->flags & IMC_HUB) && mud_has_hub) { struct timeval tv; gettimeofday(&tv, NULL); imc_send_ping(from, tv.tv_sec, tv.tv_usec); } }
void icec_showchannel(ice_channel *c, const char *from, const char *txt, int emote) { DESCRIPTOR_DATA *d, *dnext; CHAR_DATA *ch; char buf[MAX_STRING_LENGTH]; if (!c->local) return; sprintf(buf, emote ? c->local->format2 : c->local->format1, from, color_itom(txt)); strcat(buf, "\n\r"); for (d=descriptor_list; d; d=dnext) { dnext=d->next; ch=d->original ? d->original : d->character; if (!ch || IS_NPC(ch) || get_trust(ch) < c->local->level || !ice_audible(c, imc_makename(ch->name, imc_name)) || !imc_hasname(ch->pcdata->ice_listen, c->local->name)) continue; send_to_char(buf, ch); } }
/* check for icec channels, return TRUE to stop command processing, FALSE otherwise */ bool icec_command_hook(CHAR_DATA *ch, const char *command, const char *argument) { ice_channel *c; char arg[MAX_STRING_LENGTH]; const char *word2; int emote=0; if (IS_NPC(ch)) return FALSE; #ifdef CIRCLE skip_spaces(&argument); #endif c=icec_findlchannel(command); if (!c || !c->local) return FALSE; if (c->local->level > get_trust(ch)) return FALSE; if (!imc_hasname(ch->pcdata->ice_listen, c->local->name)) return FALSE; if (!ice_audible(c, imc_makename(ch->name, imc_name))) { send_to_char("You cannot use that channel.\n\r", ch); return TRUE; } word2=imc_getarg(argument, arg, MAX_STRING_LENGTH); if (!arg[0]) { send_to_char("Use ichan to toggle the channel - or provide some text.\n\r", ch); return TRUE; } if (!str_cmp(arg, ",") || !str_cmp(arg, "emote")) { emote=1; argument=word2; } icec_sendmessage(c, ch->name, color_mtoi(argument), emote); return TRUE; }