OSDN Git Service

Added threadedTcpSocket
[greensite/jasmine.git] / ui / jasmine_mainwindow.cxx
index 5296e89..4f39955 100644 (file)
@@ -53,7 +53,8 @@ mainWindow::mainWindow(){
     connect(this->sendTextEditor,SIGNAL(invalidLink(const QString &)),SLOT(invalidLink(const QString &)));
     connect(this->sendTextEditor,SIGNAL(sendTriggered()),this->sendButton,SLOT(click()));
 
-    connect(this->mainServer,SIGNAL(pending(const tcpSocket &)),SLOT(tcpserver_pending(const tcpSocket &)));
+    connect(this->mainServer,SIGNAL(pending(threadedTcpSocket &)),
+            SLOT(tcpserver_pending(threadedTcpSocket &)));
 }
 mainWindow::~mainWindow(){}
 void mainWindow::closeEvent(QCloseEvent *event){
@@ -63,7 +64,7 @@ void mainWindow::closeEvent(QCloseEvent *event){
 }
 void mainWindow::showEvent(QShowEvent *event){
     if(rev==0)
-        this->status->showMessage("<font color=\"#ff0000\">Don't forget almost all features are not implemented!</font>",default_status_interval);
+        this->status->showMessage("Don't forget almost all features are not implemented!",default_status_interval);
     event->accept();
 }
 
@@ -74,27 +75,20 @@ void mainWindow::on_sendButton_clicked(){
 #pragma omp parallel for
 #endif
     for(int index=0;index<addressList.size();index++){
-        tcpSocket *client=new tcpSocket(this->setting.name(),default_buffer_size,this);
-        connect(client,SIGNAL(connected()),SLOT(tcpclient_connected()));
+        threadedTcpSocket *client=new threadedTcpSocket(
+                addressList[index],this->setting.name(),default_buffer_size,this);
         connect(client,SIGNAL(error(const QAbstractSocket::SocketError &)),SLOT(tcpclient_error(const QAbstractSocket::SocketError &)));
         connect(client,SIGNAL(sentData()),SLOT(sentData()));
-        client->connectToHost(addressList[index].first,addressList[index].second);
+        (*client)<<this->sendTextEditor->html();
     }
 }
 void mainWindow::tcpclient_error(const QAbstractSocket::SocketError &error){
     Q_UNUSED(error);
-    tcpSocket *client=qobject_cast<tcpSocket *>(this->sender());
+    threadedTcpSocket *client=qobject_cast<threadedTcpSocket *>(this->sender());
 #ifdef DEBUG
     qDebug()<<"Error:"<<client->errorString();
 #endif
-    client->close();
-}
-
-void mainWindow::tcpclient_connected(){
-    tcpSocket *client=qobject_cast<tcpSocket *>(this->sender());
-    (*client)<<this->sendTextEditor->html();
-    client->disconnectFromHost();
-    client->close();
+    client->exit(1);
 }
 
 void mainWindow::on_sendFileAction_triggered(){
@@ -260,7 +254,7 @@ void mainWindow::openConfig(const QString &file){
 void mainWindow::openMember(const QString &file){
      /*
       Does QFileDialog have a bug??
-      If you select file by double clicking, fileSelected signal will be emitted twice.
+      Selecting file by double clicking, fileSelected signal will be emitted twice.
       */
     if(this->sender()!=NULL&&this->sender()==this->beforesender) return;
     this->beforesender=this->sender();
@@ -292,12 +286,12 @@ void mainWindow::selectedLink(const QUrl &link){
 }
 settings mainWindow::app_setting() const{return this->setting;}
 
-//Implementations for main server.
-bool mainWindow::tcpserver_pending(const tcpSocket &socket){
+//Main server
+bool mainWindow::tcpserver_pending(threadedTcpSocket &socket){
 #ifdef DEBUG
-    qDebug()<<"Pending:"<<socket.peerAddress().toString()<<" Port:"<<socket.peerPort();
+    qDebug()<<"Pending:"<<socket.peerAddr().first.toString()<<" Port:"<<socket.peerAddr().second;
 #endif
-    if(this->memberList->isInMember(AddressAndPort(socket.peerAddress(),0),true)<0) return false;
+    if(this->memberList->isInMember(socket.peerAddr(),true)<0) return false;
     connect(&socket,
             SIGNAL(msg_received(const QString &)),
             SLOT(tcpserver_msg_received(const QString &)));
@@ -307,16 +301,18 @@ bool mainWindow::tcpserver_pending(const tcpSocket &socket){
 }
 void mainWindow::tcpserver_error(const QAbstractSocket::SocketError &error){
     Q_UNUSED(error);
-    tcpSocket *sender=qobject_cast<tcpSocket *>(this->sender());
+    threadedTcpSocket *sender=qobject_cast<threadedTcpSocket *>(this->sender());
 #ifdef DEBUG
     qDebug()<<"Receive aborted:"<<sender->errorString();
 #endif
-    sender->close();
+    sender->exit(1);
 }
 
 void mainWindow::tcpserver_msg_received(const QString &msg){
-    tcpSocket *sender=qobject_cast<tcpSocket *>(this->sender());
-    this->receiveText->append(sender->header_data().senderName()+"("+this->memberList->name(AddressAndPort(sender->peerAddress(),0),true)+", "+sender->peerAddress().toString()+")"+tr(" says:"));
+    threadedTcpSocket *sender=qobject_cast<threadedTcpSocket *>(this->sender());
+    this->receiveText->append(sender->head_data().senderName()+
+                              "("+this->memberList->name(AddressAndPort(sender->peerAddr().first,0),true)+", "+sender->peerAddr().first.toString()+")"+tr(" says:"));
     this->receiveText->append(msg);
     this->receiveText->append("<br />");
+    sender->quit();
 }