TDSTCPServerTransport的Server其实和Indy无关,有关的是IIPTCPServer接口。也就是只要你实现了IIPTCPServer接口,就可以给TDSTCPServerTransport做Server。默认的IIPTCPServer接口的实现者是TIdTCPServerPeer,代码在IndyPeerImpl.pas里。
请看这一行
initialization PeerFactory.RegisterPeer(IPImpId, IIPTCPServer, TIdTCPServerPeer);这里就将IIPTCPServer 和 TIdTCPServerPeer关联起来了。TIdTCPServerPeer有一个TIdTCPServerIP的成员,而TIdTCPServerIP继承自TIdTCPServer。从而和Indy勾上了。
function TDSTCPServerTransport.CreateTcpServer: IIPTCPServer; begin Result := PeerFactory.CreatePeer(IPImplementationID, IIPTCPServer, nil) as IIPTCPServer; end;这里创建IIPTCPServer时,其实PeerFactory根据RTTI,创建了一个TIdTCPServerPeer的实例。
留意一下 CreatePeer的第一个参数IPImplementationID,这个参数是TDSTCPServerTransport的属性,Help文档里啥也没解释,其实EMBT就是打算靠这个来给你做扩展的。缺省情况IPImplementationID为空,对应着了IndyPeerImpl.pas。
没有评论:
发表评论