147 lines
3.7 KiB
C
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);
|
|
}
|
|
}
|
|
|