diff --git a/src/main/java/com/ntlab/irisserver/entities/Drawing.java b/src/main/java/com/ntlab/irisserver/entities/Drawing.java index 584889a..bd51375 100644 --- a/src/main/java/com/ntlab/irisserver/entities/Drawing.java +++ b/src/main/java/com/ntlab/irisserver/entities/Drawing.java @@ -6,6 +6,14 @@ public class Drawing { + // お題 + @JsonProperty("title") + private String title; + + // 作者名 + @JsonProperty("member") + private String member; + @JsonProperty("drawing") private String drawing; @@ -15,6 +23,12 @@ //----------------------------------------------------------------- // getter + public String getTitle() { + return this.title; + } + public String getMember() { + return this.member; + } public String getDrawing() { return this.drawing; } @@ -24,6 +38,8 @@ //----------------------------------------------------------------- // setter + public void setTitle(String title) {this.title = title;} + public void setMember(String member) {this.member = member;} public void setDrawing(String drawing) {this.drawing = drawing;} public void setIsDrawn(Boolean status) {this.isDrawn = status;} diff --git a/src/main/java/com/ntlab/irisserver/entities/Member.java b/src/main/java/com/ntlab/irisserver/entities/Member.java index 1afa6df..68fc6ff 100644 --- a/src/main/java/com/ntlab/irisserver/entities/Member.java +++ b/src/main/java/com/ntlab/irisserver/entities/Member.java @@ -23,7 +23,7 @@ } //----------------------------------------------------------------- - // setter + // setter0 public void setNickname(String nickname) {this.nickname = nickname;} public void setBelongs(String belongs) {this.belongs = belongs;} diff --git a/src/main/java/com/ntlab/irisserver/entities/Room.java b/src/main/java/com/ntlab/irisserver/entities/Room.java index d815e53..b77b4cf 100644 --- a/src/main/java/com/ntlab/irisserver/entities/Room.java +++ b/src/main/java/com/ntlab/irisserver/entities/Room.java @@ -1,23 +1,64 @@ package com.ntlab.irisserver.entities; +import com.fasterxml.jackson.annotation.JsonProperty; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Room { - String rid = null; - int state; - String ownerName = null; - boolean drawingTimer; - int drawingTimerTimes; - boolean gameTimer; - int gameTimerTimes; - int gameTimerFirstThinkingTimes; + @JsonProperty("rid") + public String rid; + //String rid = null; + @JsonProperty("state") + public int state; + //int state; + + @JsonProperty("ownerName") + public String ownerName; + //String ownerName = null; + + @JsonProperty("drawingTimer") + public boolean drawingTimer; + //boolean drawingTimer; + + @JsonProperty("drawingTimerTimes") + public int drawingTimerTimes; + //int drawingTimerTimes; + + @JsonProperty("gameTimer") + public boolean gameTimer; + //boolean gameTimer; + + @JsonProperty("gameTimerTimes") + public int gameTimerTimes; + //int gameTimerTimes; + + @JsonProperty("gameTimerFirstThinkingTimes") + 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()) ; @@ -25,19 +66,139 @@ } + 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) { Member m = members.get(nick); 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 void deleteMember(String nick) { + members.remove(nick); + } + + public int getStateRest() { return 0; } - public Room(String rid, String owner) { + + + public Drawing getDrawing(int dno) { + return drawings.get(dno); } + + public void putDrawing(int dno, Drawing d) { + drawings.put(dno, d); + } + + public void setDrawingTimer(boolean drawingTimer) { + this.drawingTimer = drawingTimer; + } + + public void setDrawingTimerTimes(int drawingTimerTimes) { + this.drawingTimerTimes = drawingTimerTimes; + } + + public void setGameTimer(boolean gameTimer) { + this.gameTimer = gameTimer; + } + + public void setGameTimerTimes(int gameTimerTimes) { + this.gameTimerTimes = gameTimerTimes; + } + + public void setGameTimerFirstThinkingTimes(int gameTimerFirstThinkingTimes) { + this.gameTimerFirstThinkingTimes = gameTimerFirstThinkingTimes; + } + + public boolean isDrawingTimer() { + return drawingTimer; + } + + public int getDrawingTimerTimes() { + return drawingTimerTimes; + } + + public boolean isGameTimer() { + return gameTimer; + } + + public int getGameTimerTimes() { + return gameTimerTimes; + } + + public int getGameTimerFirstThinkingTimes() { + return gameTimerFirstThinkingTimes; + } + + + } 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 daf1059..8b31b8a 100644 --- a/src/main/java/com/ntlab/irisserver/resources/MemberRest.java +++ b/src/main/java/com/ntlab/irisserver/resources/MemberRest.java @@ -17,7 +17,7 @@ public String putMember(@PathParam("rid") String rid, @PathParam("nickname") String nickname, @FormParam("belongs") String belongs, @FormParam("is-master") boolean is_master) { RoomManager rm = RoomManager.getInstance(); - Room room = rm.getRoom("rid"); + Room room = rm.getRoom(rid); List m = room.getMembers(); room.changeTeamAndMaster(nickname, belongs, is_master); return "変更しました"; @@ -29,7 +29,7 @@ public String deleteMember(@PathParam("rid") String rid, @PathParam("nickname") String nickname, @FormParam("belongs") String belongs, @FormParam("is-master") boolean is_master) { RoomManager rm = RoomManager.getInstance(); - Room room = rm.getRoom("rid"); + Room room = rm.getRoom(rid); List m = room.getMembers(); for( int 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(){ - } } diff --git a/src/main/java/utils/Base64Decode.java b/src/main/java/utils/Base64Decode.java new file mode 100644 index 0000000..a300629 --- /dev/null +++ b/src/main/java/utils/Base64Decode.java @@ -0,0 +1,10 @@ +package utils; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Base64; + +public class Base64Decode { +}