/***************************************************************************** Copyright (c) netsecsp 2012-2032, All rights reserved. Developer: Shengqian Yang, from China, E-mail: netsecsp@hotmail.com, last updated 05/01/2022 http://asynframe.sf.net Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ import "ITypedef.idl"; cpp_quote("#pragma pack(push, 1)") interface ISpeedController; interface IMemoryPool; interface IThreadPool; interface IThread; interface IOsTime; interface IBuffer; interface IAsynIoOperationFactory; interface IAsynIoOperation; interface IAsynIoDevice; interface IAsynIoBridge; interface IAsynMessageObject; interface IAsynMessageEvents; interface IAsynFrame; interface IAsynFrameThreadFactory; interface IAsynFrameThread; interface InstancesManager; ///////////////////////////////////////////////////////////////////////////////// //系统消息 cpp_quote( "#define AF_EVENT_SYSTEM ( 0 )" ) cpp_quote( "#define AF_EVENT_APPID0 ( 1 )" ) cpp_quote( "#define AF_TIMER ( 2 )" ) //AF_TIMER Timerid X 0 ///////////////////////////////////////////////////////////////////////////////// cpp_quote( "#define AF_IOMSG_NOTIFY ( 5 )" ) //AF_IOMSG_NOTIFY X lAction IAsynIoOperation cpp_quote( "#define AF_EVENT_NOTIFY ( 6 )" ) //AF_EVENT_NOTIFY pObject X X cpp_quote( "#define AF_QUERY_RESULT ( 7 )" ) //AF_QUERY_RESULT pObject X X ///////////////////////////////////////////////////////////////////////////////// //应用消息: 最小值是10000 cpp_quote( "#define AF_EVENT_APPID1 (10000)" ) cpp_quote( "#define AF_EVENT_APPID2 (10001)" ) cpp_quote( "#define AF_EVENT_APPID3 (10002)" ) cpp_quote( "#define AF_EVENT_APPID4 (10003)" ) ///////////////////////////////////////////////////////////////////////////////// //错误代码 cpp_quote( "#define AE_RESET ( 1 )" ) //1.IO复位: 对于文件读请求来说表示已到文件结尾/对于网络TCP读请求来说表示已经收到0字节,即:收到fin报文 //2.dtp.UDP丢弃 ///////////////////////////////////////////////////////////////////////////////// [// 获取/设置Object接口 object, uuid(F8CE1A45-9316-430a-BAE5-D905201CC180), helpstring("IObjectHolder Interface"), pointer_default(unique) ] interface IObjectHolder : IUnknown { HRESULT Get( [in ]int32_t method, [in ]uint32_t lparam2, [in ]REFIID riid, [out, iid_is(riid)]void** ppObject ); HRESULT Set( [in ]int32_t method, [in ]uint32_t lparam2, [in ]IUnknown* pObject ); }; ///////////////////////////////////////////////////////////////////////////////// [// 显式继承:IObjectHolder,用于设置/获取后继限速器:调用AddPostIoBytes时,能够递归执行 object, uuid(6A420A5D-1198-44fc-ACFF-7BEC934FE7D5), helpstring("ISpeedController Interface"), pointer_default(unique) ] interface ISpeedController : IObjectHolder { //计算当前速度限制器能够提交的字节数,允许pCanIoBytes等于NULL //返 回 值:S_OK -表示当前可以发送,则pCanIoBytes>0 // S_FALSE-表示当前不能发送,则pCanIoBytes=0 HRESULT CanPostIoBytes( [in ]uint32_t lDatIoBytes, [out]uint32_t* pCanIoBytes ); ///////////////////////////////////////////////////////////////////////////// HRESULT AddPostIoBytes( [in ]uint32_t lDatIoBytes ); HRESULT GetPostIoBytes( [out]uint64_t* pDatIoBytes, [out]uint32_t* pCurIoSpeed ); HRESULT Reset(); //清空数据, 不递归 ///////////////////////////////////////////////////////////////////////////// //获取速度阀值,单位:B/s HRESULT GetMaxSpeed( [in ]BOOL loop, [out]uint32_t* pMaxIoSpeed ); //设置速度阀值,单位:B/s HRESULT SetMaxSpeed( [in ]uint32_t lMaxIoSpeed ); }; ///////////////////////////////////////////////////////////////////////////////// [// 提供时间接口 object, uuid(9508E64D-1F80-43fd-9E27-D39D20394ECF), helpstring("IOsTime Interface"), pointer_default(unique) ] interface IOsTime : IUnknown { HRESULT GetTimeofday( [out]uint64_t* time ); /*系统时间, 单位:毫秒*/ HRESULT GetTickcount( [out]uint64_t* time ); /*相对时间, 单位:微秒, 返回S_FALSE表示精度不足*/ }; ///////////////////////////////////////////////////////////////////////////////// [// 消息通知接口 object, uuid(636E17D7-3713-4a36-98A7-6B0971476067), helpstring("IAsynMessageEvents Interface"), pointer_default(unique) ] interface IAsynMessageEvents : IUnknown { //返 回 值:E_NOTIMPL-表示消息没有被处理 HRESULT OnMessage( [in ]uint32_t message, [in ]uint64_t lparam1, [in ]uint64_t lparam2, [in, out]IUnknown** object ); }; [ object, uuid(58EDD852-2FCC-4ea8-8069-3DF6E1D96866), helpstring("IAsynMessageObject Interface"), pointer_default(unique) ] interface IAsynMessageObject : IUnknown { HRESULT Attach( [in ]IUnknown* observer, [in ]uint64_t subject ); HRESULT Detach( [in ]IUnknown* observer ); ///////////////////////////////////////////////////////////////////////////// HRESULT Notify( [in ]STRING* subject, [in ]uint32_t message, [in ]uint64_t lparam1, [in ]uint64_t lparam2, [in ]IUnknown* object ); }; ///////////////////////////////////////////////////////////////////////////////// [// 消息泵 object, uuid(5D5B45AA-E96D-4856-B029-DC83EE2C21BB), helpstring("IThreadMessagePump Interface"), pointer_default(unique) ] interface IThreadMessagePump : IUnknown { //等待消息:阻塞nTimeout直到收到消息,允许nTimeout=0,单位:微秒, 参数events必须等于0 //返 回 值:S_OK -表示成功提取消息 // S_FALSE-表示在等待时间里没有消息或发生中断事件 // E_ABORT-表示退出消息循环 HRESULT WaitMessage( [in ]handle events, [in ]uint64_t nTimeout ); //分发消息: 若异步消息=iop时,则返回S_OK HRESULT PumpMessage( [in ]handle pdatas ); ///////////////////////////////////////////////////////////////////////////// //查询状态 //返 回 值:S_OK -表示正常运行 // S_FALSE-表示退出, 即: WaitMessage返回E_ABORT后状态 HRESULT QueryStatus( ); }; [// 工作线程接口 object, uuid(B9811E66-30E4-4D9C-BF5F-15EC25293840), helpstring("IThread Interface"), pointer_default(unique) ] interface IThread : IUnknown { HRESULT ModifyThreadPriority( [in ]int32_t priority ); ///////////////////////////////////////////////////////////////////////////// HRESULT Post( [in ]IAsynIoOperation* pSrcAsynIoOperation, [in ]IAsynMessageEvents* events, [in ]uint32_t message, [in ]uint64_t lparam1, [in ]uint64_t lparam2, [in ]IUnknown* object ); }; [// 线程池, 显式继承:IThread, uniqueopspool线程池隐含继承IObjectHolder object, uuid(91209092-33B1-4ED1-A40E-0D162FA0938D), helpstring("IThreadPool Interface"), pointer_default(unique) ] interface IThreadPool : IThread { }; [// 内存池,显式继承:IAsynMessageEvents, 用于通知申请/释放内存请求 object, uuid(33A4526F-4260-4a9d-B9BE-BACBFEAF0D62), helpstring("IMemoryPool Interface"), pointer_default(unique) ] interface IMemoryPool : IAsynMessageEvents { HRESULT Set( [in ]BOOL Thread, [in ]uint32_t nBlkSize, [in ]uint64_t nMaxSize ); HRESULT Pop( [out]IBuffer** ppBuffer ); }; [// 提供IAsynIoOperation内部数据接口:必须由InstancesManager创建 object, uuid(4CB3BD65-B69F-4d25-82AA-10D72257C61D), helpstring("IBuffer Interface"), pointer_default(unique) ] interface IBuffer : IUnknown { //返 回 值:S_OK -表示共享内存接口 // S_FALSE-表示普通内存接口 HRESULT GetObject( [out]handle* ppObject, [out]uint64_t* pParams ); HRESULT SetObject( [in ]handle pObject, [in ]uint64_t lParams ); ///////////////////////////////////////////////////////////////////////////// //注意函数:不会复位Offset HRESULT NewBuffer( [in ]BYTE* pFillBuffer, [in ]uint32_t lFillOffset, [in ]uint32_t lFillSize, [in ]uint32_t lBufferSize ); HRESULT GetBuffer( [out]BYTE** ppDataBuffer, [out]uint32_t* pDataSize ); ///////////////////////////////////////////////////////////////////////////// HRESULT Reference( [in ]uint32_t Offset, [in ]uint32_t size, [out]IBuffer** ppBuffer ); ///////////////////////////////////////////////////////////////////////////// HRESULT GetOffset( [out]uint32_t* Offset ); HRESULT SetOffset( [in ]uint32_t Offset ); HRESULT Move( [in ]int32_t val ); //在当前位置向前/后移动offset ///////////////////////////////////////////////////////////////////////////// HRESULT AdjustDataSize( [in ]uint32_t DataSize ); ///////////////////////////////////////////////////////////////////////////// HRESULT GetExtraBuffer( [in ]uint32_t Index, [out]IBuffer** ppBuffer ); HRESULT SetExtraBuffer( [in ]uint32_t Index, [in ]IBuffer* pBuffer ); HRESULT RemoveExtraBuffers(); }; [// 提供命令接口 object, uuid(B090FA6F-9712-4fd7-A9C2-4E5D114D7479), helpstring("IOsCommand Interface"), pointer_default(unique) ] interface IOsCommand : IUnknown { HRESULT Execute( [in ]IUnknown* output, [in ]STRING name, [in, size_is(argc)]STRING* argv, [in ]uint32_t argc, [in ]IKeyvalSetter* env, [in ]IUnknown* object ); }; [// 异步消息接口 object, uuid(0C34146C-C1CE-4c8c-A67F-32039009FAD7), helpstring("IAsynIoOperation Interface"), pointer_default(unique) ] interface IAsynIoOperation : IObjectHolder { //获取所绑定的IAsynFrameThread实例,允许ppAsynFrameThread等于NULL //返 回 值:S_OK -表示获取成功 // S_FALSE-表示获取成功,但IAsynIoOperation已被取消 HRESULT GetAsynFrameThread( [out]IAsynFrameThread** ppAsynFrameThread ); ///////////////////////////////////////////////////////////////////////////// //查询状态 //返 回 值:S_OK -表示空闲 // S_FALSE-表示使用 // E_ABORT-表示废弃 HRESULT QueryStatus(); ///////////////////////////////////////////////////////////////////////////// //注意切勿保存Io指针,因为在处理IO过程可能会发生改变 HRESULT NewIoBuffer( [in ]uint32_t index, [in ]BYTE* pFillBuffer, [in ]uint32_t lFillOffset, [in ]uint32_t lFillSize, [in ]uint32_t lNewBufferSize, [out]BYTE** ppBuffer ); HRESULT GetIoBuffer( [in ]uint32_t index, [out]IBuffer** ppObject, [out]BYTE** ppBuffer ); HRESULT SetIoBuffer( [in ]uint32_t index, [in ]IBuffer* pObject ); ///////////////////////////////////////////////////////////////////////////// HRESULT GetOsBuffer( [in ]uint32_t index, [out]handle* ppBuffer ); ///////////////////////////////////////////////////////////////////////////// HRESULT GetOpParams( [out]uint32_t* message, [out]uint64_t* pParam1, [out]uint64_t* pParam2 ); HRESULT SetOpParams( [in ]uint32_t message, [in ]uint64_t* pParam1, [in ]uint64_t lparam2 ); HRESULT SetOpParam1( [in ]uint64_t lparam1 ); ///////////////////////////////////////////////////////////////////////////// //注意函数:只能操作一个IBuffer的情况,设置lUseIoNum=1 HRESULT GetIoParams( [out]uint32_t* pSumBytes, [out]uint32_t* pMinBytes ); HRESULT SetIoParam1( [in ]uint32_t lSumBytes ); HRESULT SetIoParams( [in ]uint32_t lTransferedBytes, [in ]uint32_t lSumBytes, [in ]uint32_t lMinBytes ); //注意函数:可以操作多个IBuffer的情况 HRESULT NewBufferIovectors( [in ]uint32_t lCount, [out]handle* ppBuffer ); HRESULT SetBufferIovectors( [in ]STRING* pIovector, [in ]uint32_t lCount, [in ]uint32_t lMinBytes ); HRESULT AddBufferIovectors( [in ]STRING* pIovector, [in ]uint32_t lCount, [in ]uint32_t lAddBytes ); ///////////////////////////////////////////////////////////////////////////// //读取数据,允许pCopyBytes等于NULL //返 回 值:S_OK -表示缓冲区还可以继续读 // S_FALSE-表示缓冲区已经用完 HRESULT ReadBuffers( [in, out]STRING* pSrcIovector, [in, out]uint32_t* count, [out]uint32_t* pCopyBytes, [out]uint32_t* pMinBytes ); //拷贝数据,允许pCopyBytes/pStayBytes/pMinBytes等于NULL,注意参数:bIsDGRAM!=0表示段数据 //返 回 值:S_OK -表示pDstAsynIoOperation缓冲区还可以继续写入 // S_FALSE-表示pDstAsynIoOperation缓冲区已经用完,pStayBytes存储剩余数据长度 HRESULT Copy( [in ]BOOL bIsDGRAM, [in ]IAsynIoOperation* pDstAsynIoOperation, [out]uint32_t* pCopyBytes, [out]uint32_t* pMinBytes, [out]uint32_t* pStayBytes ); ///////////////////////////////////////////////////////////////////////////// //返 回 值:S_OK -表示lSumBytes>0 // S_FALSE-表示lSumBytes=0 HRESULT GetCompletedResult( [out]uint32_t* pErrorCode, [out]uint32_t* pTransferedBytes, [out]uint32_t* pReservedBytes ); //副 作 用:当lErrorCode!=NO_ERROR,pCompletedObject=NULL //返 回 值:E_ACCESSDENIED-表示已被取消 HRESULT SetCompletedResult( [in ]uint32_t lErrorCode ); ///////////////////////////////////////////////////////////////////////////// //设置传输字节数,一般用于包传输或者直接设置传输结果,同时设置lSumBytes/lMinBytes/lUseIoNum=0 HRESULT SetTransferedBytes( [in ]uint32_t lTransferedBytes ); //增加传输字节数 //返 回 值:S_OK -表示lSumBytes>0 // S_FALSE-表示lSumBytes=0 HRESULT AddTransferedBytes( [in ]uint32_t lTransferedBytes ); ///////////////////////////////////////////////////////////////////////////// //注意参数:bTaked=TRUE,相当于获取对象后再调用SetCompletedObject(NULL) HRESULT GetCompletedObject( [in ]BOOL bTaked, [in ]REFIID riid, [out, iid_is(riid)]void** ppObject ); //允许pUnknown等于NULL HRESULT SetCompletedObject( [in ]IUnknown* pObject ); }; [// 创建IAsynIoOperation接口 object, uuid(6655485B-7257-4e33-8714-120911D620EF), helpstring("IAsynIoOperationFactory Interface"), pointer_default(unique) ] interface IAsynIoOperationFactory : IUnknown { //注意参数:pdatas只能是IAsynIoOperation/IAsynFrame HRESULT CreateAsynIoOperation( [in ]IUnknown* pdatas, [in ]uint32_t param1, [in ]uint32_t param2, [in ]REFIID riid, [out, iid_is(riid)]void** ppObject ); }; [// 提供数据传输链接口 object, uuid(51DAEFEC-4B50-43C5-BEB1-266FD61362A3), helpstring("IDataTransmit Interface"), pointer_default(unique) ] interface IDataTransmit : IUnknown { HRESULT Write( [in ]IUnknown* pdatas/*具体模块定义*/, [in ]handle param1, [in ]uint64_t param2/*具体模块定义,一般为零*/ ); }; [// 提供数据读写的接口 object, uuid(CE91B4EF-B499-4778-AF25-2D3358DC5BA1), helpstring("IDataRwInvoke Interface"), pointer_default(unique) ] interface IDataRwInvoke : IUnknown { HRESULT Read( [in ]IAsynIoOperation* pAsynIoOperation ); HRESULT Write( [in ]IAsynIoOperation* pAsynIoOperation ); }; [// 提供数据内容的接口: dns/dlna/bonjour object, uuid(BC3598EB-758F-4363-BA80-E7263934CD9D), helpstring("IDataProvider Interface"), pointer_default(unique) ] interface IDataProvider : IUnknown { //查询数据, 若object是IAsynMessageEvents, 则查询结果事件: AF_QUERY_RESULT self param2 result HRESULT Queryres( [in ]IUnknown* pdatas, [in ]uint64_t param2, [in ]IUnknown* object ); //通告数据 HRESULT Announce( [in ]IUnknown* pdatas, [in ]uint32_t action ); }; [// 显式继承:IObjectHolder,隐含继承:IDataTransmit/IDataRwInvoke object, uuid(CBFDC32B-6AC7-4dd6-BB9D-E8248366249A), helpstring("IAsynIoDevice Interface"), pointer_default(unique) ] interface IAsynIoDevice : IObjectHolder { //返 回 值:S_OK -已经Open // S_FALSE-尚未Open HRESULT IsOpened( [out]STRING* pDeviceName ); //只有流类型才支持自动Read/Write操作,允许pBlockSize=NULL,pBlockSize指示设备最佳分组大小 //返 回 值:S_OK -流类型 // S_FALSE-块类型 HRESULT IsStream( [out]uint32_t* pBlockSize ); ///////////////////////////////////////////////////////////////////////////// //返 回 值:S_FALSE-表示获取的是伪设备句柄或者已被关闭 //lType=Io_recv表示获取设备读端的句柄 //lType=Io_send表示获取设备写端的句柄 HRESULT GetDeviceHandle( [in ]uint32_t lType, [out]handle* ppDeviceHandle ); ///////////////////////////////////////////////////////////////////////////// //返 回 值:S_OK -IO操作已投递,等待通知完成操作,可以继续投递 // S_FALSE-IO操作已悬挂,等待通知完成操作 // 其他值表示出错 HRESULT Read( [in ]IAsynIoOperation* pAsynIoOperation ); //返 回 值:S_OK -IO操作已投递,等待通知完成操作,可以继续投递 // S_FALSE-IO操作已悬挂,等待通知完成操作 // 其他值表示出错 HRESULT Write( [in ]IAsynIoOperation* pAsynIoOperation ); ///////////////////////////////////////////////////////////////////////////// HRESULT Close( [in ]uint32_t reserved/*具体模块定义,一般为零*/ ); ///////////////////////////////////////////////////////////////////////////// //Attach设备句柄 //lAttachType: 0-主动激活句柄 1-被动激活句柄 //bCopyHandle: TRUE 表示引用设备句柄,调用Close不会真正关闭设备句柄 //返 回 值:S_OK-执行成功,若pAsynIoOperation!=NULL,则异步通知Attach结果 // 其他值表示出错 HRESULT Attach( [in ]IAsynFrameThread* pAsynFrameThread, [in ]uint32_t lAttachType, [in ]BOOL bCopyHandle, [in ]handle pRecvDeviceHandle, [in ]handle pSendDeviceHandle, [in ]IAsynIoOperation* pAsynIoOperation ); //Detach设备句柄,参数level表示递归次数,当level=0时不能调用下一级IAsynIoDevice.Detach() //返 回 值:S_OK -成功执行 // S_FALSE-已经执行 // 其他值表示出错 HRESULT Detach( [in ]uint32_t level ); ///////////////////////////////////////////////////////////////////////////// //注意实现:直接引用ISpeedController/IAsynFrameThread对象 //注意参数:pReserved必须等于NULL HRESULT Clone( [in ]IUnknown* lpReserved, [in ]REFIID riid, [out, iid_is(riid)]void** ppObject ); }; [// 显式继承:IObjectHolder,隐含继承:IAsynIoObject,实现设备之间桥接,产生事件:AF_QUERY_RESULT(IAsynIoBridge/lTransferedBytes)/AF_EVENT_NOTIFY(IAsynIoBridge/lErrorCode) object, uuid(7BA6B23B-FF8B-4b2f-9D6F-E0B5B1B5B630), helpstring("IAsynIoBridge Interface"), pointer_default(unique) ] interface IAsynIoBridge : IObjectHolder { //激活关联,允许events=NULL HRESULT Invoke( [in ]uint64_t unused, [in ]IAsynMessageEvents* events ); }; ///////////////////////////////////////////////////////////////////////////////// [// 显式继承: IObjectHolder, 提供设置/获取IOsMempool object, uuid(9F16D983-8774-4daa-9239-E3B2F9E9E199), helpstring("IAsynFrame Interface"), pointer_default(unique) ] interface IAsynFrame : IObjectHolder {// 消息框架 HRESULT GetAsynFrameThread( [out]IAsynFrameThread** ppAsynFrameThread ); ///////////////////////////////////////////////////////////////////////////// HRESULT SendMessage( [in ]uint32_t message, [in ]uint64_t lparam1, [in ]uint64_t lparam2, [in ]IUnknown* object ); //允许被Shutdown/Cancel被取消 //checkthread=1表示当检测执行环境到处于IAsynFrameThread线程时直接回调, 否则强制异步执行 HRESULT PostMessage( [in ]BOOL checkthread, [in ]uint32_t message, [in ]uint64_t lparam1, [in ]uint64_t lparam2, [in ]IUnknown* object ); ///////////////////////////////////////////////////////////////////////////// HRESULT NewIoBuffer( [out]IBuffer** ppBuffer ); ///////////////////////////////////////////////////////////////////////////// //定 时 器:禁止timerid=-1, iTimeout<0表示单位微秒,否则表示单位毫秒; bCycled=0表示一次性定时器 HRESULT CreateTimer( [in ]uint64_t timerid, [in ]uint64_t lparam2, [in ]int32_t iTimeout, [in ]BOOL bCycled ); //timerid=-1表示删除所有的定时器 HRESULT DeleteTimer( [in ]uint64_t timerid ); //////////////////////////////////////////////////////////////////////////// //注意参数:iTimeout<0表示单位微秒,否则表示单位毫秒; HRESULT Sleep( [in ]int32_t iTimeout ); ///////////////////////////////////////////////////////////////////////////// //注意参数:lparam1=0表示使用普通内存/param1=1表示使用共享内存 HRESULT CreateAsynIoOperation( [in ]uint32_t lparam1, [in ]uint32_t lparam2, [out]IAsynIoOperation** ppAsynIoOperation ); //返 回 值:S_OK -表示取消成功 // S_FALSE-表示异步取消 HRESULT CancelAsynIoOperation( [in ]IAsynIoOperation* pAsynIoOperation ); ///////////////////////////////////////////////////////////////////////////// HRESULT Cancel( [in ]uint32_t how ); //how: 0-取消空闲异步消息 1-取消使用异步消息(包括定时器) 2-取消所有 ///////////////////////////////////////////////////////////////////////////// //加入/弹出空闲池操作 HRESULT Add( [in ]IAsynIoOperation* lpAsynIoOperation, [in ]uint32_t lparam2 ); HRESULT Pop( [in ]uint32_t lparam2, [out]IAsynIoOperation** ppAsynIoOperation ); //触发事件:AF_QUERY_RESULT IAsynFrame lparam2 ppAsynIoOperation ///////////////////////////////////////////////////////////////////////////// //主动释放内部资源: IAsynFrame对象内部数据已被销毁 HRESULT Shutdown(); }; ///////////////////////////////////////////////////////////////////////////////// [// 框架线程, 显式继承:IThread,隐含继承: IAsynMessageObject,扩展处理windows消息, 没有继承IObjectHolder object, uuid(0B5E89FF-D258-4443-8096-C3BCCB2DDCBA), helpstring("IAsynFrameThread Interface"), pointer_default(unique) ] interface IAsynFrameThread : IThread { //判断是否跟自己处于同一线程,threadid=0表示当前线程 HRESULT InThread( [in ]uint32_t threadid ); ///////////////////////////////////////////////////////////////////////////// //同步调度,message>=AF_IOMSG_NOTIFY, 可以被pSrcAsynIoOperation取消 HRESULT Dispatch( [in ]IAsynIoOperation* pSrcAsynIoOperation, [in ]IAsynMessageEvents* events, [in ]uint32_t message, [in ]uint64_t lparam1, [in ]uint64_t lparam2, [in ]IUnknown* object ); ///////////////////////////////////////////////////////////////////////////// //关联pSrcAsynIoOperation到pDstAsynIoOperation,同时设置pSrcAsynIoOperation的操作超时时长,注意:操作完成后自动解除绑定关系, 允许pDstAsynIoOperation=0/iTimeout=0 HRESULT BindAsynIoOperation( [in ]IAsynIoOperation* pSrcAsynIoOperation, [in ]IAsynIoOperation* pDstAsynIoOperation, [in ]uint32_t mode, [in ]int32_t iTimeout ); ///////////////////////////////////////////////////////////////////////////// HRESULT PostAsynIoOperation( [in ]IAsynIoOperation* pDstAsynIoOperation ); ///////////////////////////////////////////////////////////////////////////// HRESULT CreateAsynFrame( [in ]IAsynMessageEvents* events, [in ]uint32_t lMaxIdleSize, [out]IAsynFrame** ppAsynFrame ); //管道,bDuplex=0: 表示单向管道 bDuplex=1: 表示双向管道,禁止pSrcAsynIoDevice/target=0 HRESULT CreateAsynIoBridge( [in ]IAsynIoDevice* pSrcAsynIoDevice, [in ]IUnknown* target, [in ]BOOL bDuplex, [out]IAsynIoBridge** ppAsynIoBridge ); }; [// 单一实例,提供创建IAsynFrameThread接口 object, uuid(1A00D0BF-C0A0-455b-8A86-83AB6ED7630D), helpstring("IAsynFrameThreadFactory Interface"), pointer_default(unique) ] interface IAsynFrameThreadFactory : IUnknown { HRESULT QueryThread( [in ]uint32_t threadid, [out]IAsynFrameThread** ppThread ); //查询线程, 允许ppThread=null,threadid=0表示查询当前线程, 返回S_OK表示存在IAsynFrameThread ///////////////////////////////////////////////////////////////////////////// HRESULT CreateAsynFrameThread( [in ]handle hThread, [in ]BOOL window, [in ]uint32_t coretype, [in ]IAsynMessageEvents* events, [out]IAsynFrameThread** ppAsynFrameThread ); }; ///////////////////////////////////////////////////////////////////////////////// [// 单一实例,实例管理器,显式继承: IAsynMessageObject, 提供注册/注销接收创建实例事件功能 object, uuid(AB2CD54D-2BCB-41c8-9757-99B43F202024), helpstring("InstancesManager Interface"), pointer_default(unique) ] interface InstancesManager : IAsynMessageObject { //通过riid创建实例: 已经实现以下的接口 // 1、ISpeedController // 2、IBuffer/IOsTime/IDataRwInvoke/ICommand/IDataTransmit // 3、IMemoryPool // 4、IThreadPool/IThread/IAsynFrameThread HRESULT NewInstance( [in ]IUnknown** param1, [in ]uint64_t param2, [in ]REFIID riid, [out, iid_is(riid)]void** ppObject ); //获取实例 HRESULT GetInstance( [in ]STRING Name, [in ]REFIID riid, [out, iid_is(riid)]void** ppObject ); //注册/注销实例,允许lpObject等于NULL HRESULT SetInstance( [in ]STRING Name, [in ]IUnknown* lpObject ); /////////////////////////////////////////////////////////////// //加载模块, Owner格式: com.app. | HRESULT Require( [in ]STRING Owner ); /////////////////////////////////////////////////////////////// //Ident允许nil, 格式: depend/owner, 可选实现DllCanUnloadNow接口 HRESULT Observe( [in ]STRING Ident, [in ]handle Soctx ); /////////////////////////////////////////////////////////////// //执行任务 HRESULT Execute( [in ]STRING Owner, [in ]IUnknown* pParam1, [in ]STRING lparam2, [in ]IUnknown* object ); }; ///////////////////////////////////////////////////////////////////////////////// [// 框架插件 object, uuid(E28ADF6E-BC0E-4561-88DF-E3E610C59B8F), helpstring("IAsynFramePlugin Interface"), pointer_default(unique) ] interface IAsynFramePlugin : IUnknown { HRESULT Initialize( [in ]InstancesManager* pInstancesManager, [in ]IAsynMessageEvents* events, [in ]IKeyvalSetter *param2 ); HRESULT CanUnloadNow(); //查询可否卸载 HRESULT Shutdown(); //主动释放资源 }; cpp_quote("#pragma pack(pop)")