OSDN Git Service

Please ignore this commit.
authorHiroaki Yamamoto <admin@hysoftware.net>
Fri, 18 Mar 2011 08:07:42 +0000 (17:07 +0900)
committerHiroaki Yamamoto <admin@hysoftware.net>
Fri, 18 Mar 2011 08:07:42 +0000 (17:07 +0900)
definition.h
jasmine.pro.user
jasmine.pro.user.2.1pre1 [new file with mode: 0644]
network/client.cxx
network/server.cxx
network/tcpnetwork.cxx
network/tcpnetwork.h
ui/jasmine_mainwindow.cxx
ui/jasmine_mainwindow.h
ui/mainwindow_lang.h

index 4fa8558..4e126d0 100644 (file)
@@ -7,5 +7,7 @@
 #define default_setting qApp->applicationDirPath().append("/setting.jst")
 #define default_status_interval 3000
 #define default_buffer_size 1024
+#define server_msg qDebug()<<"Server:"
+#define client_msg qDebug()<<"Client:"
 typedef QPair<QHostAddress,quint16> AddressAndPort;
 typedef QPair<QString,AddressAndPort> NameAndAddrPort;
index 3fc79ee..6f15cbe 100644 (file)
  <data>
   <variable>ProjectExplorer.Project.Target.0</variable>
   <valuemap type="QVariantMap">
+   <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Desktop</value>
    <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">Desktop</value>
    <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Target.DesktopTarget</value>
    <value key="ProjectExplorer.Target.ActiveBuildConfiguration" type="int">0</value>
+   <value key="ProjectExplorer.Target.ActiveDeployConfiguration" type="int">0</value>
    <value key="ProjectExplorer.Target.ActiveRunConfiguration" type="int">0</value>
    <valuemap key="ProjectExplorer.Target.BuildConfiguration.0" type="QVariantMap">
-    <valuemap key="ProjectExplorer.BuildConfiguration.BuildStep.0" type="QVariantMap">
-     <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value>
-     <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">QtProjectManager.QMakeBuildStep</value>
-     <valuelist key="QtProjectManager.QMakeBuildStep.QMakeArguments" type="QVariantList"/>
+    <valuemap key="ProjectExplorer.BuildConfiguration.BuildStepList.0" type="QVariantMap">
+     <valuemap key="ProjectExplorer.BuildStepList.Step.0" type="QVariantMap">
+      <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString"></value>
+      <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value>
+      <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">QtProjectManager.QMakeBuildStep</value>
+      <valuelist key="QtProjectManager.QMakeBuildStep.QMakeArguments" type="QVariantList"/>
+      <value key="QtProjectManager.QMakeBuildStep.QMakeForced" type="bool">false</value>
+     </valuemap>
+     <valuemap key="ProjectExplorer.BuildStepList.Step.1" type="QVariantMap">
+      <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString"></value>
+      <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value>
+      <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MakeStep</value>
+      <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">false</value>
+      <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList"/>
+      <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value>
+     </valuemap>
+     <value key="ProjectExplorer.BuildStepList.StepsCount" type="int">2</value>
+     <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Build</value>
+     <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">Build</value>
+     <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.BuildSteps.Build</value>
     </valuemap>
-    <valuemap key="ProjectExplorer.BuildConfiguration.BuildStep.1" type="QVariantMap">
-     <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value>
-     <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MakeStep</value>
-     <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">false</value>
-     <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList"/>
-     <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value>
+    <valuemap key="ProjectExplorer.BuildConfiguration.BuildStepList.1" type="QVariantMap">
+     <valuemap key="ProjectExplorer.BuildStepList.Step.0" type="QVariantMap">
+      <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString"></value>
+      <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value>
+      <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MakeStep</value>
+      <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">true</value>
+      <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList">
+       <value type="QString">clean</value>
+      </valuelist>
+      <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value>
+     </valuemap>
+     <value key="ProjectExplorer.BuildStepList.StepsCount" type="int">1</value>
+     <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Clean</value>
+     <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">Clean</value>
+     <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.BuildSteps.Clean</value>
     </valuemap>
