You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.1 KiB
Plaintext
51 lines
1.1 KiB
Plaintext
import GameServer.RpcHandlers
|
|
|
|
open Lean
|
|
|
|
structure GameServerState :=
|
|
(env : Lean.Environment)
|
|
(game : Name)
|
|
(gameDir : String)
|
|
(inventory : Array String)
|
|
(difficulty : Nat)
|
|
|
|
abbrev GameServerM := StateT GameServerState Server.Watchdog.ServerM
|
|
|
|
instance : MonadEnv GameServerM := {
|
|
getEnv := do return (← get).env
|
|
modifyEnv := fun f => do
|
|
let s ← get
|
|
set {s with env := f s.env}
|
|
}
|
|
|
|
namespace Game
|
|
open Server
|
|
open Watchdog
|
|
open Lsp
|
|
open JsonRpc
|
|
open IO
|
|
|
|
structure SetInventoryParams where
|
|
inventory : Array String
|
|
difficulty : Nat
|
|
deriving ToJson, FromJson
|
|
|
|
partial def handleServerEvent (ev : ServerEvent) : GameServerM Bool := do
|
|
match ev with
|
|
| ServerEvent.clientMsg msg =>
|
|
match msg with
|
|
| Message.notification "$/game/setInventory" params =>
|
|
let p := (← parseParams SetInventoryParams (toJson params))
|
|
let s ← get
|
|
set {s with inventory := p.inventory, difficulty := p.difficulty}
|
|
let st ← read
|
|
let workers ← st.fileWorkersRef.get
|
|
for (_, fw) in workers do
|
|
fw.stdin.writeLspMessage msg
|
|
|
|
return true
|
|
| _ => return false
|
|
| _ => return false
|
|
|
|
end Game
|