UI 协议事件派发机制的修改

2016-12-04  本文已影响0人  月刃隐现

修改的原因


实现原理

*当上述两个代理出发之后会执行下面的Lambda函数

    auto ProcessLambda = [=](UObject* Protocol, const TCHAR* Prefixes)
    {
        FString ClassName, RightName;
        Protocol->GetClass()->GetName().Split(TEXT("_C"), &ClassName, &RightName);
        FName FunctionName = FName(*(FString::Printf(TEXT("%s%s"), Prefixes, *ClassName)));
        UFunction* Function = Excuter->FindFunction(FunctionName);
        if (Function)
        {
            void* Parameters = (void*)(&Protocol);
            Excuter->ProcessEvent(Function, Parameters);
        }
    };

OnProtocolReceivedDelegate代理的Prefixes 是OnRecvPostProtocolRecvDelegate的Prefixes 是PostRecv
所以如果一个注册了两个代理的对象类中如果含有Prefixes +协议名函数名的函数,那么该函数将会执行。相当于对协议的抵达做了相应的处理。
函数名字举例:OnRecvActivationKeyRspPostRecvActivationKeyRsp


用法


uml图: https://www.processon.com/view/link/584627dee4b0e742e4a9dcdd

上一篇 下一篇

猜你喜欢

热点阅读