-    <value key="ProjectExplorer.BuildConfiguration.BuildStepsCount" type="int">2</value>
-    <valuemap key="ProjectExplorer.BuildConfiguration.CleanStep.0" type="QVariantMap">
-     <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value>
-     <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MakeStep</value>
-     <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">true</value>
-     <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList">
-      <value type="QString">clean</value>
-     </valuelist>
-     <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value>
-    </valuemap>
-    <value key="ProjectExplorer.BuildConfiguration.CleanStepsCount" type="int">1</value>
+    <value key="ProjectExplorer.BuildConfiguration.BuildStepListCount" type="int">2</value>
     <value key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment" type="bool">false</value>
     <valuelist key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges" type="QVariantList"/>
+    <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Release</value>
     <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">Release</value>
     <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Qt4BuildConfiguration</value>
     <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration" type="int">0</value>
     <value key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild" type="bool">true</value>
    </valuemap>
    <value key="ProjectExplorer.Target.BuildConfigurationCount" type="int">1</value>
+   <valuemap key="ProjectExplorer.Target.DeployConfiguration.0" type="QVariantMap">
+    <valuemap key="ProjectExplorer.BuildConfiguration.BuildStepList.0" type="QVariantMap">
+     <value key="ProjectExplorer.BuildStepList.StepsCount" type="int">0</value>
+     <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Deploy</value>
+     <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">Deploy</value>
+     <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.BuildSteps.Deploy</value>
+    </valuemap>
+    <value key="ProjectExplorer.BuildConfiguration.BuildStepListCount" type="int">1</value>
+    <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">No deployment</value>
+    <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">No deployment</value>
+    <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.DefaultDeployConfiguration</value>
+   </valuemap>
+   <value key="ProjectExplorer.Target.DeployConfigurationCount" type="int">1</value>
    <valuemap key="ProjectExplorer.Target.RunConfiguration.0" type="QVariantMap">
+    <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">jasmine</value>
     <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">jasmine</value>
     <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Qt4RunConfiguration</value>
     <value key="Qt4ProjectManager.Qt4RunConfiguration.BaseEnvironmentBase" type="int">2</value>
     <value key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix" type="bool">false</value>
     <value key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal" type="bool">false</value>
     <valuelist key="Qt4ProjectManager.Qt4RunConfiguration.UserEnvironmentChanges" type="QVariantList"/>
-    <value key="Qt4ProjectManager.Qt4RunConfiguration.UserSetName" type="bool">false</value>
     <value key="Qt4ProjectManager.Qt4RunConfiguration.UserSetWorkingDirectory" type="bool">false</value>
     <value key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory" type="QString"></value>
+    <value key="RunConfiguration.QmlDebugServerPort" type="uint">3768</value>
+    <value key="RunConfiguration.UseCppDebugger" type="bool">true</value>
+    <value key="RunConfiguration.UseQmlDebugger" type="bool">false</value>
    </valuemap>
    <value key="ProjectExplorer.Target.RunConfigurationCount" type="int">1</value>
   </valuemap>
   <value type="int">1</value>
  </data>
  <data>
+  <variable>ProjectExplorer.Project.Updater.EnvironmentId</variable>
+  <value type="QString">{a39c6477-68bd-42e2-b34e-5002bf17ed02}</value>
+ </data>
+ <data>
   <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
-  <value type="int">4</value>
+  <value type="int">8</value>
  </data>
 </qtcreator>
