/// <summary>
        /// on received
        /// </summary>
        /// <param name="session"></param>
        /// <param name="cmdInfo"></param>
        public override void OnReceived(UdpSession session, TCommandInfo cmdInfo)
        {
            if (string.IsNullOrEmpty(cmdInfo.CmdName))
            {
                return;
            }

            ThreadPool.QueueUserWorkItem(_ =>
            {
                Command.IUdpCommand <TCommandInfo> cmd = null;
                this._dicCommand.TryGetValue(cmdInfo.CmdName, out cmd);
                try
                {
                    if (cmd == null)
                    {
                        this.HandleUnKnowCommand(session, cmdInfo);
                    }
                    else
                    {
                        cmd.ExecuteCommand(session, cmdInfo);
                    }
                }
                catch (Exception ex)
                {
                    this.OnCommandExecException(session, cmdInfo, ex);
                }
            });
        }
        /// <summary>
        /// add command.
        /// </summary>
        /// <param name="cmd"></param>
        /// <exception cref="ArgumentNullException">cmd is null</exception>
        /// <exception cref="ArgumentNullException">cmd.Name is null</exception>
        protected void AddCommand(Command.IUdpCommand <TCommandInfo> cmd)
        {
            if (cmd == null)
            {
                throw new ArgumentNullException("cmd");
            }
            if (string.IsNullOrEmpty(cmd.Name))
            {
                throw new ArgumentNullException("cmd.name");
            }

            this._dicCommand[cmd.Name] = cmd;
        }