From: Matze B. <mat...@us...> - 2002-02-07 21:39:46
|
Update of /cvsroot/planeshift/planeshift/src/server In directory usw-pr-cvs1:/tmp/cvs-serv23431/src/server Modified Files: Makefile.am authentserver.cpp chatmanager.cpp chatmanager.h command.cpp npc.h psserver.cpp psserver.h Added Files: pscelserver.cpp pscelserver.h Log Message: The BIG commit: - fixes all over the place - moved some cel things into new psCelServer and psCelServer - added loading screen - cleanups... - network persistance seems to work now :) - deactivated some of keiths changes (sorry!!) remember that you have to do "loadmap dungeon" in server now before connecting also get a new version of cel! --- NEW FILE: pscelserver.cpp --- /* * psserver.h by Matze Braun <Mat...@gm...> * * Copyright (C) 2002 PlaneShift Team (in...@pl..., * http://www.planeshift.it) * * 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 (version 2 of the License) * 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 "config.h" #include <iengine/engine.h> #include <ivideo/txtmgr.h> #include <ivideo/texture.h> #include <pl/pl.h> #include <bl/bl.h> #include <pl/entity.h> #include <pl/propfact.h> #include <pl/propclas.h> #include <pl/persist.h> #include <pf/mesh.h> #include <pf/mesh.h> #include <pf/meshsel.h> #include <pf/inv.h> #include <pf/chars.h> #include <pf/move.h> #include <pf/tooltip.h> #include <pf/camera.h> #include <pf/gravity.h> #include <pf/timer.h> #include <pf/region.h> #include <pf/input.h> #include "net/client.h" #include "net/msgqueue.h" #include "net/msghandler.h" #include "util/pserror.h" #include "engine/netpersist.h" #include "pscelserver.h" SCF_IMPLEMENT_IBASE(psCelServer) SCF_IMPLEMENTS_INTERFACE(iSubscriber) SCF_IMPLEMENT_IBASE_END psCelServer::psCelServer() { SCF_CONSTRUCT_IBASE(0); } psCelServer::~psCelServer() { if (msghandler) msghandler->UnSubscribe(MSGTYPECELPERSIST, this); } bool psCelServer::Initialize(iObjectRegistry* object_reg, MsgHandler* msghandler, ClientConnectionSet* clients) { if (!CelBase::Initialize(object_reg, msghandler)) return false; if (!LoadTextures()) return false; psCelServer::msghandler = msghandler; msghandler->Subscribe(MSGTYPECELPERSIST, this); psCelServer::clients = clients; return true; } bool psCelServer::CreatePlayer (uint32_t clientnum, const char* name) { iCelEntity* entity = CreateActor(name, "stoneb", csVector3(0,0,0)); if (!entity) return false; Client* client = clients->Find(clientnum); #ifdef DEBUG if (!client) ERRORHALT("No Client found!\n"); #endif iPcInventory* pcinv; pcinv = CEL_QUERY_PROPCLASS (actors->GetPropertyClassList(), iPcInventory); if (!pcinv) return false; pcinv->AddEntity(entity); pcinv->DecRef(); client->SetEntity (entity); entity->DecRef(); return true; } bool psCelServer::CreateTestStuff(const char* mapname) { if (!CreateRoom("room", mapname)) return false; return true; } iCelEntity* psCelServer::CreateRoom(const char* name, const char* mapfile) { iCelPropertyClass* pc; iPcRegion* pcregion; iPcInventory* pcinv; iCelEntity* entity_room = pl->CreateEntity (); entity_room->SetName(name); entity_room->SetBehaviour (bl->CreateBehaviour (entity_room, name)); pc = pl->CreatePropertyClass (entity_room, "pcregion"); if (!pc) return false; pcregion = SCF_QUERY_INTERFACE_FAST (pc, iPcRegion); char buf[150]; snprintf (buf, 150, "/planeshift/world/%s", mapfile); pcregion->SetWorldFile (buf, "world"); pcregion->SetRegionName (mapfile); if (!pcregion->Load()) return false; room = pcregion->GetStartSector (); pcregion->DecRef(); pc = pl->CreatePropertyClass (entity_room, "pctooltip"); if (!pc) return false; pc = pl->CreatePropertyClass (entity_room, "pcinventory"); if (!pc) return false; pcinv = SCF_QUERY_INTERFACE_FAST (pc, iPcInventory); // do some stuff... pcinv->DecRef(); //somehow an engine init is needed #if 0 engine->Prepare(); txtmgr->SetPalette(); #endif SetWorldEntity(entity_room); return entity_room; } iCelEntity* psCelServer::CreateActor (const char* name, const char* factname, const csVector3& pos) { iCelPropertyClass* pc; iPcMesh* pcmesh; //iPcCamera* pccamera; iPcMovable* pcmovable; iPcMovableConstraint* pcmovableconst; iPcGravity* pcgravity; //iPcCommandInput* pcinp; iCelEntity* entity = pl->CreateEntity(); entity->SetName(name); entity->SetBehaviour (bl->CreateBehaviour (entity, "actor")); pc = pl->CreatePropertyClass (entity, "pcmovable"); if (!pc) return NULL; pcmovable = SCF_QUERY_INTERFACE_FAST (pc, iPcMovable); if (!pcmovable) return NULL; pc = pl->CreatePropertyClass (entity, "pcmovableconst_cd"); if (!pc) return NULL; pcmovableconst = SCF_QUERY_INTERFACE_FAST (pc, iPcMovableConstraint); if (!pcmovableconst) return NULL; pcmovable->AddConstraint (pcmovableconst); pcmovableconst->DecRef(); pcmovable->DecRef(); pc = pl->CreatePropertyClass (entity, "pcsolid"); if (!pc) return NULL; pc = pl->CreatePropertyClass (entity, "pcgravity"); if (!pc) return NULL; pcgravity = SCF_QUERY_INTERFACE_FAST (pc, iPcGravity); pcgravity->SetWeight (.3); pcgravity->DecRef(); pc = pl->CreatePropertyClass (entity, "pcmesh"); if (!pc) return NULL; pcmesh = SCF_QUERY_INTERFACE_FAST (pc, iPcMesh); if (!pcmesh) return NULL; char buf[150]; snprintf (buf, 150, "/planeshift/models/%s.spr", factname); pcmesh->SetMesh ("stoneb", buf); pcmesh->MoveMesh (room, pos); pcmesh->DecRef(); return entity; } void psCelServer::Interpret (MsgEntry* me) { psCelPersistMessage pmsg(me); switch (pmsg.cmd) { case CELPERSISTCMD_REQUEST_WORLD: { printf ("Requested World!\n"); Client* client = clients->Find(me->clientnum); #ifdef DEBUG if (!client) ERRORMSG("Kein Client gefunden!!\n"); #endif netpersist->SendWorld(me->clientnum); netpersist->SendEntity(me->clientnum, client->GetEntity()); netpersist->SendEntity(me->clientnum, actors); break; } } } --- NEW FILE: pscelserver.h --- /* * psserver.h by Matze Braun <Mat...@gm...> * * Copyright (C) 2002 PlaneShift Team (in...@pl..., * http://www.planeshift.it) * * 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 (version 2 of the License) * 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. * */ #ifndef __PSCELSERVER_H__ #define __PSCELSERVER_H__ #include "engine/celbase.h" #include "interface/subscriber.h" class ClientConnectionSet; class psCelServer : public CelBase, public iSubscriber { public: SCF_DECLARE_IBASE; psCelServer(); virtual ~psCelServer(); bool Initialize(iObjectRegistry* object_reg, MsgHandler* msghandler, ClientConnectionSet* clients); bool CreateTestStuff(const char* mapname); bool CreatePlayer(uint32_t clientnum, const char* name); virtual void Interpret (MsgEntry* me); protected: iCelEntity* CreateRoom (const char* name, const char* mapfile); iCelEntity* CreateActor (const char* name, const char* factname, const csVector3& pos); MsgHandler* msghandler; ClientConnectionSet* clients; }; #endif Index: Makefile.am =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/Makefile.am,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -d -r1.35 -r1.36 *** Makefile.am 19 Jan 2002 18:36:18 -0000 1.35 --- Makefile.am 7 Feb 2002 21:39:39 -0000 1.36 *************** *** 11,15 **** psserver_SOURCES = main.cpp serverconsole.h serverconsole.cpp psserver.h \ psserver.cpp command.cpp command.h globals.h \ ! authentserver.cpp authenserver.h chatmanager.h chatmanager.cpp psserver_LDADD = $(COMMONSRC)/net/libpsnet.la $(COMMONSRC)/sal/libsal.la \ $(COMMONSRC)/engine/libpsengine.la $(COMMONSRC)/util/libpsutil.la --- 11,16 ---- psserver_SOURCES = main.cpp serverconsole.h serverconsole.cpp psserver.h \ psserver.cpp command.cpp command.h globals.h \ ! authentserver.cpp authenserver.h chatmanager.h chatmanager.cpp \ ! pscelserver.h pscelserver.cpp psserver_LDADD = $(COMMONSRC)/net/libpsnet.la $(COMMONSRC)/sal/libsal.la \ $(COMMONSRC)/engine/libpsengine.la $(COMMONSRC)/util/libpsutil.la Index: authentserver.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/authentserver.cpp,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** authentserver.cpp 27 Jan 2002 20:48:48 -0000 1.9 --- authentserver.cpp 7 Feb 2002 21:39:40 -0000 1.10 *************** *** 25,28 **** --- 25,29 ---- #include "chatmanager.h" #include "psserver.h" + #include "pscelserver.h" SCF_IMPLEMENT_IBASE( psAuthenticationServer ) *************** *** 99,113 **** (const char *)msg.sUser,(const char *)msg.sPassword); ! if (psserver->chatmanager) ! { ! psChatMessage welcome_msg(me->clientnum, msg.sUser, ! "Welcome to PlaneShift AtomicBlue!", CHAT_TELL); ! psserver->chatmanager->SendNotice(welcome_msg); ! } } else { // invalid ! psAuthRejectedMessage *message = new psAuthRejectedMessage(me->clientnum,1); // dummy reason pMsgQueue->SendMessage(message->msg); CPrintf("User %s/%s authentication request rejected.\n", --- 100,117 ---- (const char *)msg.sUser,(const char *)msg.sPassword); ! if (!psserver->GetCelServer()->CreatePlayer(me->clientnum, msg.sUser)) ! ERRORMSG("Error while creating player!"); ! ! if (psserver->GetChatManager()) ! { ! psChatMessage welcome_msg(me->clientnum, msg.sUser, ! "Welcome to PlaneShift AtomicBlue!", CHAT_TELL); ! psserver->GetChatManager()->SendNotice(welcome_msg); ! } } else { // invalid ! psAuthRejectedMessage *message = new psAuthRejectedMessage(me->clientnum,1); pMsgQueue->SendMessage(message->msg); CPrintf("User %s/%s authentication request rejected.\n", Index: chatmanager.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/chatmanager.cpp,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -d -r1.27 -r1.28 *** chatmanager.cpp 27 Jan 2002 20:48:48 -0000 1.27 --- chatmanager.cpp 7 Feb 2002 21:39:40 -0000 1.28 *************** *** 42,84 **** NULL }; ! ChatManager::ChatManager(MsgHandler *mh,ClientConnectionSet *pClnts) { SCF_CONSTRUCT_IBASE(0); ! pMsgQueue = mh; ! pClients = pClnts; ! pMsgQueue->Subscribe(MSGTYPECHAT,this); } ChatManager::~ChatManager() { } ! void ChatManager::Interpret(MsgEntry *pMsg ) { ! psChatMessage msg(pMsg); char *pType; - msg.GetTypeText(pType); ! Client *pClient = pClients->Find(pMsg->clientnum); ! ! if (!pClient) ! { ! CPrintf("Got chat message from unknown client!\n"); ! return; ! } if (msg.iChatType != CHAT_TELL) ! CPrintf("%s %s: %s\n",(const char *)pClient->playername,pType,(const char *)msg.sText); else ! CPrintf("%s %s %s: %s\n",(const char *)pClient->playername,pType,(const char *)msg.sPerson,(const char *)msg.sText); bool done = false; char buff[2048]; ! ! strcpy(buff,(const char *)msg.sText); ! while (!done) { --- 42,81 ---- NULL }; ! ChatManager::ChatManager(MsgHandler *mh, ClientConnectionSet *pClnts) { SCF_CONSTRUCT_IBASE(0); ! msghandler = mh; ! clients = pClnts; ! msghandler->Subscribe(MSGTYPECHAT, this); } ChatManager::~ChatManager() { + if (msghandler) + msghandler->UnSubscribe(MSGTYPECHAT, this); } ! void ChatManager::Interpret(MsgEntry *me) { ! psChatMessage msg(me); ! char *pType; msg.GetTypeText(pType); ! Client *client = clients->Find(me->clientnum); if (msg.iChatType != CHAT_TELL) ! CPrintf("%s %s: %s\n", (const char*) client->GetPlayerName(), ! pType, (const char *) msg.sText); else ! CPrintf("%s %s %s: %s\n", (const char *) client->GetPlayerName(), ! pType, (const char *)msg.sPerson,(const char *)msg.sText); + // Filter bad words bool done = false; char buff[2048]; ! strncpy(buff, (const char *)msg.sText, 2048); while (!done) { *************** *** 98,104 **** done = true; } - msg.sText.Replace(buff); switch (msg.iChatType) { --- 95,101 ---- done = true; } msg.sText.Replace(buff); + // Send Chat to other players switch (msg.iChatType) { *************** *** 110,119 **** case CHAT_SAY: { ! SendSay(msg,pClient); break; } case CHAT_TELL: { ! SendTell(msg,pClient); break; } --- 107,116 ---- case CHAT_SAY: { ! SendSay(msg, client->GetPlayerName()); break; } case CHAT_TELL: { ! SendTell(msg, client->GetPlayerName(), me->clientnum); break; } *************** *** 128,146 **** void ChatManager::SendNotice(psChatMessage& msg) { ! SendTell(msg, NULL); } ! void ChatManager::SendSay(psChatMessage& msg,Client *pClientFrom) { ! BinaryTreeIterator<Client> *pLoop = pClients->GetIterator(); ! Client *pClientTo; // Broadcast all SAYs right now. // Each message gets its own memory block and place in the queue. // There may be a better way, but this is the most general. ! for (pClientTo = pLoop->First(); pClientTo; pClientTo = pLoop->Next() ) { ! psChatMessage newMsg(pClientTo->connection.clientnum, pClientFrom->playername, msg.sText,msg.iChatType); ! pMsgQueue->SendMessage(newMsg.msg); } --- 125,143 ---- void ChatManager::SendNotice(psChatMessage& msg) { ! SendTell(msg, "Server", 0); } ! void ChatManager::SendSay(psChatMessage& msg, const char* who) { ! BinaryTreeIterator<Client> *pLoop = clients->GetIterator(); ! Client *p; // Broadcast all SAYs right now. // Each message gets its own memory block and place in the queue. // There may be a better way, but this is the most general. ! for (p = pLoop->First(); p; p = pLoop->Next() ) { ! psChatMessage newMsg(p->GetClientNum(), who, msg.sText, msg.iChatType); ! msghandler->SendMessage(newMsg.msg); } *************** *** 148,178 **** } ! void ChatManager::SendTell(psChatMessage& msg,Client *pClientFrom) { // Find the addr token of the named TELL person ! Client *pClientTo = pClients->Find(msg.sPerson); ! if (pClientTo) { ! if (pClientFrom) ! { ! // Create a new message and send it to that person if found ! psChatMessage cmsg(pClientTo->connection.clientnum, ! pClientFrom->playername, msg.sText, msg.iChatType); ! ! pMsgQueue->SendMessage(cmsg.msg); ! } ! else ! { ! psChatMessage snotice(pClientTo->connection.clientnum, ! "SYSTEM", msg.sText, msg.iChatType); ! pMsgQueue->SendMessage(snotice.msg); ! } } else { - if (!pClientFrom) return; - // Create a new message to report TELL error and send // back to original person. --- 145,163 ---- } ! void ChatManager::SendTell(psChatMessage& msg, const char* who, ! uint32_t clientfrom) { // Find the addr token of the named TELL person ! Client *p = clients->Find(msg.sPerson); ! if (p) { ! // Create a new message and send it to that person if found ! psChatMessage cmsg(p->GetClientNum(), who, msg.sText, msg.iChatType); ! msghandler->SendMessage(cmsg.msg); } else { // Create a new message to report TELL error and send // back to original person. *************** *** 182,188 **** sMsg += " is logged on to the system currently."; ! psChatMessage newMsg(pClientFrom->connection.clientnum, ! "SYSTEM",sMsg,msg.iChatType); ! pMsgQueue->SendMessage(newMsg.msg); } } --- 167,172 ---- sMsg += " is logged on to the system currently."; ! psChatMessage newMsg(clientfrom, "Server", sMsg, msg.iChatType); ! msghandler->SendMessage(newMsg.msg); } } Index: chatmanager.h =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/chatmanager.h,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** chatmanager.h 27 Jan 2002 20:48:48 -0000 1.13 --- chatmanager.h 7 Feb 2002 21:39:40 -0000 1.14 *************** *** 26,34 **** protected: ! void SendTell(psChatMessage& msg,Client *pClientFrom); ! void SendSay(psChatMessage& msg,Client *pClientFrom); ! MsgHandler *pMsgQueue; ! ClientConnectionSet *pClients; }; --- 26,34 ---- protected: ! void SendTell(psChatMessage& msg, const char* who, uint32_t clientfrom); ! void SendSay(psChatMessage& msg, const char* who); ! MsgHandler* msghandler; ! ClientConnectionSet* clients; }; Index: command.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/command.cpp,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** command.cpp 7 Feb 2002 13:55:50 -0000 1.20 --- command.cpp 7 Feb 2002 21:39:40 -0000 1.21 *************** *** 20,23 **** --- 20,24 ---- #include "psserver.h" #include "net/netthread.h" + #include "pscelserver.h" #include "engine/pscel.h" *************** *** 69,72 **** --- 70,80 ---- } + int com_test(char *) + { + psserver->GetCelServer()->CreatePlayer(0, "Test"); + + return 0; + } + /* print out server status */ int com_status(char *) *************** *** 81,94 **** int com_loadmap(char *mapname) { - /************************** - ** this is totally different now - ** if (!strcmp(mapname,"dungeon")) { ! psserver->celbase->CreateTestStuff("dungeon"); } else if (!strcmp(mapname,"temple")) { ! psserver->celbase->CreateTestStuff("temple"); } else --- 89,103 ---- int com_loadmap(char *mapname) { if (!strcmp(mapname,"dungeon")) { ! psserver->GetCelServer()->CreateTestStuff("dungeon"); ! // XXX: This shouldn't be needed ! psserver->GetCelServer()->LoadTextures(); } else if (!strcmp(mapname,"temple")) { ! psserver->GetCelServer()->CreateTestStuff("temple"); ! // XXX: This shouldn't be needed ! psserver->GetCelServer()->LoadTextures(); } else *************** *** 96,101 **** CPrintf("Please choose map temple or dungeon.\n"); } ! ** ! ****************************/ return 0; } --- 105,109 ---- CPrintf("Please choose map temple or dungeon.\n"); } ! return 0; } *************** *** 107,110 **** --- 115,119 ---- { "quit", com_quit, "quits the program"}, { "loadmap", com_loadmap, "loads a map into the server"}, + { "test", com_test, "testcommands everything can happen"}, { 0, 0, 0 } }; Index: npc.h =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/npc.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** npc.h 7 Feb 2002 13:57:33 -0000 1.3 --- npc.h 7 Feb 2002 21:39:40 -0000 1.4 *************** *** 44,47 **** --- 44,48 ---- iServerNPC(char *name,float x,float y,float z,psTimerThread *timer,NetThread *net); + virtual ~iServerNPC() {} virtual void Interpret(MsgEntry *pMsgNotUsed); *************** *** 49,51 **** ! #endif \ No newline at end of file --- 50,52 ---- ! #endif Index: psserver.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/psserver.cpp,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** psserver.cpp 7 Feb 2002 13:55:50 -0000 1.11 --- psserver.cpp 7 Feb 2002 21:39:40 -0000 1.12 *************** *** 24,27 **** --- 24,28 ---- #include "engine/netpersist.h" + #include "pscelserver.h" #include "psserver.h" #include "serverconsole.h" *************** *** 42,45 **** --- 43,47 ---- authserver = NULL; timer = NULL; + celserver = NULL; } *************** *** 50,55 **** SCF_DEC_REF(authserver); ! if (celbase) ! delete celbase; if (msghandler) delete msghandler; --- 52,57 ---- SCF_DEC_REF(authserver); ! if (celserver) ! delete celserver; if (msghandler) delete msghandler; *************** *** 74,78 **** CPrintf ("failed!\n"); CPrintf ("Is there alread a server running?\n"); ! delete celbase; delete serverthread; return false; --- 76,80 ---- CPrintf ("failed!\n"); CPrintf ("Is there alread a server running?\n"); ! delete celserver; delete serverthread; return false; *************** *** 95,103 **** CPrintf ("Initialize cel..."); ! celbase = new psCel; ! if (!celbase->Initialize(object_reg, msghandler)) { CPrintf ("failed!\n"); ! delete celbase; return false; } --- 97,105 ---- CPrintf ("Initialize cel..."); ! celserver = new psCelServer; ! if (!celserver->Initialize(object_reg, msghandler, &connections)) { CPrintf ("failed!\n"); ! delete celserver; return false; } *************** *** 105,109 **** // This creates an NPC object that generates lots of pos messages ! guard = new iServerNPC("Guard 1",0.0,-0.9,0.5,timer,serverthread); return true; --- 107,111 ---- // This creates an NPC object that generates lots of pos messages ! //guard = new iServerNPC("Guard 1",0.0,-0.9,0.5,timer,serverthread); return true; Index: psserver.h =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/psserver.h,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** psserver.h 7 Feb 2002 13:55:50 -0000 1.8 --- psserver.h 7 Feb 2002 21:39:40 -0000 1.9 *************** *** 23,27 **** class NetThread; struct iChat; ! class psCel; class MsgHandler; // Receive and distributes incoming messages. class psAuthenticationServer; --- 23,27 ---- class NetThread; struct iChat; ! class psCelServer; class MsgHandler; // Receive and distributes incoming messages. class psAuthenticationServer; *************** *** 46,54 **** NetThread* GetNetThread() { return serverthread; } ! //protected: NetThread* serverthread; iObjectRegistry* object_reg; ! psCel* celbase; MsgHandler* msghandler; psAuthenticationServer* authserver; --- 46,56 ---- NetThread* GetNetThread() { return serverthread; } + psCelServer* GetCelServer() { return celserver; } + ChatManager* GetChatManager() { return chatmanager; } ! protected: NetThread* serverthread; iObjectRegistry* object_reg; ! psCelServer* celserver; MsgHandler* msghandler; psAuthenticationServer* authserver; |