diff --git a/src/main/java/com/ntlab/irisserver/entities/Room.java b/src/main/java/com/ntlab/irisserver/entities/Room.java index b0c6d02..8ff70e3 100644 --- a/src/main/java/com/ntlab/irisserver/entities/Room.java +++ b/src/main/java/com/ntlab/irisserver/entities/Room.java @@ -40,12 +40,25 @@ public int gameTimerFirstThinkingTimes; //int gameTimerFirstThinkingTimes; - - + @JsonProperty("redMaster") + private Member redMaster; + @JsonProperty("blueMaster") + private Member blueMaster; Map members= new HashMap<>(); Map drawings = new HashMap<>(); + + public Room(String rid, String owner) { + this.rid=rid; + ownerName=owner; + drawingTimer = false; + drawingTimerTimes = 0; + gameTimer = true; + gameTimerTimes = 30; + gameTimerFirstThinkingTimes = 10; + } + public List getMembers() { List memberslist = new ArrayList(members.values()) ; @@ -53,8 +66,69 @@ } + public List getDrawings() { + + List drawingslist = new ArrayList(drawings.values()) ; + return drawingslist; + + } + + //プレイヤーの情報を変更する public void changeTeamAndMaster(String nick, String belongs, boolean isMaster) { + + //変更対象の情報を取得 + Member m = members.get(nick); + + //変更先のチームに既に所属している場合は変更なし + if(!(m.getBelongs().equals(belongs))) { + + //1チームの最大人数は8人 + //変更先のチームの人数を数える + int memberscount = 0; + List membersList = new ArrayList(members.values()) ; + + for(Member mem :membersList) { + if(mem.getBelongs().equals(belongs)) { + memberscount++; + } + } + + //変更先のチームが満員であれば変更不可 + if(memberscount >= 8) { + return; + }else{ + m.setBelongs(belongs); + } + + } + + //マスターを変更 + if(belongs.equals("r")) { + + //赤チームのマスターをメンバーに変更 + if(redMaster != null) { + redMaster.setMaster(false); + } + + //変更対象を赤チームのマスターに変更 + m.setMaster(true); + redMaster = m; + } + + if(belongs.equals("b")) { + + //青チームのマスターをメンバーに変更 + if(blueMaster != null) { + blueMaster.setMaster(false); + } + + //変更対象を赤チームのマスターに変更 + m.setMaster(true); + blueMaster = m; + } + + } public Member getMember(String nick) { @@ -62,27 +136,16 @@ return m; } - public void addMember(String nick){ + public void addMember(String nick) { Member m=new Member(nick); m.setNickname(nick); members.put(nick,m); } - public int getStateRest(){ + public int getStateRest() { return 0; } - public Room(){ - drawingTimer = false; - drawingTimerTimes = 0; - gameTimer = true; - gameTimerTimes = 30; - gameTimerFirstThinkingTimes = 10; - } - public Room(String rid, String owner) { - this.rid=rid; - ownerName=owner; - } public Drawing getDrawing(int dno) { return drawings.get(dno); } @@ -132,4 +195,5 @@ } + } diff --git a/src/main/java/com/ntlab/irisserver/models/RoomManager.java b/src/main/java/com/ntlab/irisserver/models/RoomManager.java index 0ad8cf7..e3fef6e 100644 --- a/src/main/java/com/ntlab/irisserver/models/RoomManager.java +++ b/src/main/java/com/ntlab/irisserver/models/RoomManager.java @@ -12,14 +12,14 @@ private static RoomManager theInstance = null; private Map rooms = new HashMap(); - public static RoomManager getInstance(){ - if(theInstance == null){ + public static RoomManager getInstance() { + if(theInstance == null) { theInstance = new RoomManager(); } return theInstance; } - public Room createRoom(String owner){ + public Room createRoom(String owner) { UUID uuid = UUID.randomUUID(); String rid = uuid.toString(); //uuid型からstring型に変換 Room r = new Room(rid, owner); @@ -27,12 +27,12 @@ return r; } - public Room getRoom(String rid){ + public Room getRoom(String rid) { Room r = rooms.get(rid); return r; } - public void deleteRoom(String rid){ + public void deleteRoom(String rid) { rooms.remove(rid); } diff --git a/src/main/java/com/ntlab/irisserver/resources/DrawingsRest.java b/src/main/java/com/ntlab/irisserver/resources/DrawingsRest.java index 988cac0..22db30f 100644 --- a/src/main/java/com/ntlab/irisserver/resources/DrawingsRest.java +++ b/src/main/java/com/ntlab/irisserver/resources/DrawingsRest.java @@ -2,10 +2,7 @@ import org.springframework.stereotype.Component; -import javax.ws.rs.FormParam; -import javax.ws.rs.GET; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; +import javax.ws.rs.*; @Component @Path("/rooms") @@ -13,20 +10,20 @@ @GET @Path("/{rid}/game/drawings") - public String getDrawings(@FormParam("rid") int rid) { + public String getDrawings(@PathParam("rid") int rid) { // 絵のデータ取得 return null; } @GET @Path("/{rid}/game/drawings/{dno}") - public String getDrawing(@FormParam("rid") int rid, @FormParam("dno") String dno ) { + public String getDrawing(@PathParam("rid") int rid, @PathParam("dno") String dno ) { return null; } @PUT @Path("/{rid}/game/drawings/{dno}") - public String putDrawing(@FormParam("rid") int rid, @FormParam("dno") String dno ) { + public String putDrawing(@PathParam("rid") int rid, @PathParam("dno") String dno ) { return null; } diff --git a/src/main/java/com/ntlab/irisserver/resources/MemberRest.java b/src/main/java/com/ntlab/irisserver/resources/MemberRest.java index 94157dd..a910a8c 100644 --- a/src/main/java/com/ntlab/irisserver/resources/MemberRest.java +++ b/src/main/java/com/ntlab/irisserver/resources/MemberRest.java @@ -30,7 +30,7 @@ @PUT public String putMember(@PathParam("rid") String rid, @FormParam("nickname") String nickname) { RoomManager rm = RoomManager.getInstance(); - Room room = rm.getRoom("rid"); + Room room = rm.getRoom(rid); List m = room.getMembers(); return "変更しました"; } @@ -40,7 +40,7 @@ @DELETE public String deleteMember(@PathParam("rid") String rid, @FormParam("nickname") String nickname) { RoomManager rm = RoomManager.getInstance(); - Room room = rm.getRoom("rid"); + Room room = rm.getRoom(rid); List m = room.getMembers(); for( i = 0; i < 10; i++ ) { Member name = m.get(i); diff --git a/src/main/java/com/ntlab/irisserver/resources/MembersRest.java b/src/main/java/com/ntlab/irisserver/resources/MembersRest.java new file mode 100644 index 0000000..41533dc --- /dev/null +++ b/src/main/java/com/ntlab/irisserver/resources/MembersRest.java @@ -0,0 +1,11 @@ +package com.ntlab.irisserver.resources; + +import org.springframework.stereotype.Component; + +import javax.ws.rs.Path; + +@Component +@Path("MembersRest") +public class MembersRest { + +} diff --git a/src/main/java/com/ntlab/irisserver/resources/RoomsRest.java b/src/main/java/com/ntlab/irisserver/resources/RoomsRest.java new file mode 100644 index 0000000..6f426a7 --- /dev/null +++ b/src/main/java/com/ntlab/irisserver/resources/RoomsRest.java @@ -0,0 +1,33 @@ +package com.ntlab.irisserver.resources; +import org.springframework.stereotype.Component; +import com.ntlab.irisserver.entities.Room; +import com.ntlab.irisserver.models.RoomManager; + +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; + +@Component +@Path("/rooms") +@Produces(MediaType.APPLICATION_JSON) + +public class RoomsRest { + + @POST + @Path("/") + public Room makeRooms(@FormParam("nickname") String ownername){ + RoomManager rm = RoomManager.getInstance(); + Room room = rm.createRoom(ownername); + return room; + } + + @GET + @Path("/{rid}") + public Room getRoomMember(@PathParam("rid") String rid){ + RoomManager rm = RoomManager.getInstance(); + Room room = rm.getRoom(rid); + + return room; + } + +} + diff --git a/src/main/java/com/ntlab/irisserver/resources/SettingsRest.java b/src/main/java/com/ntlab/irisserver/resources/SettingsRest.java index 7448c2b..344e615 100644 --- a/src/main/java/com/ntlab/irisserver/resources/SettingsRest.java +++ b/src/main/java/com/ntlab/irisserver/resources/SettingsRest.java @@ -1,36 +1,44 @@ package com.ntlab.irisserver.resources; +import com.ntlab.irisserver.entities.Room; +import com.ntlab.irisserver.models.RoomManager; import org.springframework.stereotype.Component; import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; @Component @Path("rooms") public class SettingsRest { - //お絵描きの制限時間、単位は秒、初期値は10 - int drawingTimerTimes = 10; - //ゲーム画面での諜報員が考える時間の長さ、単位は秒、初期値30 - int gameTimerTimes = 30; - //最初のヒントの追加考察時間、単位は秒、初期値10 - int gameTimerFirstThinkingTimes = 10; - boolean drawingTimer = false; - boolean gameTimer = true; - /* RoomManager rm = RoomManager.getInstance(); - Room room = rm.getRoom(); - */ - @GET - @Path("/{rid}/settings") - public Object GetSettings(@PathParam("rid") String rid){ - return "drawingTime:" + drawingTimer + ",\n" + - "drawingTimerTimes:" + drawingTimerTimes + ",\n" + - "gameTimer:" + gameTimer +",\n" + - "gameTimerTimes:" + gameTimerTimes + ",\n" + - "gameTimerInitializeTimes:" + gameTimerFirstThinkingTimes; +//------------------------------------------------------------------------------------ + //GET:設定情報の入手 + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("/{rid}/settings") + public Object GetSettings(@PathParam("rid") String rid) { + + Room r = rm.getRoom(rid); + + //部屋が存在しないとき + var response = Response.status(Response.Status.NO_CONTENT); + if(r == null) { + response.status(404).entity("部屋が存在しません"); + throw new WebApplicationException(response.build()); + } + else return + "drawingTime:" + r.isDrawingTimer()+ ",\n" + + "drawingTimerTimes:" + r.getDrawingTimerTimes() + ",\n" + + "gameTimer:" + r.isGameTimer() +",\n" + + "gameTimerTimes:" + r.getGameTimerTimes() + ",\n" + + "gameTimerInitializeTimes:" + r.getGameTimerFirstThinkingTimes(); } +//---------------------------------------------------------------------------------------------------- + //PUT:設定値の変更 @PUT @Path("/{rid}/settings") public void PutSettings(@PathParam("rid") String rid, @@ -38,18 +46,23 @@ @FormParam("drawingTimerTimes") int dTimerTimes, @FormParam("gameTimer") boolean gTimer, @FormParam("gameTimerTimes") int gTimerTimes, - @FormParam("gameTimerFirstThinkingTimes") int gTimerFTTimes){ - drawingTimer = dTimer; - drawingTimerTimes = dTimerTimes; - gameTimer = gTimer; - gameTimerTimes = gTimerTimes; - gameTimerFirstThinkingTimes =gTimerFTTimes; - + @FormParam("gameTimerFirstThinkingTimes") int gTimerFTTimes) { + + Room r = rm.getRoom(rid); + + //部屋がある時、値を変更 + if(r != null) { + r.setDrawingTimer(dTimer); + r.setDrawingTimerTimes(dTimerTimes); + r.setGameTimer(gTimer); + r.setGameTimerTimes(gTimerTimes); + r.setGameTimerFirstThinkingTimes(gTimerFTTimes); + }else{ + //部屋がなければエラー + var response = Response.status(Response.Status.NO_CONTENT); + response.status(404).entity("部屋が存在しません"); + throw new WebApplicationException(response.build()); + } } - public void DrawingSetting(){ - } - - public void GameSetting(){ - } }