package com.ntlab.irisserver.resources; import com.ntlab.irisserver.entities.Drawing; import com.ntlab.irisserver.entities.Game; import com.ntlab.irisserver.entities.Room; import com.ntlab.irisserver.models.RoomManager; import com.ntlab.irisserver.utils.Base64Decode; import org.springframework.context.ApplicationContextAware; import org.springframework.beans.BeansException; import org.springframework.stereotype.Component; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import java.io.IOException; @Component @Path("/rooms") public class DrawingsRest implements ApplicationContextAware { private org.springframework.context.ApplicationContext applicationContext; public void setApplicationContext(org.springframework.context.ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } // お絵描きの終了判定 @GET @Path("/{rid}/game/drawings") public String getDrawings(@PathParam("rid") String rid) { // 絵のデータ取得 // 一旦必要のない方向性で行く return null; } // 絵のデータ取得(パスを渡せば良い) @GET @Path("/{rid}/game/drawings/{dno}") @Produces(MediaType.APPLICATION_JSON) public Drawing getDrawing(@PathParam("rid") String rid, @PathParam("dno") int dno ) { RoomManager rm = RoomManager.getInstance(); Room room = rm.getRoom(rid); Game game = room.getGame(); Drawing drawing = game.getDrawing(dno); return drawing; } // 描いた絵を送る @PUT @Path("/{rid}/game/drawings/{dno}") @Produces(MediaType.APPLICATION_JSON) public String putDrawing(@PathParam("rid") String rid, @PathParam("dno") int dno, @FormParam("drawing") String drawingStr ) { String pathDirectory = ""; String drawingPath = ""; try { pathDirectory = applicationContext.getResource("file:").getFile().getAbsolutePath() + "/apache-tomcat-9.0.10/webapps/irisdata/image"; System.out.println("kota0210/保存前のディレクトリのパス:" + pathDirectory.toString()); System.out.println("kota0210/クライアントから届いたBASE64の文字列"+ drawingStr.toString()); // utilsのBase64Decodeにデコードしてもらって、そのついでに保存してもらう drawingPath = Base64Decode.saveAsFile(rid, dno, pathDirectory, drawingStr); System.out.println("kota0210/base64Decodeは成功。drawingPath完成→"+ drawingPath.toString()); RoomManager rm = RoomManager.getInstance(); System.out.println("kota0210/roomManagerインスタンスできた"); Room room = rm.getRoom(rid); System.out.println("kota0210/roomインスタンスできた"); Game game = room.getGame(); System.out.println("kota0210/gameインスタンスできた"); // 絵の情報を上書き Drawing drawing = game.getDrawing(dno); System.out.println("kota0210/drawingインスタンスできた。nullの可能性もあるやつ。"+drawing); if (drawing == null) { drawing = new Drawing(); System.out.println("kota0210/nullだったからdrawingをnewした"); } drawing.setDrawing(drawingPath); System.out.println("kota0210/drawingのpathをセットした"+drawing.getDrawing()); game.putDrawing(dno, drawing); System.out.println("kota0210/drawingをgameへセットした"+drawing.getDrawing()); } catch (IOException e) { e.printStackTrace(); throw new WebApplicationException(500); } System.out.println("画像データの追加完了。これがパス:" + drawingPath); return "画像保存完了"; } }