khanat-opennel-code/code/ryzom/common/src/game_share/dms.h

192 lines
6.9 KiB
C++

// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// 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/>.
#ifndef R2_DMS_H
#define R2_DMS_H
//-----------------------------------------------------------------------------
// includes
//-----------------------------------------------------------------------------
#include "nel/misc/types_nl.h"
#include "nel/misc/entity_id.h"
#include "nel/net/service.h"
#include "nel/net/message.h"
#include "nel/net/module.h"
#include "game_share/dyn_chat.h"
#include "game_share/chat_group.h"
#include "game_share/base_types.h"
#include "game_share/r2_types.h"
#include <list>
#include <map>
#include <vector>
namespace NLNET
{
class IModuleSocket;
class IModuleProxy;
class IModule;
}
namespace RSMGR
{
struct TSessionType;
}
namespace NLMISC
{
struct CEntityId;
}
namespace R2
{
class CObject;
class CUserConnectionMgr;
class CObjectId;
class CScenario;
class CServerAnimationModule;
class CServerAdminModule;
class CServerEditionModule;
class CStringManagerModule;
class CAnimationMessageAnimationStart;
class IServerEditionModule
{
public:
typedef uint32 TCharId;
// typedef CSessionId TSessionId; // typedef uint32 TSessionId;
public:
virtual ~IServerEditionModule(){}
virtual void createSessionWithoutSu(uint32 charId, NLMISC::CEntityId clientEid) = 0;
virtual TPioneersSessionsAllowed * getSessionAllowedForChar(TCharId charId) const = 0;
virtual CScenario* getScenarioById(TSessionId sessionId) const = 0;
// getEditing position (use AdminModule::getPosition for having a position in editing and animation mode)
virtual bool getPosition(TSessionId sessionId, double& x, double& y, double& orient, uint8& season, uint32 locationIndex = 0) = 0;
virtual TSessionId getSessionIdByCharId(TCharId charId) const = 0;
virtual bool isClientAuthorized(uint32 charId) const = 0;
virtual void disconnectChar(uint32 charId) = 0;
virtual const NLNET::TModuleProxyPtr * getClientProxyPtr(TCharId charId) const = 0;
virtual void tpToEntryPoint(NLNET::IModuleProxy *senderModuleProxy, uint32 actId) = 0;
// wakup a session (load session from BS), start animation, connect waiting clients
virtual bool wakeUpSession(TSessionId sessionId, TCharId ownerId, std::string& msg) = 0;
virtual bool isSessionHibernating(TSessionId sessionId, RSMGR::TSessionType& sessionType, double& x, double& y, double& orient, uint8& season) = 0;
virtual bool isEditingSession(TSessionId sessionId) const = 0;
virtual TSessionId getLinkedSessionId(TSessionId sessionId) const = 0;
virtual void getStartParams(uint32 charId, TSessionId lastStoredSessionId) = 0;
virtual void updateCharPioneerRight(TCharId charId) = 0;
virtual void characterReady(TCharId charId) =0;
virtual void returnToPreviousSession(TCharId charId) = 0;
};
class IServerAnimationModule
{
public:
typedef uint32 TCharId;
// typedef uint32 TSessionId;
public:
virtual ~IServerAnimationModule() {}
virtual TSessionId getSessionIdByCharId(TCharId charId) const = 0;
virtual bool getPosition(TSessionId sessionId, double& x, double& y, double& orient, uint8& season, uint32 locationIndex = 0) = 0;
virtual void scheduleStartSession(const CAnimationMessageAnimationStart &msg) = 0;
virtual void addPioneer( TSessionId sessionId, TCharId charId) = 0;
virtual bool stopTest(TSessionId sessionId, uint32 & lastAct) = 0;
virtual void disconnectChar(uint32 charId) = 0;
virtual bool getConnectedChars(TSessionId sessionId, std::vector<TCharId>& chars) const = 0;
virtual NLNET::IModule* getModule() const = 0;
virtual bool isSessionRunning(TSessionId sessionId) const = 0;
virtual uint32 getCurrentAct(TSessionId sessionId) const = 0;
virtual void stopControlNpcs(TCharId charId) = 0;
virtual void setSessionStartParams(TSessionId sessionId, sint32 x, sint32 y, uint8 season) = 0;
virtual bool mustReloadPosition(TSessionId sessionId, TCharId charId) const = 0;
virtual bool getHeaderInfo(TSessionId sessionId, TScenarioHeaderSerializer::TValueType& values) const = 0;
virtual bool getScore(TSessionId sessionId, uint32 &score, NLMISC::TTime &timeTaken) = 0;
};
class IServerAdminModule
{
public:
virtual ~IServerAdminModule() {}
virtual bool getPosition(TSessionId sessionId, double&x, double&y, double& orient, uint8& season, uint32 locationIndex = 0) = 0;
virtual TSessionId getSessionIdByCharId(uint32 charId) const = 0;
};
//-----------------------------------------------------------------------------
// class CDynamicMapService
//-----------------------------------------------------------------------------
class CDynamicMapService
{
public:
CDynamicMapService( NLMISC::CConfigFile& confFile, NLNET::IModuleSocket * gateway);
~CDynamicMapService();
static CDynamicMapService* getInstance();
virtual void init();
virtual void init2();
bool useNetwork() const { return _UseNetwork;}
virtual void translateAndForwardRequested(TDataSetRow senderId,CChatGroup::TGroupType groupType,std::string id,TSessionId sessionId);
void forwardIncarnChat(TChanID id,TDataSetRow senderId,ucstring sentence);
IServerAnimationModule* getAnimationModule() const;
IServerEditionModule* getEditionModule() const;
IServerAdminModule* getAdminModule() const;
std::string getValue(TSessionId sessionId, const std::string& msg) const;
private:
static CDynamicMapService* _Instance;
// CUserConnectionMgr* _UserConnectionMgr; will be session manager
CServerAnimationModule* _AnimationModule;
CServerAdminModule* _AdminModule;
CServerEditionModule* _EditionModule;
CStringManagerModule* _StringMgrModule;
NLMISC::CConfigFile& _ConfigFile;
bool _UseNetwork;
};
// get the security info of the module
bool getCharInfo(NLNET::IModuleProxy *senderModuleProxy, uint32 & charId, NLMISC::CEntityId & clientEid, std::string & userPriv, std::string &extendedPriv);
// get the security info of the module and verify that the su has allowed the client to connect to the dss
bool checkSecurityInfo(NLNET::IModuleProxy *senderModuleProxy, uint32 & charId, NLMISC::CEntityId & clientEid, std::string & userPriv, std::string &extendedPriv);
} // namespace R2
#endif //R2_DMS_H