QTfrontend/tcpBase.cpp
changeset 183 57c2ef19f719
parent 180 ea83b9e9057f
child 184 f97a7a3dc8f6
equal deleted inserted replaced
182:0ca777e942d6 183:57c2ef19f719
     1 /*
     1 /*
     2  * Hedgewars, a worms-like game
     2  * Hedgewars, a worms-like game
     3  * Copyright (c) 2006 Igor Ulyanov <iulyanov@gmail.com>
     3  * Copyright (c) 2006 Igor Ulyanov <iulyanov@gmail.com>
     4  *
     4  *
     5  * Distributed under the terms of the BSD-modified licence:
     5  * This program is free software; you can redistribute it and/or modify
       
     6  * it under the terms of the GNU General Public License as published by
       
     7  * the Free Software Foundation; version 2 of the License
     6  *
     8  *
     7  * Permission is hereby granted, free of charge, to any person obtaining a copy
     9  * This program is distributed in the hope that it will be useful,
     8  * of this software and associated documentation files (the "Software"), to deal
    10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     9  * with the Software without restriction, including without limitation the
    11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    10  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
    12  * GNU General Public License for more details.
    11  * sell copies of the Software, and to permit persons to whom the Software is
       
    12  * furnished to do so, subject to the following conditions:
       
    13  *
    13  *
    14  * 1. Redistributions of source code must retain the above copyright notice,
    14  * You should have received a copy of the GNU General Public License
    15  *    this list of conditions and the following disclaimer.
    15  * along with this program; if not, write to the Free Software
    16  * 2. Redistributions in binary form must reproduce the above copyright notice,
    16  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
    17  *    this list of conditions and the following disclaimer in the documentation
       
    18  *    and/or other materials provided with the distribution.
       
    19  * 3. The name of the author may not be used to endorse or promote products
       
    20  *    derived from this software without specific prior written permission.
       
    21  *
       
    22  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
       
    23  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
       
    24  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
       
    25  * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
       
    26  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
       
    27  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
       
    28  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
       
    29  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
       
    30  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
       
    31  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
       
    32  */
    17  */
    33 
    18 
    34 #include "tcpBase.h"
    19 #include "tcpBase.h"
    35 
    20 
    36 #include <QMessageBox>
    21 #include <QMessageBox>
    37 #include <QList>
    22 #include <QList>
    38 
    23 
    39 #include <QImage>
    24 #include <QImage>
       
    25 #include <QTimer>
    40 
    26 
    41 #include "hwconsts.h"
    27 #include "hwconsts.h"
    42 
    28 
    43 QList<TCPBase*> srvsList;
    29 QList<TCPBase*> srvsList;
    44 
    30 
    71   if (!IPCServer->listen(QHostAddress::LocalHost, IPC_PORT)) {
    57   if (!IPCServer->listen(QHostAddress::LocalHost, IPC_PORT)) {
    72     QMessageBox::critical(0, tr("Error"),
    58     QMessageBox::critical(0, tr("Error"),
    73 			  tr("Unable to start the server: %1.")
    59 			  tr("Unable to start the server: %1.")
    74 			  .arg(IPCServer->errorString()));
    60 			  .arg(IPCServer->errorString()));
    75   }
    61   }
    76   
    62 
    77   QProcess * process;
    63   QProcess * process;
    78   process = new QProcess;
    64   process = new QProcess;
    79   connect(process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(StartProcessError(QProcess::ProcessError)));
    65   connect(process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(StartProcessError(QProcess::ProcessError)));
    80   QStringList arguments=setArguments();
    66   QStringList arguments=setArguments();
    81   process->start(bindir->absolutePath() + "/hwengine", arguments);
    67   process->start(bindir->absolutePath() + "/hwengine", arguments);
   110 void TCPBase::tcpServerReady()
    96 void TCPBase::tcpServerReady()
   111 {
    97 {
   112   disconnect(srvsList.front(), SIGNAL(isReadyNow()), *(++srvsList.begin()), SLOT(tcpServerReady()));
    98   disconnect(srvsList.front(), SIGNAL(isReadyNow()), *(++srvsList.begin()), SLOT(tcpServerReady()));
   113   srvsList.pop_front();
    99   srvsList.pop_front();
   114 
   100 
   115   RealStart();
   101   QTimer::singleShot(150, this, SLOT(RealStart()));
   116 }
   102 }
   117 
   103 
   118 void TCPBase::Start()
   104 void TCPBase::Start()
   119 {
   105 {
   120   if(srvsList.isEmpty()) {
   106   if(srvsList.isEmpty()) {
   122   } else {
   108   } else {
   123     connect(srvsList.back(), SIGNAL(isReadyNow()), this, SLOT(tcpServerReady()));
   109     connect(srvsList.back(), SIGNAL(isReadyNow()), this, SLOT(tcpServerReady()));
   124     srvsList.push_back(this);
   110     srvsList.push_back(this);
   125     return;
   111     return;
   126   }
   112   }
   127   
       
   128   RealStart();
   113   RealStart();
   129 }
   114 }
   130 
   115 
   131 void TCPBase::onClientRead()
   116 void TCPBase::onClientRead()
   132 {
   117 {