package com.ntlab.irisserver.resources; import com.ntlab.irisserver.entities.RoomJson; import com.ntlab.irisserver.models.RoomManager; import com.ntlab.irisserver.entities.Room; import com.ntlab.irisserver.entities.Member; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.Collections; import javax.ws.rs.*; import java.util.List; import java.util.Random; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @Component @Path("/rooms") public class MembersRest { public static void membershuffle(String rid, List<Member> m) { RoomManager rm = RoomManager.getInstance(); Room room = rm.getRoom(rid); //List<Member>をshuffleする Collections.shuffle(m); for(int i=0; i < 10; i++){ //ListのMember人数以上になればbreakする if(i >= m.size())break; //各Memberの情報取ってくる Member info = m.get(i); //Listの0番目と1番目をチームマスターにする if(i==0){ info.setMaster(true); room.changeTeamAndMaster(info.getNickname(), "r", true); }else if(i==1){ info.setMaster(true); room.changeTeamAndMaster(info.getNickname(), "b", true); }else{ info.setMaster(false); } //Listの偶数番目を"r"(赤)に、奇数番目を"b"(青)にする if(i % 2 == 0){ info.setBelongs("r"); }else{ info.setBelongs("b"); } } } //ランダムにチーム編成を送り、全員の役職を変更する @PUT @Path("/{rid}/members") @Produces(MediaType.APPLICATION_JSON) public void putMembers(@PathParam("rid") String rid, @FormParam("nickname") String nickname) { RoomManager rm = RoomManager.getInstance(); Room room = rm.getRoom(rid); List<Member> gm = room.getMembers(); //引数で取ってきたnicknameがownerかどうか確認 String owner = room.getOwnerName(); if(nickname.equals(owner)) { //全員の役職を変更 membershuffle(rid, gm); }else{ var response = Response.status(401).entity("あなたはオーナーではありません"); throw new WebApplicationException(response.build()); } } //自分のnicknameを送り、Roomに追加 @POST @Path("/{rid}/members") @Produces(MediaType.APPLICATION_JSON) public RoomJson postMembers(@PathParam("rid") String rid, @FormParam("nickname") String nickname) { RoomManager rm = RoomManager.getInstance(); Room room = rm.getRoom(rid); List<Member> gm = room.getMembers(); RoomJson rj = new RoomJson(room); //引数で取ってきたnicknameがListに存在しているか確認 if(room.getMember(nickname)==null && gm.size() < 10 ){ room.addMember(nickname); } else { var response = Response.status(401).entity("満席です"); throw new WebApplicationException(response.build()); } return rj; } }