diff --git a/src/main/java/com/ntlab/irisserver/WebSocketConfig.java b/src/main/java/com/ntlab/irisserver/WebSocketConfig.java index 20edbf3..82e30ea 100644 --- a/src/main/java/com/ntlab/irisserver/WebSocketConfig.java +++ b/src/main/java/com/ntlab/irisserver/WebSocketConfig.java @@ -15,6 +15,9 @@ //registry.addHandler(helloWorldWebSocket2(), "/hello-websocket2"); } + // ローカルで実行するときは、下のBean定義が必要。 + // サーバーで実行するときは、下のBean定義が不要。 + // これで2週間くらい躓いた... // @Bean // public HelloWebSocket helloWebSocket() { // return new HelloWebSocket(); diff --git a/src/main/java/com/ntlab/irisserver/resources/StateRest.java b/src/main/java/com/ntlab/irisserver/resources/StateRest.java index 59fdf0d..48a22ae 100644 --- a/src/main/java/com/ntlab/irisserver/resources/StateRest.java +++ b/src/main/java/com/ntlab/irisserver/resources/StateRest.java @@ -48,21 +48,21 @@ //rid,nickname,stateを引数として持ってくる public void putState(@PathParam("rid") String rid,@FormParam("nickname") String nickname,@FormParam("state") Integer state) throws IOException { - RoomManager rm = RoomManager.getInstance(); - Room room = rm.getRoom(rid); - - - if(nickname.equals(room.ownerName)){ //nicknameがownerだった場合 - room.setState(state); //部屋の情報を変更 - if (state == 2) { - String path; - path = applicationContext.getResource("file:").getFile().getAbsolutePath()+"/apache-tomcat-9.0.10/webapps/irisdata/keywords.txt"; - //path = "C:\\Users\\student\\IdeaProjects\\IrisServer\\src\\main\\java\\com\\ntlab\\irisserver\\tmp\\keywords.txt"; - KeywordManager km = KeywordManager.getInstance(); - String[] keywords = km.getKeywords(path); - Game game = new Game(room, keywords); - } - } +// RoomManager rm = RoomManager.getInstance(); +// Room room = rm.getRoom(rid); +// +// +// if(nickname.equals(room.ownerName)){ //nicknameがownerだった場合 +// room.setState(state); //部屋の情報を変更 +// if (state == 2) { +// String path; +// path = applicationContext.getResource("file:").getFile().getAbsolutePath()+"/apache-tomcat-9.0.10/webapps/irisdata/keywords.txt"; +// //path = "C:\\Users\\student\\IdeaProjects\\IrisServer\\src\\main\\java\\com\\ntlab\\irisserver\\tmp\\keywords.txt"; +// KeywordManager km = KeywordManager.getInstance(); +// String[] keywords = km.getKeywords(path); +// Game game = new Game(room, keywords); +// } +// } } diff --git a/src/main/java/com/ntlab/irisserver/websockets/GameStartWebSocket.java b/src/main/java/com/ntlab/irisserver/websockets/GameStartWebSocket.java new file mode 100644 index 0000000..dd9fd03 --- /dev/null +++ b/src/main/java/com/ntlab/irisserver/websockets/GameStartWebSocket.java @@ -0,0 +1,86 @@ +package com.ntlab.irisserver.websockets; + +import com.ntlab.irisserver.entities.Game; +import com.ntlab.irisserver.entities.Room; +import com.ntlab.irisserver.models.KeywordManager; +import com.ntlab.irisserver.models.RoomManager; +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; + +import javax.websocket.*; +import javax.websocket.server.ServerEndpoint; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Queue; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + + +@ServerEndpoint("/game-start") +public class GameStartWebSocket implements ApplicationContextAware { + + private ApplicationContext applicationContext; + + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + this.applicationContext = applicationContext; + } + + private static final Queue sessions = new ConcurrentLinkedQueue<>(); + + static { + ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(); + } + + @OnMessage + public String onMessage(String message) throws IOException { + // rid,nickname,2 でメッセージが来るはず + System.out.println("WebSocketで受信したメッセージ/ " + message); + + String[] msgs = message.split(","); + String rid = msgs[0]; + String nickname = msgs[1]; + Integer state = Integer.parseInt(msgs[2]); + System.out.println(rid); + System.out.println(nickname); + System.out.println(state); + + RoomManager rm = RoomManager.getInstance(); + Room room = rm.getRoom(rid); + + if(nickname.equals(room.ownerName)){ //nicknameがownerだった場合 + room.setState(state); //部屋の情報を変更 + if (state == 2) { + String path; + path = applicationContext.getResource("file:").getFile().getAbsolutePath()+"/apache-tomcat-9.0.10/webapps/irisdata/keywords.txt"; + KeywordManager km = KeywordManager.getInstance(); + String[] keywords = km.getKeywords(path); + Game game = new Game(room, keywords); + } + } + + return "WebSocketでメッセージを正常に受信しました: " + message; + } + + @OnError + public void onError(Throwable th) { + System.out.println("WebSocketエラーが発生/ " + th.getMessage()); + } + + @OnOpen + public void onOpen(Session session) { + System.out.println("WebSocketセッション確立"); + sessions.add(session); + } + + @OnClose + public void onClose(Session session) { + System.out.println("WebSocketセッション終了"); + sessions.remove(session); + } + + +}