异想天开

What's the true meaning of light, Could you tell me why

openrtmfp源码阅读1

日期:2014-10-22 10:08:35
  
最后更新日期:2014-11-24 21:04:46
1 RTMFPServer是最重要的一个类,该类实现了打洞的p2phandshake的函数。Server类是最后的包装类。当然还有另外一个类CumulusServer,不过这个类简单,只是方便在main函数启动Server类实例。RTMFPServer带参数的start方法调用Startable::start方法,启动一个线程,调用run方法。run方法里_mainSockets会add一个socket。add socket时,设置socket的handle为RTMFPServer的自身实例。也就是读客户端udp包的socket。

add套接字后,会判断线程是否启动,若没有启动,则startable::start启动它。接着调用socketmanager::run方法。run方法里面push要监听的事件,这里会阻塞一段时间,唤醒后,会调用task::waithandle方法。task::waithandle方法里面会_handler.waitHandle(*this)。task的this指针指向的是MainSockets对象。所有的这些调用都是在MainSockets里面可见的。MainSockets对象既是Task类型,又是TaskHandler类型。TaskHandler里面的waitHandle(Task),传给requestHandle(),该函数为虚函数,父类MainSockets实现了该函数,直接调用giveHandle函数。giveHandle函数里面调用了_pTask指针的handle函数。所以兜一个圈子后,调用socketmanager的handler方法处理socket的onread方法。
PS:这里的确很绕,为什么要兜这么一圈子,为啥不直接,阻塞唤醒后,直接执行hander即可。