Esempio n. 1
0
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()));
}
Esempio n. 2
0
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;
    }
}