core/systems/ShareSys.h
author David Anderson <dvander@alliedmods.net>
Wed Jan 17 03:01:38 2007 +0000 (2007-01-17)
changeset 304 fa485d2f25ed
parent 229 7819a42069e4
child 312 804f4de0aa69
permissions -rw-r--r--
Added extension loading/unloading
Extended SDK for interface sharing
Completed Metamod extension support
     1 #ifndef _INCLUDE_SOURCEMOD_SHARESYSTEM_H_
     2 #define _INCLUDE_SOURCEMOD_SHARESYSTEM_H_
     3 
     4 #include <IShareSys.h>
     5 #include <IHandleSys.h>
     6 #include <sh_list.h>
     7 #include "sm_globals.h"
     8 #include "sourcemod.h"
     9 
    10 using namespace SourceHook;
    11 
    12 namespace SourceMod
    13 {
    14 	struct IdentityToken_t
    15 	{
    16 		Handle_t ident;
    17 	};
    18 };
    19 
    20 struct IfaceInfo
    21 {
    22 	SMInterface *iface;
    23 	IExtension *owner;
    24 };
    25 
    26 class ShareSystem : 
    27 	public IShareSys,
    28 	public SMGlobalClass,
    29 	public IHandleTypeDispatch
    30 {
    31 public:
    32 	ShareSystem();
    33 public: //IShareSys
    34 	bool AddInterface(IExtension *myself, SMInterface *pIface);
    35 	bool RequestInterface(const char *iface_name, 
    36 		unsigned int iface_vers,
    37 		IExtension *mysql,
    38 		SMInterface **pIface);
    39 	void AddNatives(IdentityToken_t *token, const sp_nativeinfo_t *natives[]);
    40 	IdentityType_t CreateIdentType(const char *name);
    41 	IdentityType_t FindIdentType(const char *name);
    42 	IdentityToken_t *CreateIdentity(IdentityType_t type);
    43 	void DestroyIdentType(IdentityType_t type);
    44 	void DestroyIdentity(IdentityToken_t *identity);
    45 public: //SMGlobalClass
    46 	/* Pre-empt in case anything tries to register idents early */
    47 	void OnSourceModStartup(bool late);
    48 	void OnSourceModShutdown();
    49 public: //IHandleTypeDispatch
    50 	void OnHandleDestroy(HandleType_t type, void *object);
    51 public:
    52 	IdentityToken_t *CreateCoreIdentity();
    53 	void RemoveInterfaces(IExtension *pExtension);
    54 public:
    55 	inline IdentityToken_t *GetIdentRoot()
    56 	{
    57 		return &m_IdentRoot;
    58 	}
    59 private:
    60 	List<IfaceInfo> m_Interfaces;
    61 	HandleType_t m_TypeRoot;
    62 	IdentityToken_t m_IdentRoot;
    63 	HandleType_t m_IfaceType;
    64 	IdentityType_t m_CoreType;
    65 };
    66 
    67 extern ShareSystem g_ShareSys;
    68 
    69 #endif //_INCLUDE_SOURCEMOD_SHARESYSTEM_H_