2025-03-05 08:37:43 +01:00

147 lines
3.7 KiB
C

/*
* PVVMUD a 3D MUD
* Copyright (C) 1998-1999 Programvareverkstedet (pvv@pvv.org)
*
* 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; either version 2 of the License, or
* (at your option) any later version.
*
* 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 "pvvmud.H"
#include "pvvmudclient.H"
#include "glrenderer.H"
#include "gltexture.H"
#include "glsrvcliconsole.H"
CPvvmudClient::CPvvmudClient(int argc,char * argv[]) {
m_option = new COption;
//m_stdInput = new CStdInput();
m_option->setValue("server",'s',"localhost");
m_option->setValue("username",'u',"Guest");
m_option->setValue("passwd",'p',"pvv");
m_option->loadOption("pvvmud.conf");
m_option->parseArguments(argc,argv);
initGlobalData(m_option);
m_gui = new CGlutGUI(argc,argv,m_renderer, this, 400, 300);
m_renderer = new COGLRenderer(this);
m_console = new CGLSrvCliConsole(this, 40, 20);
m_console->setColor(0.8, 0.8, 0.8);
m_commandParser = new CCliCmdParser(this);
m_gui->setRenderer(m_renderer);
m_inputFunction->setRenderer(m_renderer);
m_inputFunction->setConsole(m_console);
m_renderer->setConsole(m_console);
GLTexture_Init();
m_geometryCache = new CCliGeometryCache(getManager());
m_materialCache = new CCliMaterialCache(getManager());
m_textureCache = new CCliTextureCache(getManager());
m_lastTime.getTime();
cdebug << "GeoCache at addr: " << m_geometryCache << "\n";
m_manager->init();
}
void CPvvmudClient::run() {
m_gui->run();
}
void CPvvmudClient::initGlobalData(COption * option) {
CClientSocket * socket;
if ((m_option->getString("server"))==NULL) {
cdebug << "Error : Argument error in -server\n";
exit(1);
}
try {
CInetAddress addr(m_option->getString("server"), SERVER_CLIENT_PORT);
socket = new CClientSocket(addr.getAddress(), addr.getPort() );
} catch (CSocketException * e){
delete e;
cdebug << "Failed to connect to server!\n";
exit(1);
}
socket->setNonBlocking();
m_timeKeeper = new CTimeKeeper();
m_manager = new CCliSrvManager( new CCliSrvProtocol( socket,m_timeKeeper ), m_timeKeeper);
m_manager->setClient(this);
m_inputFunction = new CInputFunction(m_manager, m_renderer);
if (m_inputFunction == NULL){
cdebug << "Out of memory!!!\n";
exit(23);
}
m_timeKeeper->addHeartBeat(512,this);
}
CGeometryCache * CPvvmudClient::getGeometryCache() {
return m_geometryCache;
}
CTextureCache * CPvvmudClient::getTextureCache() {
return m_textureCache;
}
CMaterialCache * CPvvmudClient::getMaterialCache() {
return m_materialCache;
}
CConsole * CPvvmudClient::getConsole() {
return m_console;
}
CCliSrvManager * CPvvmudClient::getManager() {
return m_manager;
}
CTimeKeeper * CPvvmudClient::getTimeKeeper() {
return m_timeKeeper;
}
CGUI * CPvvmudClient::getGUI() {
return m_gui;
}
CInputFunction * CPvvmudClient::getInputFunction() {
return m_inputFunction;
}
CStdInput * CPvvmudClient::getStdInput() {
return m_stdInput;
}
COption * CPvvmudClient::getOption() {
return m_option;
}
int CPvvmudClient::timeKeeperHB(){
m_manager->sendPing();
return TRUE;
}
void CPvvmudClient::pollConsole(){
const char * msg = getConsole()->getLine();
if (msg != NULL) {
m_commandParser->parseCommand(msg);
}
}