Server端
1、TROCustomSuperTcpServer.IntExecute 在其Create事件里有
fIndyServer := TIdTCPServer.Create(nil);
fIndyServer.OnExecute := IntExecute;
在IdCustomTCPServer.pas单元的TIdListenerThread.Run里调用
2、TROSCServerWorker.DoExecute; 会一直循环直到Client端断开。当Client端有数据请求的时候,会触发TROSCServerWorker.IncomingData事件
3、TROSCServerWorker.IncomingData 会接着触发TROCustomSuperTcpServer.HasData 事件
4、TROCustomSuperTcpServer.HasData 会执行TROInvokerQueueItem.Create 并将创建的对象执行 TROThreadPool.QueueItem
5、TROThreadPool.QueueItem 执行后最终会由TROPooledThread来调用TROInvokerQueueItem.Callback
6、终于在TROInvokerQueueItem.Callback里调用又回到TROCustomSuperTcpServer.DispatchMessage(其实是TROServer.DispatchMessage)
重点参考下图的调用过程
7、XXXX_Invk.pas单元定义的TXXXX_Invoker类是在MainProcessMessage单元里创建的。
function TROMessageDispatcher.ProcessMessage(const aTransport: IROTransport; aRequeststream, aResponsestream: TStream; out oResponseOptions: TROResponseOptions): boolean;
var
lMessage: IROMessage;
begin
lMessage := (MessageIntf as IROMessageCloneable).Clone(); //会创建一个TROBinMessage对象
result := MainProcessMessage(lMessage, aTransport, aRequeststream, aResponsestream, oResponseOptions);
//这里lMessage会被自动设置为 nil 从而Free了由(MessageIntf as IROMessageCloneable).Clone()创建的TROBinMessage对象
//这说明 局部接口变量在过程或函数执行完后会被自动设置成 nil
end;
8、MainProcessMessage函数里有代码来会用户的请求转为调用XXXX_Invk.pas里的相应的方法
-
六六分期app的软件客服如何联系?不知道吗?加qq群【895510560】即可!标题:六六分期
阅读:17981|2023-10-27
-
今天小编告诉大家如何处理win10系统火狐flash插件总是崩溃的问题,可能很多用户都不知
阅读:9571|2022-11-06
-
今天小编告诉大家如何对win10系统删除桌面回收站图标进行设置,可能很多用户都不知道
阅读:8130|2022-11-06
-
今天小编告诉大家如何对win10系统电脑设置节能降温的设置方法,想必大家都遇到过需要
阅读:8512|2022-11-06
-
我们在使用xp系统的过程中,经常需要对xp系统无线网络安装向导设置进行设置,可能很多
阅读:8417|2022-11-06
-
今天小编告诉大家如何处理win7系统玩cf老是与主机连接不稳定的问题,可能很多用户都不
阅读:9310|2022-11-06
-
电脑对日常生活的重要性小编就不多说了,可是一旦碰到win7系统设置cf烟雾头的问题,很
阅读:8379|2022-11-06
-
我们在日常使用电脑的时候,有的小伙伴们可能在打开应用的时候会遇见提示应用程序无法
阅读:7811|2022-11-06
-
今天小编告诉大家如何对win7系统打开vcf文件进行设置,可能很多用户都不知道怎么对win
阅读:8365|2022-11-06
-
今天小编告诉大家如何对win10系统s4开启USB调试模式进行设置,可能很多用户都不知道怎
阅读:7363|2022-11-06
|
请发表评论