playframework2のwebsocketのチャットのサンプルをScalajsで書き換えてみた。

これが元のJavaScriptファイル
https://github.com/playframework/playframework/blob/2.3.0-RC1/samples/scala/websocket-chat/app/views/chatRoom.scala.js

こっちがScalajsで書き直したもの
https://github.com/xuwei-k/play-with-scalajs-example/blob/e11c55be9b440/scalajs/src/main/scala/example/ChatRoom.scala


行数多くなってるし、せっかくJSONのメッセージのcase classをクライアント側とサーバー側で共有してるのに、クライアント側でJSONからcase classに戻すところがとても残念な感じになってしまったので、だいぶ意味が無い・・・。*1他にも細かいところの書き方で改善の余地がありそう。

playのjsonのpicking*2があるらしいが
https://github.com/scala-js/scala-js-pickling/tree/9cce7359/playjson/src/main/scala/org/scalajs/spickling/playjson
よくわからなかったというか、ここまでやったら疲れたので、気が向いたらそれも試す。もしくは誰かpull reqください・・・。


追記
picking試す代わりに、scalazとargonautと無理やりBuild.scalaソースコードダウンロードして依存追加したら、とりあえず動いた
https://github.com/xuwei-k/play-with-scalajs-example/commit/599458124e9ba913e

*1:これでは、case classに戻さないで、js.Dynamicのまま扱ったほうがマシである

*2:シリアライズ、デシリアライズするためのもの