Upgrade to Pro — share decks privately, control downloads, hide ads and more …

UnityアプリをSpringbootのWebSocketでつないでみた

 UnityアプリをSpringbootのWebSocketでつないでみた

2017.5.20 JJUG CCC 2017 SpringのLT大会用の資料です。

masanori_msl

May 18, 2017
Tweet

More Decks by masanori_msl

Other Decks in Programming

Transcript

  1. Spring bootでWebSocketを使う Using WebSocket to build an interactive web application

    – Spring https://spring.io/guides/gs/messaging-stomp- websocket/ このサンプルではSTOMP over WebSocketを 使って通信している
  2. What's STOMP? • Simple (or Streaming) Text Orientated Messaging Protocolの略

    • 接続確立時にメッセージの宛先をSubscribeし、 Client側やServer側からメッセージを送信すると、 Subscriberはそのメッセージを受け取る
  3. STOMPを使わずに通信する(C#) using UnityEngine; using WebSocketSharp; [Serializable] public class ObjectStatus {

    public float PositionX; public float PositionY; public float PositionZ; } public class WebSocketCtrl : MonoBehaviour { private WebSocket wsocket; private ObjectStatus objectStatus; private bool connected;
  4. private void Start() { objectStatus = new ObjectStatus(); wsocket =

    new WebSocket("ws://localhost:8080/ws"); // イベント追加. wsocket.OnOpen += (sender, e) => connected = true; // 接続確立時. wsocket.OnClose += (sender, e) => connected = false; // 切断時. wsocket.OnMessage += (sender, e) => // メッセージ受信時. { // メッセージ受信時の処理.受け取った値を変換. var status = JsonUtility.FromJson<ObjectStatus>(e.Data); }; // Serverに接続. wsocket.Connect (); } private void Update() { if (Input.GetMouseButton(1))
  5. { // 右クリックでドラッグした時にメッセージを送信. objectStatus.PositionX = 1.0f; objectStatus.PositionY = 1.0f; objectStatus.PositionZ

    = 1.0f; if (connected) { var json = JsonUtility.ToJson(objectStatus); wsocket.Send (json); // メッセージの送信. } } } private void OnDestroy() { wsocket.Close(); // アプリを閉じる前に接続を閉じる. } }
  6. Config class @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer {

    @Override public void registerWebSocketHandlers( WebSocketHandlerRegistry registry) { // Handlerを追加してイベントを受信できるようにする. registry.addHandler(new MessageHandler(), "/ws"); } @Bean public WebSocketHandler messageHandler() { return new MessageHandler(); } }
  7. Handler class public class MessageHandler extends TextWebSocketHandler { private ArrayList<WebSocketSession>

    users; public MessageHandler(){ users = new ArrayList<>(); } @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { // 接続が確立されたら呼ばれる. if(uses.stream() .noneMatch(user -> user.getId().equals(session.getId()))){ users.add(session); } }
  8. @Override public void handleTextMessage(WebSocketSession session, TextMessage message) { // メッセージを受信したら送信元以外に送る.

    users.stream() .filter(user -> !user.getId().equals(session.getId())) .forEach(user -> { try{ user.sendMessage(message); } catch (IOException ex){ } }); } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
  9. TextWebSocketHandler public class TextWebSocketHandler extends AbstractWebSocketHandler { @Override protected void

    handleBinaryMessage(WebSocketSession session, BinaryMessage message) { try { session.close(CloseStatus.NOT_ACCEPTABLE. withReason(“Binary messages not supported")); } catch (IOException ex) { // ignore } } }
  10. Spring Framework Spring徹底入門 (http://www.shoeisha.co.jp/book/detail/9784798142470) WebSocket 26. WebSocket Support - Spring

    (https://docs.spring.io/spring/docs/current/spring- framework-reference/html/websocket.html) Windows 8 のネットワーク接続 - Windows 8 と WebSocket プロトコル - MSDN (https://msdn.microsoft.com/ja-jp/magazine/jj863133.aspx) WebSocketについて調べてみた。 - Nao Minami’s Blog (http://south37.hatenablog.com/entry/2014/09/07/WebSocketについて調べてみた。) websocket-sharp - sta - GitHub (https://github.com/sta/websocket-sharp) STOMP STOMP (https://stomp.github.io/stomp-specification-1.2.html) 参考
  11. STOMP Over WebSocket (http://jmesnil.net/stomp-websocket/doc/) Using WebSocket to build an interactive

    web application - Spring (https://spring.io/guides/gs/messaging-stomp-websocket/) Spring 4.3 WebSocket関連の主な変更点(+簡易アプリ作成!!) - Qiita (http://qiita.com/kazuki43zoo/items/f2eac11f94e2afc7c964) 6. STOMPを使ってみる — Spring Bootキャンプ ハンズオン資料 1.0.0-SNAPSHOT ドキュメン ト (http://spring-boot-camp.readthedocs.io/ja/latest/06-STOMP.html) Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう! - SlideShare (https://www.slideshare.net/javawomen/spring-bootweb-62247552) Unity JSON 形式にシリアライズ - Unity - マニュアル (https://docs.unity3d.com/ja/540/Manual/JSONSerialization.html) 参考