151 lines
3 KiB
C++
151 lines
3 KiB
C++
// NeLNS - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
|
// Copyright (C) 2010 Winch Gate Property Limited
|
|
//
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU Affero General Public License as
|
|
// published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU Affero General Public License
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
#include "nel/misc/types_nl.h"
|
|
|
|
#include <stdio.h>
|
|
#include <ctype.h>
|
|
#include <math.h>
|
|
|
|
#include <vector>
|
|
#include <map>
|
|
|
|
#include "nel/misc/debug.h"
|
|
#include "nel/misc/config_file.h"
|
|
#include "nel/misc/displayer.h"
|
|
#include "nel/misc/log.h"
|
|
|
|
#include "nel/net/buf_server.h"
|
|
#include "nel/net/service.h"
|
|
|
|
#include "admin_service.h"
|
|
|
|
//
|
|
// Namespaces
|
|
//
|
|
|
|
using namespace std;
|
|
using namespace NLMISC;
|
|
using namespace NLNET;
|
|
|
|
|
|
//
|
|
// Variables
|
|
//
|
|
|
|
CBufServer *WebServer = 0;
|
|
|
|
|
|
//
|
|
// Callbacks
|
|
//
|
|
|
|
void cbGetRequest (CMemStream &msgin, TSockId host)
|
|
{
|
|
string rawvarpath;
|
|
msgin.serial (rawvarpath);
|
|
addRequest (rawvarpath, host);
|
|
}
|
|
|
|
typedef void (*WebCallback)(CMemStream &msgin, TSockId host);
|
|
|
|
WebCallback WebCallbackArray[] =
|
|
{
|
|
cbGetRequest,
|
|
};
|
|
|
|
//
|
|
// Functions
|
|
//
|
|
|
|
void sendString (TSockId from, const string &str)
|
|
{
|
|
nlinfo ("REQUEST: Send '%s' to php '%s'", str.c_str (), from->asString ().c_str());
|
|
|
|
if(from == 0)
|
|
return;
|
|
|
|
CMemStream msgout;
|
|
uint32 fake = 0;
|
|
msgout.serial(fake);
|
|
msgout.serial (const_cast<string&>(str));
|
|
WebServer->send (msgout, from);
|
|
}
|
|
|
|
void connectionWebInit ()
|
|
{
|
|
nlassert(WebServer == 0);
|
|
|
|
WebServer = new CBufServer ();
|
|
nlassert(WebServer != 0);
|
|
|
|
uint16 port = (uint16) IService::getInstance ()->ConfigFile.getVar ("WebPort").asInt();
|
|
WebServer->init (port);
|
|
|
|
nlinfo ("Set the server connection for web to port %hu", port);
|
|
}
|
|
|
|
void connectionWebUpdate ()
|
|
{
|
|
nlassert(WebServer != 0);
|
|
|
|
try
|
|
{
|
|
WebServer->update ();
|
|
|
|
while (WebServer->dataAvailable ())
|
|
{
|
|
// create a string mem stream to easily communicate with web server
|
|
NLMISC::CMemStream msgin (true);
|
|
TSockId host;
|
|
sint8 messageType = 0;
|
|
|
|
try
|
|
{
|
|
WebServer->receive (msgin, &host);
|
|
uint32 fake = 0;
|
|
msgin.serial(fake);
|
|
|
|
msgin.serial (messageType);
|
|
}
|
|
catch (Exception &e)
|
|
{
|
|
nlwarning ("Error during receive: '%s'", e.what ());
|
|
}
|
|
|
|
if(messageType>=0 && messageType<(sint8)(sizeof(WebCallbackArray)/sizeof(WebCallbackArray[0])))
|
|
{
|
|
WebCallbackArray[messageType](msgin, host);
|
|
}
|
|
else
|
|
{
|
|
nlwarning ("Received an unknown message type %d from web server", messageType);
|
|
}
|
|
}
|
|
}
|
|
catch (Exception &e)
|
|
{
|
|
nlwarning ("Error during update: '%s'", e.what ());
|
|
}
|
|
}
|
|
|
|
void connectionWebRelease ()
|
|
{
|
|
nlassert(WebServer != 0);
|
|
|
|
delete WebServer;
|
|
WebServer = 0;
|
|
}
|