2017-08-25 13 views
0

私はYesochでパチス的なボードゲームを実装しようとしています。現在、HaskellのコードはAjax経由でボードの現在の状態を受け取り、それを使って(例えば、新しいピースがボードに入るかどうか、ゲームが終了するかどうかなどを計算して)、クライアントが使用できるJSONとして返しますビューを更新します。Yesodの状態を維持する

実際、私はクライアントに状態を保ち、Haskellには変更がないという問題を回避しています。他の言語では、おそらく変数gameStateを宣言し、サーバ側のコードを変更してクライアントに返しますが、Haskellでは...私は完全に何かが不足している可能性があります。私はそれがハスケルになると経験から遠いです。

私は可能な限りクライアントサイドでやりたいと思っています。私はHaskell: Yesod and stateを見つけましたが、実際にそれを理解できませんでした。したがって、問題は残っています。私のソリューションよりもゲームの状態を処理するための方法はありますか?

+2

はい、これを行うより良い方法があります。たとえば、データベース内のすべてのクライアント状態を維持し、クライアント要求時にクライアント状態を取得/変更することができます(getにはIDのみが必要で、ID +チェンジセットをポストする)。 ['persistent'](https://www.yesodweb.com/book/persistent)は、' Yesod'でこれを行うための「デフォルト」の方法ですが、自分のソリューションをロールしたり、必要に応じて何かを使うことができます。 – Cubic

答えて

4

これはかなり簡単です。 Yesodの機械は、Foundationというデータ型を中心に回転します。スキャフォールディングでは、このデータ型も同じ名前です。

たとえば、状態を表すレコードでこのデータ型を拡張する場合は、MVar YourStateを入力します。

Handlerアクションでは、y <- getYesodを使用してFoundation値を取得し、そこからMVarを抽出し、あなたの意志でそれを使用/変更することができます。

関連する問題