📄 hxengin.h
字号:
STDMETHOD(QueryInterface) (THIS_
REFIID riid,
void** ppvObj) PURE;
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
STDMETHOD_(ULONG32,Release) (THIS) PURE;
STDMETHOD(Start) (THIS_
const char* pProcessName,
IHXProcessEntryPoint* pEntryPoint) PURE;
};
/****************************************************************************
*
* Interface:
*
* IHXLoadBalancedListen
*
* Purpose:
*
* This interface is queried off of IHXListenSocket. It allows
* a plugin to specify that it wants the server to load balance
* multiple instances of itself. The server will instantiate multiple
* instances of the plugin as needed based on socket / descriptor limits.
* Each plugin instance should attempt to listen on the same port as
* other instances (they will share the port).
*
* IID_IHXLoadBalancedListen:
*
* {00000110-0901-11d1-8B06-00A024406D59}
*
*/
DEFINE_GUID(IID_IHXLoadBalancedListen, 0x00000110, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
0xa0, 0x24, 0x40, 0x6d, 0x59);
#undef INTERFACE
#define INTERFACE IHXLoadBalancedListen
DECLARE_INTERFACE_(IHXLoadBalancedListen, IUnknown)
{
/*
* IUnknown methods
*/
STDMETHOD(QueryInterface) (THIS_
REFIID riid,
void** ppvObj) PURE;
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
STDMETHOD_(ULONG32,Release) (THIS) PURE;
/*
* IHXLoadBalancedListen methods
*/
/************************************************************************
* Method:
* IHXLoadBalancedListen::SetID
* Purpose:
* This function set's the unique ID for this listen socket. This
* ID is used to determine whether or not different instances of
* a plugin trying to listen on a single port are actually the
* same plugin. Without this function, it would be possible for
* two completely different plugins to listen on the same port using
* the load balanced listener.
*/
STDMETHOD(SetID) (THIS_
REFIID ID) PURE;
/************************************************************************
* Method:
* IHXLoadBalancedListen::SetReserveLimit
* Purpose:
* Sets the reserve limit for descriptors / sockets. If less
* than reserve limit descriptors / sockets are left then a new
* instance of the plugin will be created.
*/
STDMETHOD(SetReserveLimit) (THIS_
UINT32 ulDescriptors,
UINT32 ulSockets) PURE;
};
/****************************************************************************
*
* Interface:
*
* IHXOverrideDefaultServices
*
* Purpose:
*
* This interface is queried off of the context. It allows
* a plugin to override any default services provided by the G2 system.
* Currently, it is supported only on the client side.
* You may currently override IHXNetworkServices using this interface
* You can use the same interface to later restore back the overriden services.
* This is done by calling the same OverrideServices() function with the
* original service QIed before the initial override.
*
* IID_IHXOverrideDefaultServices:
*
* {00000111-0901-11d1-8B06-00A024406D59}
*
*/
DEFINE_GUID(IID_IHXOverrideDefaultServices, 0x00000111, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
0xa0, 0x24, 0x40, 0x6d, 0x59);
#undef INTERFACE
#define INTERFACE IHXOverrideDefaultServices
DECLARE_INTERFACE_(IHXOverrideDefaultServices, IUnknown)
{
/*
* IUnknown methods
*/
STDMETHOD(QueryInterface) (THIS_
REFIID riid,
void** ppvObj) PURE;
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
STDMETHOD_(ULONG32,Release) (THIS) PURE;
/*
* IHXOverrideDefaultServices methods
*/
/************************************************************************
* Method:
* IHXOverrideDefaultServices::OverrideServices
* Purpose:
* Override default services provided by the G2 system.
*
*/
STDMETHOD(OverrideServices) (THIS_
IUnknown* pContext) PURE;
};
typedef enum _HX_SOCKET_OPTION
{
HX_SOCKOPT_REUSE_ADDR,
HX_SOCKOPT_REUSE_PORT,
HX_SOCKOPT_BROADCAST,
HX_SOCKOPT_SET_RECVBUF_SIZE,
HX_SOCKOPT_SET_SENDBUF_SIZE,
HX_SOCKOPT_MULTICAST_IF,
HX_SOCKOPT_IP_TOS
} HX_SOCKET_OPTION;
/****************************************************************************
*
* Interface:
*
* IHXSetSocketOption
*
* Purpose:
*
* Set sockt option
*
* IID_IHXSetSocketOption:
*
* IID_IHXSetSocketOption: {00000114-0901-11d1-8B06-00A024406D59}
*
*/
DEFINE_GUID(IID_IHXSetSocketOption,
0x00000114, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
#undef INTERFACE
#define INTERFACE IHXSetSocketOption
DECLARE_INTERFACE_(IHXSetSocketOption, IUnknown)
{
/*
* IUnknown methods
*/
STDMETHOD(QueryInterface) (THIS_
REFIID riid,
void** ppvObj) PURE;
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
STDMETHOD_(ULONG32,Release) (THIS) PURE;
/*
* IHXListenSocket methods
*/
STDMETHOD(SetOption) (THIS_
HX_SOCKET_OPTION option,
UINT32 ulValue) PURE;
};
#define HX_THREADSAFE_METHOD_FF_GETPACKET 0x00000001
/*
* FileFormat::GetPacket() only calls:
* CCF->CI(Buffer), CCF->CI(Packet), CCF->CI(Values), *Alloc, *Free,
* FS->Read(), FS->Close(), FS->Seek(),
* FFR->PacketReady(), FFR->StreamDone()
* Context->Scheduler->*,
* CCF->CI(Mutex), Mutex->*
* Context->ErrorMessages
*
* XXXSMPNOW
*/
#define HX_THREADSAFE_METHOD_FS_READ 0x00000002
/*
* FileSystem::Read()/Seek()/Close() only calls:
* CCF->CI(Buffer), CCF->CI(Packet), CCF->CI(Values), *Alloc, *Free,
* FS->Read(), FS->Close(), FS->Seek(),
* Context->Scheduler->*,
* CCF->CI(Mutex), Mutex->*
* Context->ErrorMessages
*
* XXXSMPNOW
*/
#define HX_THREADSAFE_METHOD_FSR_READDONE 0x00000004
/*
* FileFormat::ReadDone()/SeekDone()/CloseDone() only calls:
* CCF->CI(Buffer), CCF->CI(Packet), CCF->CI(Values), *Alloc, *Free,
* FS->Read(), FS->Close(), FS->Seek(),
* FFR->PacketReady(), FFR->StreamDone()
* Context->Scheduler->*,
* CCF->CI(Mutex), Mutex->*
* Context->ErrorMessages
*
* XXXSMPNOW
*/
#define HX_THREADSAFE_METHOD_CACHE_FILE 0x00000008
/*
* FileSystem::Read()/Seek()/Close() only calls:
* CCF->CI(Buffer), CCF->CI(Packet), CCF->CI(Values), *Alloc, *Free,
* FS->Read(), FS->Close(), FS->Seek(),
* IHXCacheFile->*, IHXCacheFileResponse->*,
* Context->Scheduler->*,
* CCF->CI(Mutex), Mutex->*
* Context->ErrorMessages
*
* XXXSMPNOW
*/
#define HX_THREADSAFE_METHOD_CACHE_FILE_RESPONSE 0x00000010
/*
* FileSystem::Read()/Seek()/Close() only calls:
* CCF->CI(Buffer), CCF->CI(Packet), CCF->CI(Values), *Alloc, *Free,
* FS->Read(), FS->Close(), FS->Seek(),
* IHXCacheFile->*, IHXCacheFileResponse->*,
* Context->Scheduler->*,
* CCF->CI(Mutex), Mutex->*
* Context->ErrorMessages
*
* XXXSMPNOW
*/
/*
* Thread Safe flags for IHXDataConvert
*/
#define HX_THREADSAFE_METHOD_CONVERT_HEADERS 0x00000020
/*
* IHXDataConvert::ConvertXXX()/CtrlBufferReady() only calls:
* CCF->CI(Buffer), CCF->CI(Packet), CCF->CI(Values), *Alloc, *Free,
* IHXDataConvertResponse->*
* Context->Scheduler->*,
* CCF->CI(Mutex), Mutex->*
* Context->ErrorMessages
*
* XXXSMPNOW
*/
#define HX_THREADSAFE_METHOD_CONVERT_DATA 0x00000040
/*
* IHXDataConvert::ConvertXXX()/CtrlBufferReady() only calls:
* CCF->CI(Buffer), CCF->CI(Packet), CCF->CI(Values), *Alloc, *Free,
* IHXDataConvertResponse->*
* Context->Scheduler->*,
* CCF->CI(Mutex), Mutex->*
* Context->ErrorMessages
*
* XXXSMPNOW
*/
#define HX_THREADSAFE_METHOD_CONVERT_CTRL_BUFFER_READY 0x00000080
/*
* IHXDataConvert::ConvertXXX()/CtrlBufferReady() only calls:
* CCF->CI(Buffer), CCF->CI(Packet), CCF->CI(Values), *Alloc, *Free,
* IHXDataConvertResponse->*
* Context->Scheduler->*,
* CCF->CI(Mutex), Mutex->*
* Context->ErrorMessages
*
* XXXSMPNOW
*/
#define HX_THREADSAFE_METHOD_SOCKET_READDONE 0x00000100
#define HX_THREADSAFE_METHOD_ALL (~0)
/****************************************************************************
*
* Interface:
*
* IHXThreadSafeMethods
*
* Purpose:
*
* XXXSMPNOW
*
* IID_IHXThreadSafeMethods:
*
* {00000115-0901-11d1-8B06-00A024406D59}
*
*/
DEFINE_GUID(IID_IHXThreadSafeMethods, 0x00000115, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
0xa0, 0x24, 0x40, 0x6d, 0x59);
#undef INTERFACE
#define INTERFACE IHXThreadSafeMethods
DECLARE_INTERFACE_(IHXThreadSafeMethods, IUnknown)
{
/*
* IUnknown methods
*/
STDMETHOD(QueryInterface) (THIS_
REFIID riid,
void** ppvObj) PURE;
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
STDMETHOD_(ULONG32,Release) (THIS) PURE;
/*
* IHXThreadSafeMethods methods
*/
/************************************************************************
* Method:
* IHXThreadSafeMethods::IsThreadSafe
* Purpose:
* XXXSMPNOW
*/
STDMETHOD_(UINT32,IsThreadSafe) (THIS) PURE;
};
/****************************************************************************
*
* Interface:
*
* IHXMutex
*
* Purpose:
*
* XXXSMPNOW
*
* IID_IHXMutex:
*
* {00000116-0901-11d1-8B06-00A024406D59}
*
*/
DEFINE_GUID(IID_IHXMutex, 0x00000116, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
0xa0, 0x24, 0x40, 0x6d, 0x59);
#undef INTERFACE
#define INTERFACE IHXMutex
/*
* The IHXCommonClassFactory supports creating an instance
* of this object.
*/
#define CLSID_IHXMutex IID_IHXMutex
DECLARE_INTERFACE_(IHXMutex, IUnknown)
{
/*
* IUnknown methods
*/
STDMETHOD(QueryInterface) (THIS_
REFIID riid,
void** ppvObj) PURE;
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
STDMETHOD_(ULONG32,Release) (THIS) PURE;
/*
* IHXMutex methods
*/
/* XXXSMPNOW Comments */
STDMETHOD(Lock) (THIS) PURE;
STDMETHOD(TryLock) (THIS) PURE;
STDMETHOD(Unlock) (THIS) PURE;
};
// $Private:
/****************************************************************************
*
* Interface:
*
* IHXFastPathNetWrite
*
* Purpose:
*
* Private interface for high speed UDP output.
*
* IID_IHXFastPathNetWrite:
*
* {00000117-0901-11d1-8B06-00A024406D59}
*
*/
DEFINE_GUID(IID_IHXFastPathNetWrite, 0x00000117, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
0xa0, 0x24, 0x40, 0x6d, 0x59);
#undef INTERFACE
#define INTERFACE IHXFastPathNetWrite
DECLARE_INTERFACE_(IHXFastPathNetWrite, IUnknown)
{
/*
* IUnknown methods
*/
STDMETHOD(QueryInterface) (THIS_
REFIID riid,
void** ppvObj) PURE;
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
STDMETHOD_(ULONG32,Release) (THIS) PURE;
/*
* IHXFastPathNetWrite methods
*
*/
STDMETHOD(FastWrite) (THIS_
const UINT8* pBuffer, UINT32 ulLen) PURE;
};
/****************************************************************************
*
* Interface:
*
* IHXWouldBlockResponse
*
* Purpose:
*
* Get notifications of EWOULDBLOCK conditions.
*
* IID_IHXWouldBlockResponse:
*
* {00000118-0901-11d1-8B06-00A024406D59}
*
*/
DEFINE_GUID(IID_IHXWouldBlockResponse, 0x00000118, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
#undef INTERFACE
#define INTERFACE IHXWouldBlockResponse
DECLARE_INTERFACE_(IHXWouldBlockResponse, IUnknown)
{
/*
* IUnknown methods
*/
STDMETHOD(QueryInterface) (THIS_
REFIID riid,
void** ppvObj) PURE;
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
STDMETHOD_(ULONG32,Release) (THIS) PURE;
/*
* IHXWouldBlockResponse methods
*
*/
/*
* WouldBlock
*
* Return HXR_OK to go into blocked mode, causing a future
* WouldBlockCleared call. HXR_anythingelse to ignore.
*/
STDMETHOD(WouldBlock) (THIS_ UINT32 id) PURE;
STDMETHOD(WouldBlockCleared)(THIS_ UINT32 id) PURE;
};
/****************************************************************************
*
* Interface:
*
* IHXWouldBlock
*
* Purpose:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -