双端：请求与答复
=================

上篇说到游戏流程的运行，穿插在游戏流程中的自然少不了玩家们频繁的决策步骤。
是否发动技能，出牌，选择武将等等…… 本文讨论这些决策是如何发起、如何被玩家的设备\
接收与处理，以及玩家进行操作后的诸多问题。

总的来说，我们关心的是以下两个组件：

- ``Request`` 类，用于服务端。它负责与Client沟通，以及作为各种askFor函数的底层。
- ``RequestHandler`` 类，用于客户端。顾名思义就是为了处理某个Request。\
  它负责与Server沟通，以及与GUI沟通。

服务端：Request
-----------------

客户端：RequestHandler
--------------------------

向Server发送reply不用多说，重点在于它需要模拟出客户端的UI界面（如果确实存在UI界面，\
那么还需要将数据发送到真实的UI界面中），这个“模拟”包括控制各种模拟UI组件的\
enabled、selected属性等等。真实的UI只负责实际显示，如此就将UI的显示逻辑转移到了Lua中。

RequestHandler的工作流程大约如下：

.. todo::

   对下面的这一套，画个流程图

- 客户端收到需要创建RequestHandler的消息
- 客户端创建RequestHandler
- RequestHandler创建完之后调用notifyUI，将变化反映到实际的界面
- 每当ui产生操作（点击等等）都会触发一次和RequestHandler有关的调用，调用的最后UI状态会变化，并再次通过notifyUI反映到客户端
