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 } |
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; |