MyRoom::MyRoom(Server *server):QObject() { backEngine = new BackgroundEngine(); testUI = new TestUIex(NULL); this->serverModule = server; engineThr = new MyThread; backEngine->moveToThread(engineThr); engineThr->start(); //connect(backEngine,SIGNAL(askForActSIG(QList<CardEntity*>,int)),testUI,SLOT(actSLOT(QList<CardEntity*>,int))); //connect(backEngine,SIGNAL(askForReply(QList<CardEntity*>,QString,int)),testUI,SLOT(replySLOT(QList<CardEntity*>,QString,int))); //connect(backEngine,SIGNAL(askForHeal(int,int)),testUI,SLOT(healSLOT(int,int))); connect(backEngine,SIGNAL(toInforDisplay(QString)),testUI,SLOT(toDisplay(QString))); connect(serverModule,SIGNAL(seatArrangeSIG()),backEngine,SLOT(seatArrange())); connect(serverModule,SIGNAL(seatPrearrangeSIG(int,int,QString)),backEngine,SLOT(seatPrearrange(int,int,QString))); connect(this->serverModule,SIGNAL(toDisplay(QString)),this->testUI,SLOT(toDisplay(QString))); connect(backEngine,SIGNAL(sendMessageSIG(int,QString)),this->serverModule,SLOT(sendMessage(int,QString))); connect(&coder,SIGNAL(sendMessage(int,QString)),this->serverModule,SLOT(sendMessage(int,QString))); switch(serverModule->getRoleStrategy()) { case 0: connect(this->serverModule,SIGNAL(roleStrategySIG()),backEngine,SLOT(roleRandom())); break; case 1: connect(this->serverModule,SIGNAL(roleStrategySIG()),backEngine,SLOT(role3Pick1())); connect(serverModule,SIGNAL(role3Pick1ReplySIG(int,int)),backEngine,SLOT(role3Pick1Reply(int,int))); connect(serverModule,SIGNAL(gameStartSIG()),this->backEngine,SLOT(gameStart())); connect(this->serverModule,SIGNAL(roleNoticeSIG()),backEngine,SLOT(seatPostarrange())); break; case 2: connect(this->serverModule,SIGNAL(roleStrategySIG()),backEngine, SLOT(BP())); } // emit this->serverModule->toDisplayPublic("server IP:" + this->serverModule->serverAddress().toString()); emit this->serverModule->toDisplayPublic("server port:" + QString::number(this->serverModule->serverPort())); }
void Server::decoder(int id, QString message) { QStringList infor; emit this->toDisplay("receive:"); emit this->toDisplay(message); if(message == NULL) return; infor = message.split(";"); QList<int> cards; QStringList chosenCards; BatInfor ans; BatInfor action; BatInfor reply; BatInfor missileInfor; int i,howMany; switch(infor.at(0).toInt()) { case 0: emit seatPrearrangeSIG(id,infor.at(1).toInt()); break; case ACTIONCOMMAND: if(infor.at(1) == QString::number(ATTACK)) { action.reply = infor.at(1).toInt(); action.CardID = infor.at(2).toInt(); if(infor.at(3) == "") action.dstID = 0; else action.dstID = infor.at(3).toInt(); if(infor.at(4) == "") action.srcID = 0; else action.srcID = infor.at(4).toInt(); messageBuffer::writeBatInfor(action); } else if(infor.at(1) == QString::number(SPECIAL)) { action.reply = infor.at(1).toInt(); action.CardID = infor.at(2).toInt(); if(infor.at(3) == "") action.infor1 = 0; else action.infor1 = infor.at(3).toInt(); if(infor.at(4) == "") action.infor2 = 0; else action.infor2 = infor.at(4).toInt(); messageBuffer::writeBatInfor(action); } else if(infor.at(1).toInt() == MAGIC) { if(infor.at(2).toInt() == 0) { action.reply = MAGIC; action.infor1 = COMMONMAGIC; action.CardID = infor.at(3).toInt(); action.dstID = infor.at(4).toInt(); action.srcID = infor.at(5).toInt(); messageBuffer::writeBatInfor(action); } } else if(infor.at(1).toInt() == FINISH) { action.reply = FINISH; messageBuffer::writeBatInfor(action); } break; case UNACTIONAL: action.reply = UNACTIONAL; messageBuffer::writeBatInfor(action); break; case REBATCOMMAND: reply.reply = infor.at(1).toInt(); if(reply.reply != HIT) { reply.CardID = infor.at(2).toInt(); reply.dstID = infor.at(3).toInt(); reply.srcID = infor.at(4).toInt(); } messageBuffer::writeBatInfor(reply); break; case DISCARDCOMMAND: chosenCards = infor.at(1).split(","); for(int i = 0;i < chosenCards.size();i++) cards << chosenCards.at(i).toInt(); messageBuffer::writeCardInfor(cards); break; case READYBEGIN: ready[id] = true; for(int i = 0;i < ready.size();i++) if(!ready.at(i)) return; for(int i = 0;i < ready.size();i++) ready[i]=false; emit roleStrategySIG(); break; case 47: ready[id] = true; emit role3Pick1ReplySIG(id,infor.at(1).toInt()); for(int i = 0;i < ready.size();i++) if(!ready.at(i)) return; emit roleNoticeSIG(); emit gameStartSIG(); break; case WEAKCOMMAND: messageBuffer::writeInfor(infor[1].toInt()); break; case MISSILECOMMAND: missileInfor.reply = infor.at(1).toInt(); if(missileInfor.reply != 2) missileInfor.CardID = infor.at(2).toInt(); if(missileInfor.reply == 0) missileInfor.dstID = infor.at(3).toInt(); messageBuffer::writeBatInfor(missileInfor); break; case ANSFORCROSS: messageBuffer::writeInfor(infor[1].toInt()); break; case ANSFORSKILL: messageBuffer::writeInfor(infor[1].toInt()); break; //连续技 case 101: action.reply=ATTACKSKILL; action.CardID = infor.at(1).toInt(); action.dstID = infor.at(2).toInt(); action.srcID = infor.at(3).toInt(); action.infor1=101; messageBuffer::writeBatInfor(action); break; //剑影 case 102: action.reply=ATTACKSKILL; action.CardID = infor.at(1).toInt(); action.dstID = infor.at(2).toInt(); action.srcID = infor.at(3).toInt(); action.infor1 = 102; action.infor2= infor.at(4).toInt(); messageBuffer::writeBatInfor(action); break; case BOWLADY_ANSFORTRANSFIXTION: ans.reply = infor[1].toInt(); if(ans.reply != 0) ans.CardID = infor[2].toInt(); messageBuffer::writeBatInfor(ans); break; case BOWLADY_TRAP: ans.reply = MAGIC; ans.infor1 = BOWLADY_TRAP; ans.CardID = infor[1].toInt(); ans.dstID = infor[2].toInt(); ans.srcID = infor[3].toInt(); messageBuffer::writeBatInfor(ans); break; case BOWLADY_SNIPE: ans.reply = MAGIC; ans.infor1 = BOWLADY_SNIPE; ans.infor2 = infor[1].toInt(); ans.dstID = infor[2].toInt(); ans.srcID = infor[3].toInt(); messageBuffer::writeBatInfor(ans); break; //封印法术 case 401: ans.reply = MAGIC; ans.infor1 = 401; ans.CardID = infor[1].toInt(); ans.dstID = infor[2].toInt(); ans.srcID = infor[3].toInt(); messageBuffer::writeBatInfor(ans); break; //五系束缚 case 402: ans.reply = MAGIC; ans.infor1 = 402; ans.infor2 = infor[1].toInt(); ans.dstID = infor[2].toInt(); ans.srcID = infor[3].toInt(); messageBuffer::writeBatInfor(ans); break; //封印破碎 case 403: ans.reply = MAGIC; ans.infor1 = 403; ans.infor2 = infor[1].toInt(); ans.dstID = infor[2].toInt(); ans.srcID=infor[3].toInt(); ans.CardID = infor[4].toInt(); messageBuffer::writeBatInfor(ans); break; //法术激荡 case 404: action.reply=ATTACKSKILL; action.CardID = infor.at(1).toInt(); action.dstID = infor.at(2).toInt(); action.srcID = infor.at(3).toInt(); action.infor1=404; messageBuffer::writeBatInfor(action); break; //水影 case 502: messageBuffer::writeMsg(message.remove(0,4)); break; //潜行 case 503: messageBuffer::writeInfor(infor[1].toInt()); break; //冰霜祷言 case 601: ans.dstID=infor[1].toInt(); messageBuffer::writeBatInfor(ans); break; //治疗术 case 602: ans.reply=MAGIC; ans.CardID=infor[1].toInt(); ans.dstID=infor[2].toInt(); ans.srcID=infor[3].toInt(); ans.infor1=602; messageBuffer::writeBatInfor(ans); break; //治愈之光 case 603: ans.reply=MAGIC; ans.CardID=infor[1].toInt(); ans.srcID=infor[2].toInt(); ans.infor1=603; int n; n=infor[3].toInt(); ans.infor2=n; ans.dstID=infor[4].toInt(); if (n>1) ans.infor3=infor[5].toInt(); if (n>2) ans.infor4=infor[6].toInt(); messageBuffer::writeBatInfor(ans); break; //怜悯 case 604: messageBuffer::writeInfor(infor[1].toInt()); break; //圣疗 case 605: ans.reply=MAGIC; ans.infor4=infor[1].toInt(); ans.dstID=infor[2].toInt(); ans.infor1=605; ans.infor2=infor[3].toInt(); ans.infor3=infor[4].toInt(); ans.srcID=infor[5].toInt(); messageBuffer::writeBatInfor(ans); break; //风之洁净 case 701: ans.reply=MAGIC; ans.infor1=701; ans.CardID = infor[1].toInt(); ans.dstID = infor[2].toInt(); ans.srcID= infor[3].toInt(); ans.infor2=infor[4].toInt(); messageBuffer::writeBatInfor(ans); break; //天使祝福 case 702: ans.reply = MAGIC; ans.infor1 = 702; ans.CardID = infor[1].toInt(); ans.srcID= infor[2].toInt(); ans.infor2= infor[3].toInt(); ans.dstID = infor[4].toInt(); if(ans.infor2==2) ans.infor3=infor[5].toInt(); messageBuffer::writeBatInfor(ans); break; //天使之墙 case 703: ans.reply = MAGIC; ans.infor1 = 703; ans.CardID = infor[1].toInt(); ans.dstID = infor[2].toInt(); ans.srcID = infor[3].toInt(); messageBuffer::writeBatInfor(ans); break; //天使之歌 case 704: ans.reply=infor[1].toInt(); if(ans.reply==1) { ans.infor1=infor[2].toInt(); ans.dstID=infor[3].toInt(); ans.CardID=infor[4].toInt(); } messageBuffer::writeBatInfor(ans); break; //神之庇护 case 705: ans.reply=infor[1].toInt(); if(ans.reply==1) { ans.infor1=infor[2].toInt(); ans.infor2= infor[3].toInt(); } messageBuffer::writeBatInfor(ans); break; //天使羁绊 case 707: ans.dstID=infor[1].toInt(); messageBuffer::writeBatInfor(ans); break; //天使祝福(给牌) case 751: howMany=infor[1].toInt(); for(i=0;i<howMany;i++) cards<<infor[i+2].toInt(); messageBuffer::writeCardInfor(cards); break; //魔弹融合(回合内) case 801: ans.reply = MAGIC; ans.CardID = infor[1].toInt(); ans.infor1 = 801; ans.dstID = infor[2].toInt(); ans.srcID = infor[3].toInt(); messageBuffer::writeBatInfor(ans); break; //魔弹融合(回合外) case 802: missileInfor.reply = 802; missileInfor.CardID = infor.at(1).toInt(); missileInfor.dstID = infor.at(2).toInt(); messageBuffer::writeBatInfor(missileInfor); break; //魔爆冲击 case 803: ans.reply = MAGIC; ans.infor1 = 803; ans.CardID = infor[1].toInt(); ans.dstID = infor[2].toInt(); ans.infor2 = infor[3].toInt(); ans.srcID = infor[4].toInt(); messageBuffer::writeBatInfor(ans); break; //毁灭风暴 case 804: ans.reply = MAGIC; ans.infor1 = 804; ans.dstID = infor[1].toInt(); ans.infor2 = infor[2].toInt(); ans.srcID = infor[3].toInt(); messageBuffer::writeBatInfor(ans); break; //魔爆冲击(弃牌) case 851: ans.reply=infor[1].toInt(); if(ans.reply) ans.CardID=infor[2].toInt(); messageBuffer::writeBatInfor(ans); break; //修罗连斩 case 901: action.reply=ATTACKSKILL; action.CardID = infor.at(1).toInt(); action.dstID = infor.at(2).toInt(); action.srcID = infor.at(3).toInt(); action.infor1=901; messageBuffer::writeBatInfor(action); break; //暗影流星 case 902: ans.reply = MAGIC; ans.infor1 = 902; ans.CardID = infor[1].toInt(); ans.infor2 = infor[2].toInt(); ans.dstID = infor[3].toInt(); ans.srcID = infor[4].toInt(); messageBuffer::writeBatInfor(ans); break; //暗影凝聚 case 903: messageBuffer::writeInfor(infor[1].toInt()); break; //元素法术 case 1101: action.reply=MAGIC; action.infor1=1101; action.infor2=infor.at(1).toInt(); action.dstID = infor.at(2).toInt(); action.srcID = infor.at(3).toInt(); action.infor3=infor.at(4).toInt(); action.CardID=infor.at(5).toInt(); if(action.infor3==2) action.infor4=infor.at(6).toInt(); if(action.infor2==2) action.infor5=infor.at(5+action.infor3).toInt(); messageBuffer::writeBatInfor(action); break; //元素点燃 case 1102: action.reply=MAGIC; action.infor1=1102; action.dstID = infor.at(1).toInt(); action.srcID = infor.at(2).toInt(); messageBuffer::writeBatInfor(action); break; //月光 case 1103: action.reply=MAGIC; action.infor1=1103; action.dstID = infor.at(1).toInt(); action.srcID = infor.at(2).toInt(); messageBuffer::writeBatInfor(action); break; //欺诈 case 1201: action.reply=ATTACKSKILL; action.CardID = infor.at(1).toInt(); action.dstID = infor.at(2).toInt(); action.srcID = infor.at(3).toInt(); action.infor1=1201; action.infor2=infor.at(4).toInt(); action.infor3=infor.at(5).toInt(); action.infor4=infor.at(6).toInt(); if(action.infor2==3) action.infor5=infor.at(7).toInt(); messageBuffer::writeBatInfor(action); break; //偷天换日 case 1202: action.reply = MAGIC; action.infor1 = 1202; action.infor2 = infor[1].toInt(); action.srcID = infor[2].toInt(); messageBuffer::writeBatInfor(action); break; //特殊加工 case 1203: action.reply = MAGIC; action.infor1 = 1203; action.infor2 = infor[1].toInt(); action.srcID = infor[2].toInt(); messageBuffer::writeBatInfor(action); break; //冒险者天堂 case 1204: action.reply = SPECIAL; action.infor1 = 1204; action.dstID = infor[1].toInt(); action.srcID = infor[2].toInt(); action.infor2 = infor[3].toInt(); action.infor3 = infor[4].toInt(); messageBuffer::writeBatInfor(action); break; //挑衅 case 2101: ans.reply = MAGIC; ans.infor1 = 2101; ans.dstID = infor[1].toInt(); ans.srcID = infor[2].toInt(); messageBuffer::writeBatInfor(ans); break; //禁断之力 case 2102: messageBuffer::writeInfor(infor[1].toInt()); break; } }