美文网首页
UI 协议事件派发机制的修改

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

作者: 月刃隐现 | 来源:发表于2016-12-04 20:23 被阅读0次

修改的原因

  • 我们目前的版本里面 大量来自协议的Dispatcher严重影响代码的阅读和维护
  • 事件的逻辑处理和数据处理在框架层并没有明确分开
  • 事件派发能够有效的减少直接引用

实现原理

  • 在MobileZGameInstance中包含两个代理函数:OnProtocolRecvDelegate和PostProtocolRecvDelegate。当网络协议完成从protocol buffer转化为ProtocolTemplate之后会连续执行:
    OnProtocolReceivedDelegate().Broadcast(ProtocolObject); PostProtocolRecvDelegate().Broadcast(ProtocolObject); ProtocolObject->Process(Ins)

  • 我们在c++代码中完成他们的自动注册。manager被默认为是在创建的时候自动注册OnProtocolRecvDelegate,manager销毁的时候清理代理, 所以可以认为Manager的注册是永久的,UI则默认只注册PostProtocolRecvDelegate,而且UI这边是在Construct的时候进行自动注册,Destruct的时候默认取消注册,可以认为UI只会在显示的时候处理协议。GameInstance Destroy的时候取消所有的注册,

*当上述两个代理出发之后会执行下面的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


用法

  • 如果一个类希望能够绑定上述的两个代理,需要实现接口类IProtocolProcessInterface
  • 需要在适当的地方调用RegisterDelegateUnRegisterDelegate
  • 按照需要实现自己的方法OnRecv+Protocol,既可以在c++中也可以在BP中实现该函数,c++中使用UFUNCTION标记函数,BP中直接声明函数即可。

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

相关文章

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

    修改的原因 我们目前的版本里面 大量来自协议的Dispatcher严重影响代码的阅读和维护 事件的逻辑处理和数据处...

  • ViewRootImpl & ViewGroup &am

    ViewRootImpl & ViewGroup & View 触摸事件派发机制源码分析 Android 6.0 ...

  • Swift派发机制

    Swift之所以速度比Object-c快,我觉得跟他的派发机制有关。下面我们聊聊Swift的派发机制。 派发机制分...

  • Swift 函数派发机制

    编程语言 函数派发机制有三种: 【原文链接】 直接派发 函数表派发 消息机制派发 函数派发是程序判断使用哪种途径去...

  • android的一些机制

    handler机制 事件分发机制 AsyncTask 注意更新UI只能在onPostExecute中; async...

  • Android下的消息机制

    Android下的消息机制 子线程不可以修改UI 只有主线程才可以修改UI 如果子线程想要更新UI就必须利用消息机...

  • 浅谈Swift派发机制

    函数的派发机制分为:静态派发(直接派发)、函数表派发、消息派发 1、Swift中所有ValueType(值类型:S...

  • Fe-9 http&ajax

    1, HTTP 协议 和 AJAX2, DOM 事件机制, 事件冒泡和事件捕获 网址组成(四部分)协议 ...

  • Android高级开发

    一:高级UI 自定义控件 UI绘制流程 绘图 特效 事件传递机制 事件冲突 Material Design 兼容s...

  • iOS知识复习笔记(16)---swift相关

    一、函数的派发方式 swift函数的派发机制有三类:static直接派发(静态)派发、table函数派发,mess...

网友评论

      本文标题:UI 协议事件派发机制的修改

      本文链接:https://www.haomeiwen.com/subject/wqhqmttx.html