QTfrontend/netconnectedclient.cpp
changeset 1082 596b1dcdc1df
parent 1078 8f891269392f
child 1301 c6fe8a4bfd34
equal deleted inserted replaced
1081:5be338fa4e2c 1082:596b1dcdc1df
    45 }
    45 }
    46 
    46 
    47 void HWConnectedClient::ClientRead()
    47 void HWConnectedClient::ClientRead()
    48 {
    48 {
    49   try {
    49   try {
    50     while (m_client->canReadLine()) {
    50 	while (m_client->canReadLine()) {
    51       ParseLine(m_client->readLine().trimmed());
    51 		QString s = QString::fromUtf8(m_client->readLine().trimmed());
    52     }
    52 		if (s.size() == 0) {
       
    53 			ParseCmd(cmdbuf);
       
    54 			cmdbuf.clear();
       
    55 		} else
       
    56 			cmdbuf << s;
       
    57 	}
    53   } catch(ShouldDisconnectException& e) {
    58   } catch(ShouldDisconnectException& e) {
    54     m_client->close();
    59     m_client->close();
    55   }
    60   }
    56 }
    61 }
    57 
    62 
    58 void HWConnectedClient::ParseLine(const QByteArray & line)
    63 void HWConnectedClient::ParseCmd(const QStringList & lst)
    59 {
    64 {
    60   QString msg = QString::fromUtf8 (line.data(), line.size());
    65 qDebug() << "Server: Parsing:" << lst;
    61   QStringList lst = msg.split(delimeter);
       
    62 //qDebug() << "Parsing: " << lst;
       
    63   if(!lst.size())
    66   if(!lst.size())
    64   {
    67   {
    65     qWarning("Net server: Bad message");
    68     qWarning("Net server: Bad message");
    66     return;
    69     return;
    67   }
    70   }
    99     return;
   102     return;
   100   }
   103   }
   101 
   104 
   102   if(client_nick=="")
   105   if(client_nick=="")
   103   {
   106   {
   104   	qWarning(QString("Net server: Message from unnamed client: '%1'").arg(msg).toAscii().data());
   107   	qWarning() << "Net server: Message from unnamed client:" << lst;
   105   	return;
   108   	return;
   106   }
   109   }
   107 
   110 
   108   if (lst[0]=="START:") {
   111   if (lst[0]=="START:") {
   109     readyToStart=true;
   112     readyToStart=true;
   115     return;
   118     return;
   116   }
   119   }
   117 
   120 
   118   if(lst[0]=="HHNUM") {
   121   if(lst[0]=="HHNUM") {
   119     if (lst.size()<4) {
   122     if (lst.size()<4) {
   120       qWarning((QString("Net server: Bad 'HHNUM' message: ")+msg+" size="+QString("%1").arg(lst.size())).toAscii().data());
   123       qWarning() << "Net server: Bad 'HHNUM' message:" << lst;
   121       return;
   124       return;
   122     }
   125     }
   123     if(!m_hwserver->isChiefClient(this))
   126     if(!m_hwserver->isChiefClient(this))
   124     {
   127     {
   125       return; // permission denied
   128       return; // permission denied
   129     int oldTeamHHNum = it==m_hwserver->m_gameCfg.end() ? 0 : it.value()[0].toUInt();
   132     int oldTeamHHNum = it==m_hwserver->m_gameCfg.end() ? 0 : it.value()[0].toUInt();
   130     int newTeamHHNum = lst[3].toUInt();
   133     int newTeamHHNum = lst[3].toUInt();
   131     m_hwserver->hhnum+=newTeamHHNum-oldTeamHHNum;
   134     m_hwserver->hhnum+=newTeamHHNum-oldTeamHHNum;
   132 qDebug() << "HHNUM hhnum = " << m_hwserver->hhnum;
   135 qDebug() << "HHNUM hhnum = " << m_hwserver->hhnum;
   133     // create CONFIG_PARAM to save HHNUM at server from lst
   136     // create CONFIG_PARAM to save HHNUM at server from lst
   134     lst=QStringList("CONFIG_PARAM") << confstr << lst[3];
   137     QStringList tmp = lst;
   135     m_hwserver->sendOthers(this, lst.join(QString(delimeter)));
   138     tmp=QStringList("CONFIG_PARAM") << confstr << lst[3];
   136     m_hwserver->m_gameCfg[lst[1]]=lst.mid(2);
   139     m_hwserver->sendOthers(this, tmp.join(QString(delimeter)));
       
   140     m_hwserver->m_gameCfg[tmp[1]]=tmp.mid(2);
   137     return;
   141     return;
   138   }
   142   }
   139 
   143 
   140   if(lst[0]=="CONFIG_PARAM") {
   144   if(lst[0]=="CONFIG_PARAM") {
   141     if (lst.size()<3) {
   145     if (lst.size()<3) {
   142       qWarning((QString("Net server: Bad 'CONFIG_PARAM' message: ")+msg).toAscii().data());
   146       qWarning() << "Net server: Bad 'CONFIG_PARAM' message:" << lst;
   143       return;
   147       return;
   144     }
   148     }
   145 
   149 
   146     if(!m_hwserver->isChiefClient(this))
   150     if(!m_hwserver->isChiefClient(this))
   147     {
   151     {
   154     if(lst.size() < 14)
   158     if(lst.size() < 14)
   155     {
   159     {
   156       qWarning("Net server: Bad 'ADDTEAM' message");
   160       qWarning("Net server: Bad 'ADDTEAM' message");
   157 	  return;
   161 	  return;
   158     }
   162     }
   159     lst.pop_front();
   163     QStringList tmp = lst;
       
   164     tmp.pop_front();
   160 
   165 
   161     // add team ID
   166     // add team ID
   162     static unsigned int netTeamID=0;
   167     static unsigned int netTeamID=0;
   163     lst.insert(1, QString::number(++netTeamID));
   168     tmp.insert(1, QString::number(++netTeamID));
   164 
   169 
   165     // hedgehogs num count
   170     // hedgehogs num count
   166     int maxAdd=18-m_hwserver->hhnum;
   171     int maxAdd=18-m_hwserver->hhnum;
   167     if (maxAdd<=0)
   172     if (maxAdd<=0)
   168     {
   173     {
   171     }
   176     }
   172     int toAdd=maxAdd<4 ? maxAdd : 4;
   177     int toAdd=maxAdd<4 ? maxAdd : 4;
   173     m_hwserver->hhnum+=toAdd;
   178     m_hwserver->hhnum+=toAdd;
   174 qDebug() << "to add = " << toAdd << "m_hwserver->hhnum = " << m_hwserver->hhnum;
   179 qDebug() << "to add = " << toAdd << "m_hwserver->hhnum = " << m_hwserver->hhnum;
   175     // hedgehogs num config
   180     // hedgehogs num config
   176     QString hhnumCfg=QString("CONFIG_PARAM%1HHNUM+%2+%3%1%4").arg(delimeter).arg(lst[0])\
   181     QString hhnumCfg=QString("CONFIG_PARAM%1HHNUM+%2+%3%1%4").arg(delimeter).arg(tmp[0])\
   177       .arg(netTeamID)\
   182       .arg(netTeamID)\
   178       .arg(toAdd);
   183       .arg(toAdd);
   179 
   184 
   180     // creating color config for new team
   185     // creating color config for new team
   181     QString colorCfg=QString("CONFIG_PARAM%1TEAM_COLOR+%2+%3%1%4").arg(delimeter).arg(lst[0])\
   186     QString colorCfg=QString("CONFIG_PARAM%1TEAM_COLOR+%2+%3%1%4").arg(delimeter).arg(tmp[0])\
   182       .arg(netTeamID)\
   187       .arg(netTeamID)\
   183       .arg(lst.takeAt(2));
   188       .arg(tmp.takeAt(2));
   184 
   189 
   185     m_hwserver->m_gameCfg[colorCfg.split(delimeter)[1]]=colorCfg.split(delimeter).mid(2);
   190     m_hwserver->m_gameCfg[colorCfg.split(delimeter)[1]]=colorCfg.split(delimeter).mid(2);
   186     m_hwserver->m_gameCfg[hhnumCfg.split(delimeter)[1]]=hhnumCfg.split(delimeter).mid(2);
   191     m_hwserver->m_gameCfg[hhnumCfg.split(delimeter)[1]]=hhnumCfg.split(delimeter).mid(2);
   187     m_teamsCfg.push_back(lst);
   192     m_teamsCfg.push_back(tmp);
   188 
   193 
   189     m_hwserver->sendOthers(this, QString("ADDTEAM:")+delimeter+lst.join(QString(delimeter)));
   194     m_hwserver->sendOthers(this, QString("ADDTEAM:")+delimeter+tmp.join(QString(delimeter)));
   190     RawSendNet(QString("TEAM_ACCEPTED%1%2%1%3").arg(delimeter).arg(lst[0]).arg(lst[1]));
   195     RawSendNet(QString("TEAM_ACCEPTED%1%2%1%3").arg(delimeter).arg(tmp[0]).arg(tmp[1]));
   191     m_hwserver->sendAll(colorCfg);
   196     m_hwserver->sendAll(colorCfg);
   192     m_hwserver->sendAll(hhnumCfg);
   197     m_hwserver->sendAll(hhnumCfg);
   193     return;
   198     return;
   194   }
   199   }
   195 
   200 
   217     unsigned int netID=removeTeam(lst[1]);
   222     unsigned int netID=removeTeam(lst[1]);
   218     m_hwserver->sendOthers(this, QString("REMOVETEAM:")+delimeter+lst[1]+delimeter+QString::number(netID));
   223     m_hwserver->sendOthers(this, QString("REMOVETEAM:")+delimeter+lst[1]+delimeter+QString::number(netID));
   219     return;
   224     return;
   220   }
   225   }
   221 
   226 
   222   m_hwserver->sendOthers(this, msg);
   227   m_hwserver->sendOthers(this, lst.join(QString(delimeter)));
   223 }
   228 }
   224 
   229 
   225 unsigned int HWConnectedClient::removeTeam(const QString& tname)
   230 unsigned int HWConnectedClient::removeTeam(const QString& tname)
   226 {
   231 {
   227 	unsigned int netID=0;
   232 	unsigned int netID=0;
   249 }
   254 }
   250 
   255 
   251 void HWConnectedClient::RawSendNet(const QByteArray & buf)
   256 void HWConnectedClient::RawSendNet(const QByteArray & buf)
   252 {
   257 {
   253   m_client->write(buf);
   258   m_client->write(buf);
   254   m_client->write("\n", 1);
   259   m_client->write("\n\n", 2);
   255 }
   260 }
   256 
   261 
   257 QString HWConnectedClient::getClientNick() const
   262 QString HWConnectedClient::getClientNick() const
   258 {
   263 {
   259   return client_nick;
   264   return client_nick;