/* -*- LPC -*- */
/*
* $Locker: $
* $Id: board_thingy.c,v 1.2 2003/03/21 02:29:17 ceres Exp $
* $Log: board_thingy.c,v $
* Revision 1.2 2003/03/21 02:29:17 ceres
* Modified to use player handler
*
* Revision 1.1 1998/01/06 05:17:08 ceres
* Initial revision
*
*/
#include <network.h>
#include <localtime.h>
#include <board.h>
#include <player_handler.h>
inherit SERVER;
string *board_names;
string *creator_board_names;
mapping sockets;
void create() {
sockets = ([ ]);
server::create();
SetSocketType(STREAM);
SetDestructOnClose(1);
call_out("setup", 2);
board_names = ({ "frog", "never wending story", "role_playing",
"fightersguild", "witchesguild", "thievesguild",
"assassinsguild", "alt.fan.pratchett",
"wizardsguild", "flame", "newspaper",
"priestsguild" });
creator_board_names = ({ "commonroom", "mudlib", "development",
"liaison", "am", "sur", "ram",
"klatch", "applications", "learning" });
} /* create() */
protected void setup() {
if (eventCreateSocket(5700) < 0)
if (this_object()) destruct(this_object());
} /* setup() */
void eventRead(int fd, string str) {
string *bits;
string *frogs;
mixed *stuff;
int i;
int j;
int creator;
tell_object(find_player("pinkfish"), "Got: "+str);
/* Ok, we need to mugwump this apart and figure out what it is */
frogs = explode(replace_string(str, "\r", ""), "\n");
creator = PLAYER_HANDLER->test_creator(sockets[fd]);
for (j = 0; j < sizeof(frogs); j++) {
bits = explode(frogs[j], " ");
switch (bits[0]) {
case "boardnames" :
if (creator) {
for (i = 0; i < sizeof(board_names); i++) {
eventWrite(fd, "board "+board_names[i]+"\n");
}
for (i = 0; i < sizeof(board_names); i++) {
eventWrite(fd, "board "+creator_board_names[i]+"\n");
}
} else {
for (i = 0; i < sizeof(board_names); i++) {
eventWrite(fd, "board "+board_names[i]+"\n");
}
}
break;
case "board" :
if (member_array(bits[1], board_names) != -1 ||
(creator && member_array(bits[1], board_names) != -1)) {
stuff = BOARD_HAND->get_subjects(bits[1]);
for (i = 0; i < sizeof(stuff); i++) {
eventWrite(fd, "subject "+stuff[i][B_NUM]+" "+bits[1]+" "+
stuff[i][B_NAME]+" "+stuff[i][B_SUBJECT]+" "+
ctime(stuff[i][B_TIME])[4..9]+"\n");
}
}
break;
case "message" :
if (member_array(bits[2], board_names) != -1 &&
(creator && member_array(bits[1], board_names) != -1)) {
stuff = BOARD_HAND->get_subjects(bits[2]);
for (i = 0; i < sizeof(stuff); i++) {
if (bits[1] == stuff[i][B_NUM]+"") {
eventWrite(fd, "message "+bits[1]+" "+bits[2]+"\n");
eventWrite(fd, "Note #"+(i+1)+" by "+stuff[i][B_NAME]+
" posted at "+ctime(stuff[i][B_TIME])+"\n"
"Title: \""+stuff[i][B_SUBJECT]+"\"\n"+
BOARD_HAND->get_message(bits[2], i)+
"\n.\n");
}
}
}
break;
case "quit" :
eventWrite(fd, 0, 1);
break;
case "login" :
if (PLAYER_HANDLER->test_user(bits[1])) {
sockets[fd] = bits[1];
eventWrite(fd, "login Ok\n");
} else {
eventWrite(fd, "login Failed\n");
}
break;
case "logout" :
eventWrite(fd, "logout Ok\n");
sockets[fd] = "No one";
break;
}
}
} /* eventRead() */
protected void eventNewConnection(int fd) {
sockets[fd] = "No one";
} /* eventNewConnection() */
protected void eventSocketClosed(int fd) {
map_delete(sockets, fd);
} /* eventSocketClosed() */