客户端提高登录过程取消操作的响应性的修改


1.修改ICommunicator

ICommunicator增加:
class ICommunicator {
public:
    virtual void CloseAllConn() = 0; ///< 关闭所有连接
};


2.修改CControl

CControl增加:
class CControl {
public:
    void CloseAllConn(); ///< 关闭所有连接
};
   
   
//---------------------------------------------------------------------------
/// 为提高登录时取消响应性增加的函数:目前只关闭TCP连接
///< 问题的症结在:Login窗口无法获取正在执行的连接
void CControl::CloseAllConn() {
    tagConnMap::iterator iter = m_TCPConnPool.m_ConnMap.begin();
    while(iter!=m_TCPConnPool.m_ConnMap.end()) {
        tagConnInfo *conn_info = *iter;
        if (conn_info->conn_) {
            SOCKET handle = conn_info->conn_->GetSocket();
            if (handle!=INVALID_SOCKET)
                closesocket(handle);
        }
        iter++;
    }
}

3.修改CPluginControl
CPluginControl增加:
class CSDK_API CPluginControl : public CBaseControl {
public:
    void CloseAllConn(); ///< 关闭所有连接
};

//---------------------------------------------------------------------------
void CPluginControl::CloseAllConn() {
    communicator_->CloseAllConn();
}


4.修改TLoginForm
//---------------------------------------------------------------------------
void __fastcall TLoginForm::OnCancelButtonClick(TObject *Sender)
{
    bNeedAutoRelogin = false;
    iTryReloginTimes = 0;
    iAutoReloginWaitedTime = 0;
    if(!IsLogining || !Can_Cancel || IsCanceling)
    {
        return;
    }

    ///< 为了快速取消采用直接关闭所有连接的做法:实际上框架管理的通信连接池,此时只有一个与服务器的连接
    controller->CloseAllConn();

    IsCanceling = true;
    lbShowInfo->Caption = "正在取消.";
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值