diff --git a/jasmine.pro.user.2.1pre1 b/jasmine.pro.user.2.1pre1
new file mode 100644 (file)
index 0000000..3fc79ee
--- /dev/null
@@ -0,0 +1,79 @@
+<!DOCTYPE QtCreatorProject>
+<qtcreator>
+ <data>
+  <variable>ProjectExplorer.Project.ActiveTarget</variable>
+  <value type="int">0</value>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.EditorSettings</variable>
+  <valuemap type="QVariantMap">
+   <value key="EditorConfiguration.Codec" type="QByteArray">System</value>
+  </valuemap>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.Target.0</variable>
+  <valuemap type="QVariantMap">
+   <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">Desktop</value>
+   <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Target.DesktopTarget</value>
+   <value key="ProjectExplorer.Target.ActiveBuildConfiguration" type="int">0</value>
+   <value key="ProjectExplorer.Target.ActiveRunConfiguration" type="int">0</value>
+   <valuemap key="ProjectExplorer.Target.BuildConfiguration.0" type="QVariantMap">
+    <valuemap key="ProjectExplorer.BuildConfiguration.BuildStep.0" type="QVariantMap">
+     <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value>
+     <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">QtProjectManager.QMakeBuildStep</value>
+     <valuelist key="QtProjectManager.QMakeBuildStep.QMakeArguments" type="QVariantList"/>
+    </valuemap>
+    <valuemap key="ProjectExplorer.BuildConfiguration.BuildStep.1" type="QVariantMap">
+     <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value>
+     <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MakeStep</value>
+     <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">false</value>
+     <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList"/>
+     <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value>
+    </valuemap>
+    <value key="ProjectExplorer.BuildConfiguration.BuildStepsCount" type="int">2</value>
+    <valuemap key="ProjectExplorer.BuildConfiguration.CleanStep.0" type="QVariantMap">
+     <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value>
+     <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MakeStep</value>
+     <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">true</value>
+     <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList">
+      <value type="QString">clean</value>
+     </valuelist>
+     <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value>
+    </valuemap>
+    <value key="ProjectExplorer.BuildConfiguration.CleanStepsCount" type="int">1</value>
+    <value key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment" type="bool">false</value>
+    <valuelist key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges" type="QVariantList"/>
+    <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">Release</value>
+    <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Qt4BuildConfiguration</value>
+    <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration" type="int">0</value>
+    <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory" type="QString">/home/hyamamoto/Documents/Workspace/jasmine-build-desktop</value>
+    <value key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId" type="int">2</value>
+    <value key="Qt4ProjectManager.Qt4BuildConfiguration.ToolChain" type="int">0</value>
+    <value key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild" type="bool">true</value>
+   </valuemap>
+   <value key="ProjectExplorer.Target.BuildConfigurationCount" type="int">1</value>
+   <valuemap key="ProjectExplorer.Target.RunConfiguration.0" type="QVariantMap">
+    <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">jasmine</value>
+    <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Qt4RunConfiguration</value>
+    <value key="Qt4ProjectManager.Qt4RunConfiguration.BaseEnvironmentBase" type="int">2</value>
+    <valuelist key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments" type="QVariantList"/>
+    <value key="Qt4ProjectManager.Qt4RunConfiguration.ProFile" type="QString">jasmine.pro</value>
+    <value key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix" type="bool">false</value>
+    <value key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal" type="bool">false</value>
+    <valuelist key="Qt4ProjectManager.Qt4RunConfiguration.UserEnvironmentChanges" type="QVariantList"/>
+    <value key="Qt4ProjectManager.Qt4RunConfiguration.UserSetName" type="bool">false</value>
+    <value key="Qt4ProjectManager.Qt4RunConfiguration.UserSetWorkingDirectory" type="bool">false</value>
+    <value key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory" type="QString"></value>
+   </valuemap>
+   <value key="ProjectExplorer.Target.RunConfigurationCount" type="int">1</value>
+  </valuemap>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.TargetCount</variable>
+  <value type="int">1</value>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
+  <value type="int">4</value>
+ </data>
+</qtcreator>
index 5fc7e9b..ab39525 100644 (file)
@@ -13,6 +13,12 @@ tcpSocket::tcpSocket(const QString &senderName,const quint64 buffersize,QObject
     this->senderName=senderName;
     this->event=tcpSocket::Size;
     connect(this,SIGNAL(readyRead()),SLOT(client_receive_flag()));
+    connect(this,SIGNAL(disconnected()),SLOT(deleteLater()));
+    connect(this,SIGNAL(error(QAbstractSocket::SocketError)),SLOT(error_occured(QAbstractSocket::SocketError)));
+#ifdef DEBUG
+    client_msg<<"TcpSocket for client has been constructed";
+    client_msg<<this;
+#endif
 }
 //Moving event
 void tcpSocket::client_move_section(){
@@ -33,7 +39,7 @@ void tcpSocket::client_move_section(){
 bool tcpSocket::client_process_event(){
     bool result;
 #ifdef DEBUG
-        qDebug()<<"Client Event:"<<this->event;
+        client_msg<<"Event:"<<this->event;
 #endif
     switch(this->event){
     case tcpSocket::Size:
@@ -71,7 +77,7 @@ bool tcpSocket::client_send_size(){
     this->write((char*)&size,sizeof(size));
     if(!this->client_flush()) return false;
 #ifdef DEBUG
-    qDebug()<<"Client:size of header has been sent successfully. The size is:"<<size;
+    client_msg<<"size of header has been sent successfully. The size is:"<<size;
 #endif
     this->client_move_section();
     return true;
@@ -81,7 +87,7 @@ bool tcpSocket::client_send_header(){
     this->write(this->tmp_buffer);
     if(!this->client_flush()) return false;
 #ifdef DEBUG
-    qDebug()<<"Client:header has been sent successfully.";
+    client_msg<<"header has been sent successfully.";
 #endif
     this->client_move_section();
     return true;
@@ -101,7 +107,7 @@ bool tcpSocket::client_send_msg(){
     }
     memoryStream.close();
 #ifdef DEBUG
-    qDebug()<<"Client:data has been sent successfully.";
+    client_msg<<"data has been sent successfully.";
 #endif
     this->client_move_section();
     return true;
@@ -115,10 +121,11 @@ void tcpSocket::client_receive_flag(){
     if(this->bytesAvailable()<4) return;
     QByteArray data=this->readAll();
 #ifdef DEBUG
-    qDebug()<<"Client:received flag:"<<(Flag)data.toInt();
+    client_msg<<"received flag:"<<(Flag)data.toInt();
 #endif
     switch((Flag)data.toInt()){
     case tcpSocket::accepted:
+        //this->client_move_section();
         break;
     case tcpSocket::refused:
         this->setErrorString(tr("Access Refused"));
@@ -160,7 +167,7 @@ tcpSocket &tcpSocket::operator<<(const QFileInfo &src_file){
         return (*this);
     }
     file.lock(QtLockedFile::ReadLock);
-    while(this->write(file.read(this->buffer_size))>0&&!this->check_canceled_then_abort()){
+    while(this->write(file.read(this->buffer_size))>0&&!this->check_canceled()){
         if(!this->flush())return (*this);
         emit this->sending_file_progress(file.pos());
     }
index e790ed8..30c738e 100644 (file)
@@ -12,14 +12,25 @@ tcpServer::tcpServer(quint64 buffersize, QObject *parent):QTcpServer(parent){thi
 
 void tcpServer::incomingConnection(int handle){
     threadedTcpSocket *socket=new threadedTcpSocket(this->buffersize,this);
+    connect(socket,SIGNAL(pending()),SLOT(socket_pending()));
     socket->socketDescriptor(handle);
-    if(! emit this->pending(*socket)){
-        socket->exit(1);
-        return;
-    }
     socket->start();
     emit this->newConnection();
 }
+bool tcpServer::socket_pending(){
+#ifdef DEBUG
+    server_msg<<"CALL:socket_pending";
+#endif
+    threadedTcpSocket *socket=qobject_cast<threadedTcpSocket *>(this->sender());
+    if(!emit this->pending(AddressAndPort(socket->peerAddr().first,socket->peerAddr().second))){
+#ifdef DEBUG
+        server_msg<<"A client accessed, but refused because user didn't accept.";
+#endif
+        return false;
+    }
+    emit this->socket_accepted(*socket);
+    return true;
+}
 
 //Tcp socket implementation
 tcpSocket::tcpSocket(const quint64 buffersize, QObject *parent):QTcpSocket(parent){
@@ -28,17 +39,20 @@ tcpSocket::tcpSocket(const quint64 buffersize, QObject *parent):QTcpSocket(paren
     this->event=tcpSocket::Size;
     connect(this,SIGNAL(readyRead()),SLOT(read_data()));
     connect(this,SIGNAL(bytesWritten(qint64)),SLOT(move_next_section(const qint64)));
+    connect(this,SIGNAL(disconnected()),SLOT(deleteLater()));
+    connect(this,SIGNAL(error(QAbstractSocket::SocketError)),SLOT(error_occured(QAbstractSocket::SocketError)));
 #ifdef DEBUG
-    qDebug()<<"Server:tcpSocket is constructed.";
-    qDebug()<<"Server:blocked:"<<this->signalsBlocked();
+    server_msg<<"tcpSocket is constructed.";
+    server_msg<<this;
+    server_msg<<"blocked:"<<this->signalsBlocked();
 #endif
 }
 void tcpSocket::read_data(){
     /*TODO: remove this loop*/
         while(this->bytesAvailable()>=0){
 #ifdef DEBUG
-          qDebug()<<"Server:server Event Mode:"<<this->event;
-          qDebug()<<"Server:server Available bytes:"<<this->bytesAvailable();
+          server_msg<<"server Event Mode:"<<this->event;
+          server_msg<<"server Available bytes:"<<this->bytesAvailable();
 #endif
             switch(this->event){
             case tcpSocket::Size:            this->size_event();               break;
@@ -71,7 +85,7 @@ void tcpSocket::send_flag(const Flag flag){
         return;
     }
 #ifdef DEBUG
-    qDebug()<<"Server:the flag:"<<flag<<" has been sent.";
+    server_msg<<"the flag:"<<flag<<" has been sent.";
 #endif
 }
 
@@ -120,10 +134,10 @@ void tcpSocket::msg_event(){
     read_count=(this->head_data.datasize()-final_readsize)/this->buffer_size;
     QByteArray msg;
     for(quint64 count=0;count<read_count;count++){
-        if(this->check_canceled_then_abort())return;
+        if(this->check_canceled())return;
         msg+=this->read(this->buffer_size);
     }
-    if(this->check_canceled_then_abort())return;
+    if(this->check_canceled())return;
     msg+=this->read(final_readsize);
 
     rmd6 generator;
@@ -158,12 +172,12 @@ void tcpSocket::file_event(){
         this->where_to_save=emit this->fileStream_openFailed(file.error(),file.errorString());
         goto streamopen;
     }
-    for(quint64 count=0;count<read_count&&!this->check_canceled_then_abort();count++){
-        if(this->check_canceled_then_abort())return;
+    for(quint64 count=0;count<read_count&&!this->check_canceled();count++){
+        if(this->check_canceled())return;
         file.write(this->read(this->buffer_size));
         emit this->file_receive_progress(file.pos());
     }
-    if(this->check_canceled_then_abort())return;
+    if(this->check_canceled())return;
     file.write(this->read(final_readsize));
     emit this->file_receive_progress(file.pos());
     file.close();
index c0df51c..4ae3d78 100644 (file)
@@ -12,15 +12,20 @@ void tcpSocket::disconnectFromHostImplementation(){
     this->canceled=true;
     QTcpSocket::disconnectFromHost();
 }
-bool tcpSocket::check_canceled_then_abort(){
+bool tcpSocket::check_canceled(){
     if(this->canceled){
         this->setErrorString(tr("The process has been canceled by user."));
         emit this->error(QAbstractSocket::UnknownSocketError);
-        this->abort();
         return true;
     }
     return false;
 }
+void tcpSocket::error_occured(const QAbstractSocket::SocketError err){
+    Q_UNUSED(err)
+    qDebug()<<"Error("<<this<<")"<<this->errorString();
+    this->abort();
+
+}
 void tcpSocket::cancel(){this->canceled=true;}
 QString tcpSocket::path_to_save() const{return this->where_to_save;}
 header tcpSocket::header_data() const{return this->head_data;}
@@ -98,6 +103,9 @@ void threadedTcpSocket::run(){
 #ifdef DEBUG
     qDebug()<<"threadedTcpSocket has been created and running.";
 #endif
+    qRegisterMetaType<QAbstractSocket::SocketState>("SocketState");
+    qRegisterMetaType<QAbstractSocket::SocketError>("SocketError");
+
     this->locks[threadedTcpSocket::BufferSize].lockForRead();
     this->locks[threadedTcpSocket::SenderName].lockForRead();
     tcpSocket *socket=
@@ -107,14 +115,13 @@ void threadedTcpSocket::run(){
     this->locks[threadedTcpSocket::BufferSize].unlock();
     this->locks[threadedTcpSocket::SenderName].unlock();
     /*Common signals*/
-    connect(socket,SIGNAL(error(QAbstractSocket::SocketError)),
-            SLOT(error_occured(QAbstractSocket::SocketError)),
-            Qt::BlockingQueuedConnection);
     connect(socket,SIGNAL(connected()),SLOT(host_connected()),Qt::BlockingQueuedConnection);
     connect(socket,SIGNAL(connected()),SIGNAL(connected()));
+#ifdef DEBUG
+    connect(socket,SIGNAL(disconnected()),SLOT(host_disconnected()));
+#endif
     connect(socket,SIGNAL(disconnected()),SIGNAL(disconnected()));
-    connect(socket,SIGNAL(disconnected()),SLOT(host_disconnected()),
-            Qt::BlockingQueuedConnection);
+
     connect(socket,SIGNAL(hostFound()),SIGNAL(hostFound()));
     connect(socket,SIGNAL(proxyAuthenticationRequired(const QNetworkProxy &,QAuthenticator*)),
             SIGNAL(proxyAuthenticationRequired(const QNetworkProxy &,QAuthenticator*)));
@@ -144,12 +151,10 @@ void threadedTcpSocket::run(){
         connect(socket,SIGNAL(file_saved()),SIGNAL(file_saved()));
         connect(socket,SIGNAL(file_saved()),SLOT(quit()));
         connect(socket,SIGNAL(header_received()),SLOT(header_received()));
-        if(!socket->setSocketDescriptor(descriptor)){
-            this->_error=socket->errorString();
-            emit this->error(socket->error());
-        }
+        socket->setSocketDescriptor(descriptor);
         this->_addrPort.first=socket->peerAddress();
         this->_addrPort.second=socket->peerPort();
+        if(!emit this->pending()) socket->disconnectFromHost();
         break;
     }
     this->locks[threadedTcpSocket::Mode].unlock();
@@ -160,15 +165,14 @@ void threadedTcpSocket::run(){
     //Cleanup
     socket->abort();
 }
+
 void threadedTcpSocket::host_connected(){
     tcpSocket *socket=qobject_cast<tcpSocket *>(this->sender());
 #ifdef DEBUG
     qDebug()<<"Client:"<<socket->peerAddress().toString()<<"has been connected properly.";
 #endif
     this->locks[threadedTcpSocket::Msg].lockForRead();
-        bool r=this->_msg.isNull();
-    this->locks[threadedTcpSocket::Msg].unlock();
-    if(r){
+    if(this->_msg.isNull()){
         this->locks[threadedTcpSocket::File].lockForRead();
         (*socket)<<this->_file;
         this->locks[threadedTcpSocket::File].unlock();
@@ -177,27 +181,13 @@ void threadedTcpSocket::host_connected(){
         (*socket)<<this->_msg;
         this->locks[threadedTcpSocket::Msg].unlock();
     }
+    this->locks[threadedTcpSocket::Msg].unlock();
 }
-void threadedTcpSocket::host_disconnected(){
-    tcpSocket *socket=qobject_cast<tcpSocket *>(this->sender());
-    socket->close();
+
 #ifdef DEBUG
+void threadedTcpSocket::host_disconnected(){
+    this->locks[threadedTcpSocket::Mode].lockForRead();
     qDebug()<<"Socket("<<((this->mode==threadedTcpSocket::Session)?"Session":"Client")<<"):Connection closed successful.";
-#endif
-    socket->deleteLater();
-}
-
-void threadedTcpSocket::error_occured(const QAbstractSocket::SocketError error){
-    tcpSocket *socket=(tcpSocket*)this->sender();
-    this->locks[threadedTcpSocket::Error].lockForWrite();
-        this->_error=socket->errorString();
-    this->locks[threadedTcpSocket::Error].unlock();
-    this->exit(1);
-    emit this->error(error);
-}
-QString threadedTcpSocket::errorString(){
-    this->locks[threadedTcpSocket::Error].lockForRead();
-        QString str=this->_error;
-    this->locks[threadedTcpSocket::Error].unlock();
-    return str;
+    this->locks[threadedTcpSocket::Mode].unlock();
 }
+#endif
index 0cedf03..abff1ac 100644 (file)
@@ -17,12 +17,15 @@ namespace network{
     public:
         tcpServer(quint64 buffersize=default_bandwidth,QObject *parent=NULL);
     signals:
-        bool pending(threadedTcpSocket &) const;
+        bool pending(const AddressAndPort &) const;
         void socket_error(const threadedTcpSocket &) const;
+        void socket_accepted(const threadedTcpSocket &) const;
     protected:
         void incomingConnection(int handle);
     private:
         quint64 buffersize;
+    private slots:
+        bool socket_pending();
     };
 
     class threadedTcpSocket:public QThread{
@@ -47,37 +50,36 @@ namespace network{
         void readWriteMode(const QIODevice::OpenMode);
         void to(const AddressAndPort &);
         QIODevice::OpenMode readWriteMode();
-        QString errorString();
         threadedTcpSocket &operator<<(const QString &);
         threadedTcpSocket &operator<<(const QFileInfo &);
     private:
         enum Mode{Session,Client} mode;
         enum lockID{
-            Mode        =0,
-            BufferSize  =1,
-            SenderName  =2,
-            Msg         =3,
-            File        =4,
-            Descriptor  =5,
-            RWMode      =6,
-            Error       =7,
-            AddrAndPort =8,
-            HeaderData  =9
+            Mode          =0,
+            BufferSize    =1,
+            SenderName    =2,
+            Msg           =3,
+            File          =4,
+            Descriptor    =5,
+            RWMode        =6,
+            AddrAndPort   =7,
+            HeaderData    =8,
         };
         void run();
         QIODevice::OpenMode open_mode;
-        QReadWriteLock locks[10];
+        QReadWriteLock locks[9];
         int _descriptor;
         quint64 _buffersize;
-        QString _senderName,_msg,_error;
+        QString _senderName,_msg;
         QFileInfo _file;
         AddressAndPort _addrPort;
         header _header;
     private slots:
         void header_received();
-        void error_occured(const QAbstractSocket::SocketError);
         void host_connected();
+#ifdef DEBUG
         void host_disconnected();
+#endif
     signals:
         QString file_pending() const;
         QString fileStream_openFailed(const QFile::FileError &,const QString &) const;
@@ -86,6 +88,7 @@ namespace network{
 
         void file_receive_progress(const quint64 streamPos) const;
         void file_saved() const;
+        bool pending() const;
 
         void sentData();
         void file_header_sent();
@@ -93,12 +96,10 @@ namespace network{
 
         void connected();
         void disconnected();
-        void error(const QAbstractSocket::SocketError);
         void hostFound();
         void proxyAuthenticationRequired(const QNetworkProxy &,QAuthenticator *);
         void stateChanged(QAbstractSocket::SocketState);
     };
-
     class tcpSocket:public QTcpSocket{
         Q_OBJECT
     public:
@@ -140,7 +141,7 @@ namespace network{
         void header_event();
         void msg_event();
         void file_event();
-        bool check_canceled_then_abort();
+        bool check_canceled();
 
         void client_move_section();
         bool client_process_event();
@@ -163,7 +164,10 @@ namespace network{
         void move_next_section(const qint64);
         void send_flag(const Flag flag);
         void cancel();
+        void error_occured(const QAbstractSocket::SocketError);
 
         void client_receive_flag();
     };
 }
+Q_DECLARE_METATYPE(QAbstractSocket::SocketState)
+Q_DECLARE_METATYPE(QAbstractSocket::SocketError)
index 4f39955..fbd95dd 100644 (file)
@@ -53,8 +53,10 @@ 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(threadedTcpSocket &)),
-            SLOT(tcpserver_pending(threadedTcpSocket &)));
+    connect(this->mainServer,SIGNAL(pending(const AddressAndPort &)),
+            SLOT(tcpserver_pending(const AddressAndPort &)));
+    connect(this->mainServer,SIGNAL(socket_accepted(const threadedTcpSocket &)),
+            SLOT(tcpserver_accepted(const threadedTcpSocket &)));
 }
 mainWindow::~mainWindow(){}
 void mainWindow::closeEvent(QCloseEvent *event){
@@ -77,19 +79,10 @@ void mainWindow::on_sendButton_clicked(){
     for(int index=0;index<addressList.size();index++){
         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)<<this->sendTextEditor->html();
     }
 }
-void mainWindow::tcpclient_error(const QAbstractSocket::SocketError &error){
-    Q_UNUSED(error);
-    threadedTcpSocket *client=qobject_cast<threadedTcpSocket *>(this->sender());
-#ifdef DEBUG
-    qDebug()<<"Error:"<<client->errorString();
-#endif
-    client->exit(1);
-}
 
 void mainWindow::on_sendFileAction_triggered(){
     //TODO:Send files
@@ -287,25 +280,16 @@ void mainWindow::selectedLink(const QUrl &link){
 settings mainWindow::app_setting() const{return this->setting;}
 
 //Main server
-bool mainWindow::tcpserver_pending(threadedTcpSocket &socket){
+bool mainWindow::tcpserver_pending(const AddressAndPort &addr){
 #ifdef DEBUG
-    qDebug()<<"Pending:"<<socket.peerAddr().first.toString()<<" Port:"<<socket.peerAddr().second;
+    qDebug()<<"Pending:"<<addr.first.toString()<<" Port:"<<addr.second;
 #endif
-    if(this->memberList->isInMember(socket.peerAddr(),true)<0) return false;
+    return this->memberList->isInMember(addr,true)>=0;
+}
+void mainWindow::tcpserver_accepted(const threadedTcpSocket &socket){
     connect(&socket,
             SIGNAL(msg_received(const QString &)),
             SLOT(tcpserver_msg_received(const QString &)));
-    connect(&socket,SIGNAL(error(const QAbstractSocket::SocketError &)),
-            SLOT(tcpserver_error(const QAbstractSocket::SocketError &)));
-    return true;
-}
-void mainWindow::tcpserver_error(const QAbstractSocket::SocketError &error){
-    Q_UNUSED(error);
-    threadedTcpSocket *sender=qobject_cast<threadedTcpSocket *>(this->sender());
-#ifdef DEBUG
-    qDebug()<<"Receive aborted:"<<sender->errorString();
-#endif
-    sender->exit(1);
 }
 
 void mainWindow::tcpserver_msg_received(const QString &msg){
index e774f86..5332c5a 100644 (file)
@@ -45,12 +45,11 @@ private slots:
     void invalidLink(const QString &);
     void selectedLink(const QUrl &);
     //These functions are for tcpclient.
-    void tcpclient_error(const QAbstractSocket::SocketError &error);
     void sentData();
     //These functions are for tcpserver.
-    bool tcpserver_pending(threadedTcpSocket &);
+    bool tcpserver_pending(const AddressAndPort &);
+    void tcpserver_accepted(const threadedTcpSocket &);
     void tcpserver_msg_received(const QString &);
-    void tcpserver_error(const QAbstractSocket::SocketError &);
 public slots:
     //These are for opening stuff.
     void openConfig(const QString &);
index 412f0aa..666f9cf 100644 (file)
@@ -11,7 +11,7 @@ QString save_prefix(QObject::tr("Save %1")),
 
         close_warning_title(QObject::tr("Data will be lost!")),
         saving_member_warning_when_closing_body(QObject::tr("The modification of your memberlist will be lost without saving it. Save it?")),
-        saving_setting_warning_when_closing_body(QObject::tr("The modification of your memberlist will be lost witout saving it. Save it?")),
+        saving_setting_warning_when_closing_body(QObject::tr("The modification of your memberlist will be lost without saving it. Save it?")),
 
         open_memberlist_title(open_prefix.arg(QObject::tr("memberlist"))),
         open_setting_title(open_prefix.arg(QObject::tr("settings"))),