public bool SendWithSerial(uint cmdId
                                   , IExtensible message
                                   , NetworkMessageHandle callback
                                   , bool displayTip = false
                                   , TimerEntity.TimerEntityCallBack timeoutCallback = null
                                   , double timeout = 10
                                   , int connID     = -1
                                   , uint serial    = 0
                                   , string tag     = "None")
        {
            bool result = proxy.Write(cmdId, message, serial, connID);

            if (!result)
            {
                ///发送失败直接超时回调
                if (timeoutCallback != null)
                {
                    DelayTimeoutCallbackData timeoutData = new DelayTimeoutCallbackData(timeoutCallback, serial);
                    NetworkManager.timeoutCallbackDataList.Add(timeoutData);
                    router.OnTimeoutConnectCheck();
                }
            }
            else
            {
                router.AddUnicastCallback(cmdId, serial, callback
                                          , displayTip, timeoutCallback, timeout
                                          , connID, tag, PBTYPE.CSharpPB);
            }

            return(result);
        }
 public DelayTimeoutCallbackData(TimerEntity.TimerEntityCallBack timeoutCallback, uint serial)
 {
     this.timeoutCallback = timeoutCallback;
     this.serial          = serial;
 }