提交 99fb36cb 编写于 作者: 丁劲犇's avatar 丁劲犇 😸

Cross-Svr Connections Finished

上级 b4b0a896
......@@ -219,7 +219,7 @@ namespace ZP_Cluster{
m_addrPublish = QHostAddress((const char *)pMsg->payload.basicInfo.Address);
if (false==m_pTerm->regisitNewServer(this))
{
emit evt_Message(this,tr("Info: New Svr already regisited. Ignored."));
emit evt_Message(this,tr("Info: New Svr already regisited. Ignored.")+strName);
emit evt_close_client(this->sock());
}
//else
......@@ -243,8 +243,12 @@ namespace ZP_Cluster{
{
QHostAddress addrToConnectTo((const char *)pMsg->payload.broadcastMsg[i].Address);
quint16 PortToConnectTo = pMsg->payload.broadcastMsg[i].port;
//because cross-connection is not good, we just want the low Addr:port connect to max Addr:Port.
//Connect to New Servers
emit evt_connect_to(addrToConnectTo,PortToConnectTo,false);
if (strName > m_pTerm->name())
emit evt_connect_to(addrToConnectTo,PortToConnectTo,false);
else
emit evt_Message(this,tr("Name %1 <= %2, omitted.").arg(strName).arg(m_pTerm->name()));
}
}
}
......
......@@ -72,12 +72,47 @@ namespace ZP_Cluster{
{
return m_pClusterEng->canClose() && m_pClusterNet->CanExit();
}
QStringList zp_ClusterTerm::SvrNames()
{
QStringList lst;
m_hash_mutex.lock();
QList<QString> keys = m_hash_Name2node.keys();
//Msgs
foreach (QString key,keys)
{
lst.push_back(m_hash_Name2node[key]->termName());
}
m_hash_mutex.unlock();
return lst;
}
QHostAddress zp_ClusterTerm::SvrAddr(const QString & name)
{
QHostAddress addr;
m_hash_mutex.lock();
if (m_hash_Name2node.contains(name))
addr = m_hash_Name2node[name]->addrPublish();
m_hash_mutex.unlock();
return addr;
}
int zp_ClusterTerm::SvrPort(const QString & name)
{
int port = 0;
m_hash_mutex.lock();
if (m_hash_Name2node.contains(name))
port = m_hash_Name2node[name]->portPublish();
m_hash_mutex.unlock();
return port;
}
bool zp_ClusterTerm::regisitNewServer(zp_ClusterNode * c)
{
//Before reg, termname must be recieved.
if (c->termName().length()<1)
{
emit evt_Message(c,tr("Name is empty!")+c->termName());
return false;
}
m_hash_mutex.lock();
if (m_hash_Name2node.contains(c->termName())==true)
{
......@@ -185,16 +220,16 @@ namespace ZP_Cluster{
pClientNode = m_hash_sock2node[clientHandle];
if (pClientNode)
{
m_hash_sock2node.remove(clientHandle);
if (pClientNode->termName().length()>0)
m_hash_Name2node.remove(pClientNode->termName());
pClientNode->bTermSet = true;
disconnect (pClientNode,&zp_ClusterNode::evt_SendDataToClient,m_pClusterNet,&ZPNetwork::zp_net_Engine::SendDataToClient);
disconnect (pClientNode,&zp_ClusterNode::evt_BroadcastData,m_pClusterNet,&ZPNetwork::zp_net_Engine::evt_BroadcastData);
disconnect (pClientNode,&zp_ClusterNode::evt_close_client,m_pClusterNet,&ZPNetwork::zp_net_Engine::KickClients);
disconnect (pClientNode,&zp_ClusterNode::evt_Message,this,&zp_ClusterTerm::evt_Message);
disconnect (pClientNode,&zp_ClusterNode::evt_connect_to,m_pClusterNet,&ZPNetwork::zp_net_Engine::connectTo);
m_hash_sock2node.remove(clientHandle);
if (pClientNode->termName().length()>0)
m_hash_Name2node.remove(pClientNode->termName());
pClientNode->bTermSet = true;
m_nodeToBeDel.push_back(pClientNode);
//qDebug()<<QString("%1(ref %2) Node Push in queue.\n").arg((unsigned int)pClientNode).arg(pClientNode->ref());
}
......
......@@ -53,7 +53,9 @@ namespace ZP_Cluster{
public:
zp_ClusterNode * SvrNodeFromName(const QString &);
zp_ClusterNode * SvrNodeFromSocket(QObject *);
QStringList SvrNames();
QHostAddress SvrAddr(const QString & name);
int SvrPort(const QString & name);
signals:
void evt_Message(QObject * ,const QString &);
......
......@@ -6,12 +6,12 @@
<rect>
<x>0</x>
<y>0</y>
<width>174</width>
<height>97</height>
<width>184</width>
<height>106</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
<string>Participate in CLUSTER</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
......
......@@ -140,6 +140,12 @@ void ZPMainFrame::initUI()
pCombo->appendRow(new QStandardItem(str));
}
ui->comboBox_db_type->setModel(pCombo);
m_pModelCluster= new QStandardItemModel(0,3,this);
m_pModelCluster->setHeaderData(0,Qt::Horizontal,tr("Name"));
m_pModelCluster->setHeaderData(1,Qt::Horizontal,tr("Address"));
m_pModelCluster->setHeaderData(2,Qt::Horizontal,tr("Port"));
ui->tableView_activeTerms->setModel(m_pModelCluster);
}
void ZPMainFrame::on_evt_MessageNetwork(QObject * psource,const QString & strMsg)
......@@ -280,6 +286,23 @@ void ZPMainFrame::timerEvent(QTimerEvent * e)
str_msg += tr("\tHeart beating Threadhold is : %1\n").arg(m_clientTable->heartBeatingThrd());
ui->plainTextEdit_status_net->setPlainText(str_msg);
//The Cluster Info
QStringList lstCluster = m_pClusterTerm->SvrNames();
m_pModelCluster->removeRows(0,m_pModelCluster->rowCount());
int nInserted = 0;
foreach (QString strNodeName,lstCluster)
{
m_pModelCluster->insertRow(nInserted);
m_pModelCluster->setData(m_pModelCluster->index(nInserted,0),strNodeName);
m_pModelCluster->setData(m_pModelCluster->index(nInserted,1),m_pClusterTerm->SvrAddr(strNodeName).toString());
m_pModelCluster->setData(m_pModelCluster->index(nInserted,2),m_pClusterTerm->SvrPort(strNodeName));
++nInserted;
}
nInserted++;
}
else if (e->timerId()==m_nTimerCheck)
{
......
......@@ -41,6 +41,8 @@ protected:
//Dead check
int m_nTimerCheck;
QStandardItemModel * m_pModelCluster;
private:
......
......@@ -623,12 +623,9 @@
</property>
<layout class="QHBoxLayout" name="horizontalLayout_14">
<item>
<widget class="QListView" name="listView_activeTerms">
<property name="movement">
<enum>QListView::Static</enum>
</property>
<property name="viewMode">
<enum>QListView::IconMode</enum>
<widget class="QTableView" name="tableView_activeTerms">
<property name="alternatingRowColors">
<bool>true</bool>
</property>
</widget>
</item>
......@@ -952,7 +949,7 @@
<x>0</x>
<y>0</y>
<width>640</width>
<height>23</height>
<height>21</height>
</rect>
</property>
<widget class="QMenu" name="menu_Control">
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册