// MorgenGrauen MUDlib
//
// who.c
//
// $Id: who.c 8755 2014-04-26 13:13:40Z Zesstra $

#include <config.h>
#include <udp.h>

int last;
int maxtoday, maxever;

void create()
{
  string tmp1, tmp2, dummy;

  if (time()-last<1800) return;
  last=time();
  tmp1=read_file("/etc/maxusers.ever",0,1);
  tmp2=read_file("/etc/maxusers",0,1);
  if (stringp(tmp1)&&sizeof(tmp1)) sscanf(tmp1,"%d %s",maxever,dummy);
  if (stringp(tmp2)&&sizeof(tmp2)) sscanf(tmp2,"%d %s",maxtoday,dummy);
}

string adjust(string str,int wid) {
  return sprintf("%*|s",wid,str);
}

void udp_who(mapping data)
{
  int i;
  string *lines;
  string wholiste,header;

  create();
  lines="/obj/werliste"->QueryWhoListe(0, 1);
  wholiste=implode(lines,"\n");
  lines=({
    "*------------------------------------------------------------------------*",
    "","","","",
    "*------------------------------------------------------------------------*"});
  header=MUDNAME", LDMud "+__VERSION__;
  lines[1]="|"+adjust(header,sizeof(lines[0])-2)+"|";
  header="Adresse: mg.morgengrauen.info (" __HOST_IP_NUMBER__ ") 23 (alternativ 4711)";
  lines[2]="|"+adjust(header,sizeof(lines[0])-2)+"|";
  header="Uptime: "+uptime();
  lines[3]="|"+adjust(header,sizeof(lines[0])-2)+"|";
  header=_MUDLIB_NAME_"-Mudlib "_MUDLIB_VERSION_;
  lines[4]="|"+adjust(header,sizeof(lines[0])-2)+"|";
  header=implode(lines,"\n");
  wholiste=header+"\n"+wholiste+sprintf("\n*** Anwesende im "MUDNAME": Max. heute %d, Rekord %d\n",maxtoday,maxever);
  INETD->_send_udp(data[NAME], ([
				REQUEST: REPLY,
				RECIPIENT: data[SENDER],
				ID: data[ID],
				DATA: wholiste
				]) );
}
