public void OnFreamAsyn(SCFrameNotify frameAsyn)
 {
     if (!_isGameing)
     {
         return;
     }
     // 无操作的帧, 直接跑过去
     if (_nextFrameSetp < frameAsyn.CurrentFrame)
     {
         TickerManager.Instance.DriveToTickCount(frameAsyn.CurrentFrame - 1);
         _nextFrameSetp = frameAsyn.CurrentFrame;
     }
     // 这个是我们需要的
     if (_nextFrameSetp != frameAsyn.CurrentFrame)
     {
         return;
     }
     // 按按键
     foreach (CSFrameNotify frameControlList in frameAsyn.Keys)
     {
         if (_inputListeners.ContainsKey(frameControlList.Uin))
         {
             IInputListener listener = _inputListeners[frameControlList.Uin];
             foreach (var con in frameControlList.Keys)
             {
                 #region 解析按键
                 ushort key  = (ushort)con;
                 ushort type = (byte)(key & 0x3);
                 key >>= 2;
                 ushort value = (ushort)(key & 0x3FF);
                 key >>= 10;
                 key  &= 0xF;
                 #endregion
                 if (key == InputDefine.DIRCTION_KEY)
                 {
                     float ang = value;
                     if (CommonFunction.GreatOrEqualZero(ang - 180f))
                     {
                         ang -= 360f;
                     }
                     listener.OnMove(ang, (MoveType)type);
                 }
                 else
                 {
                     if (type > 0)
                     {
                         listener.OnFunctionKeyDown(key);
                     }
                     else
                     {
                         listener.OnFunctionKeyUp(key);
                     }
                 }
             }
         }
     }
     _nextFrameSetp = frameAsyn.NextFrame;
     TickerManager.Instance.DriveToTickCount(_nextFrameSetp - 1);
 }
 public override void DeSerialize(MemoryStream stream)
 {
     _data = SCFrameNotify.Parser.ParseFrom(stream);
 }