khanat-opennel-code/code/nel/samples/net/class_transport/gd_service.cpp
2013-06-15 07:08:38 -07:00

138 lines
3.3 KiB
C++

// NeL - 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/>.
/*
* Transport class example, gd server.
*
* This service have a class (CSharedClass) that send to other service when online.
*
* To run this program, ensure there is a file "gd_service.cfg"
* containing the location of the naming service (NSHost, NSPort)
* in the working directory. The naming service must be running.
*/
//
// Includes
//
// We're using the NeL Service framework, and layer 5
#include "nel/net/service.h"
#include "nel/misc/time_nl.h"
#include "nel/misc/displayer.h"
#include "nel/net/transport_class.h"
#ifdef NL_OS_WINDOWS
# define NOMINMAX
# include <windows.h>
#endif // NL_OS_WINDOWS
#ifndef NL_CT_CFG
#define NL_CT_CFG ""
#endif // NL_CT_CFG
//
// Namespace
//
using namespace std;
using namespace NLNET;
using namespace NLMISC;
//
// Shared Class
//
struct CSharedClass : public CTransportClass
{
uint32 i1, i2, i3;
float f1;
vector<uint32> vi1;
string str;
CEntityId eid;
CSharedClass () : i1(10), i2(10), i3(10), f1(10), str("str10") { vi1.push_back(111); vi1.push_back(222); vi1.push_back(255); }
virtual void description ()
{
className ("SharedClass");
property ("i1", PropUInt32, (uint32)11, i1);
property ("f1", PropFloat, 1.5f, f1);
// property ("i2", PropUInt32, (uint32)12, i2);
property ("i3", PropUInt32, (uint32)13, i3);
propertyCont ("vi1", PropUInt32, vi1);
property ("str", PropString, (string)"str12", str);
// property ("eid", PropEntityId, CEntityId::Unknown, eid);
}
virtual void callback (const string &name, uint8 sid)
{
nlinfo ("Yes! I receive a Shared class from '%s' %d", name.c_str(), sid);
}
};
//
// Variables
//
static CSharedClass SharedClass;
//
// Functions
//
static void cbUpService (const std::string &serviceName, uint16 sid, void *arg)
{
// When a service comes, send the new class
CSharedClass foo;
foo.send((TServiceId)sid);
}
//
// Service class
//
struct CGDService : public IService
{
void init()
{
// callback when a new service comes
CUnifiedNetwork::getInstance()->setServiceUpCallback("*", (TUnifiedNetCallback)cbUpService, NULL);
// init the class transport system
CTransportClass::init ();
// register the shared class
TRANSPORT_CLASS_REGISTER (CSharedClass);
}
void release ()
{
// release all the class transport system
CTransportClass::release ();
}
};
/*
* Declare a service with the class IService, the names "GDS" (short) and "gd_service" (long).
* The port is automatically allocated (0) and the main callback array is empty.
*/
NLNET_SERVICE_MAIN( CGDService, "GDS", "gd_service", 0, EmptyCallbackArray, NL_CT_CFG, "" )