Newer
Older
IrisServer / src / main / java / com / ntlab / irisserver / resources / TurnsRest.java
package com.ntlab.irisserver.resources;
import org.springframework.stereotype.Component;
import com.ntlab.irisserver.models.RoomManager;
import com.ntlab.irisserver.entities.Room;
import com.ntlab.irisserver.entities.Game;
import com.ntlab.irisserver.entities.Turn;
import com.ntlab.irisserver.entities.Cell;
import com.ntlab.irisserver.entities.Member;

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;

@Component
@Path("/rooms")


public class TurnsRest {
    //------------------------------------------------------------------------
    // rooms/{rid}/game/turns:

    @GET //現在のターンの取得
    @Path("/{rid}/game/turns")
    public Integer getTurnNumber(@PathParam("rid") String rid) {
        RoomManager rm = RoomManager.getInstance();
        Room room = rm.getRoom(rid);
        Game game = room.getGame();
        Integer tn = game.getNowTurn();

        return tn;
    }

    @POST //新しいターンの作成
    @Path("/{rid}/game/turns")
    @Produces(MediaType.APPLICATION_JSON)
    public Turn addTurns(@PathParam("rid") String rid) {

        RoomManager rm = RoomManager.getInstance();
        Room room = rm.getRoom(rid);
        Game game = room.getGame();
        game.createTurn();
        Turn t =game.getTurn(0);

        return t;
    }

    //------------------------------------------------------------------------
    // rooms/{rid}/game/turns/{tno}:

    @GET //Turnインスタンスの取得
    @Path("/{rid}/game/turns/{tno}")
    @Produces(MediaType.APPLICATION_JSON)
    public Turn getTurns(@PathParam("rid") String rid, @PathParam("tno") int tno) {

        RoomManager rm = RoomManager.getInstance();
        Room room = rm.getRoom(rid);
        Game game = room.getGame();
        Turn t = game.getTurn(tno);

        if (t == null) {
            //部屋がなければエラー
            var response = Response.status(Response.Status.NO_CONTENT);
            response.status(404).entity("部屋が存在しません");
            throw new WebApplicationException(response.build());
        }

        return t;
    }
    //------------------------------------------------------------------------
    // rooms/{rid}/game/turns/{tno}/hint:

    @PUT //ヒントと最大数を入力することで諜報員のターンに遷移する
    @Path("/{rid}/game/turns/{tno}/hint")
    public void putHint(@PathParam("rid") String rid, @PathParam("tno") int tno, @FormParam("hint") String hint, @FormParam("max") int max){

        RoomManager rm = RoomManager.getInstance();
        Room room = rm.getRoom(rid);
        Game game = room.getGame();
        Turn t = game.getTurn(tno);
        t.setHint(hint);
        t.setMax(max);
        t.setTurnstate(1);

    }

    //------------------------------------------------------------------------
    // rooms/{rid}/game/turns/{tno}/max:
/*
    @PUT //いらんかも
    @Path("/{rid}/game/turns/{tno}/max")
    public void putMax(@PathParam("rid") String rid, @PathParam("tno") int tno, @FormParam("max") int max){

        RoomManager rm = RoomManager.getInstance();
        Room room = rm.getRoom(rid);
        Game game = room.getGame();
        Turn t = game.getTurn(tno);
        t.setMax(max);

    }
*/
    //------------------------------------------------------------------------
    // rooms/{rid}/game/turns/{tno}/questions:

    @GET //カードごとの疑っている人のリストを取得...は動かなくて糞
    @Path("/{rid}/game/turns/{tno}//questions")
    @Produces(MediaType.APPLICATION_JSON)
    public List<Member>[] getqmember(@PathParam("rid") String rid, @PathParam("tno") int tno){

        RoomManager rm = RoomManager.getInstance();
        Room room = rm.getRoom(rid);
        Game game = room.getGame();
        Turn t = game.getTurn(tno);

        if (t == null) {
            //部屋がなければエラー
            var response = Response.status(Response.Status.NO_CONTENT);
            response.status(404).entity("部屋が存在しません");
            throw new WebApplicationException(response.build());
        }

        return t.getQuestionsList();
    }

    @POST //怪しいの切り替え
    @Path("/{rid}/game/turns/{tno}/questions")
    public void changeq(@PathParam("rid") String rid, @PathParam("tno") int tno, @FormParam("cno") int cno, @FormParam("nickname") String nickname){

        boolean on = true;

        RoomManager rm = RoomManager.getInstance();
        Room room = rm.getRoom(rid);
        Game game = room.getGame();
        Turn t = game.getTurn(tno);
        List<Member> list = t.getQuestions(cno);
        for(Iterator it = list.iterator(); it.hasNext();){
            Member m = (Member) it.next();
            if(m.getNickname() == nickname){
                on = false;
                break;
            }
        }
        Member member = room.getMember(nickname);
        if(on == true){
            t.addQuestions(cno, member);
        }else{
            t.delieteQuestions(cno, member);
        }

    }

    //------------------------------------------------------------------------
    // rooms/{rid}/game/turns/{tno}/openlist:

    @GET
    @Path("/{rid}/game/turns/{tno}/openlist")
    @Produces(MediaType.APPLICATION_JSON)
    public List<Integer> getOpenList(@PathParam("rid") String rid, @PathParam("tno") int tno){

        RoomManager rm = RoomManager.getInstance();
        Room room = rm.getRoom(rid);
        Game game = room.getGame();
        Turn t = game.getTurn(tno);

        return t.getOpenListAll();
    }

    @PUT //オープンリストの追加 カードをめくったときの色ごとの処理()
    @Path("/{rid}/game/turns/{tno}/openlist")
    public Integer setOpenList(@PathParam("rid") String rid, @PathParam("tno") Integer tno, @FormParam("cno")Integer cno){

        RoomManager rm = RoomManager.getInstance();
        Room room = rm.getRoom(rid);
        Game game = room.getGame();
        Turn t = game.getTurn(tno);
        Cell card = game.getCell(cno);

        t.addOpenList(cno);
        card.setIsOpen(true);

        //turnが続くかの判定
        if(card.color == "b"){
            t.setGamestate(2);
        }else if(t.getMax() <= t.getOpenListAll().size()){
            t.setGamestate(1);
            game.createTurn();
        }else if(card.color == "g"||(card.color != t.getTeam())){
            t.setGamestate(1);
            game.createTurn();
        }

        return t.getGamestate();

    }

}