Commit 49bb1c8 1 parent 5a4742e commit 49bb1c8 Copy full SHA for 49bb1c8
File tree 2 files changed +21
-3
lines changed
2 files changed +21
-3
lines changed Original file line number Diff line number Diff line change @@ -28,18 +28,36 @@ newAiSession = do
28
28
}
29
29
return (sessionId, newSession)
30
30
31
+ releaseAiSession :: AiSessionId -> Checkers ()
32
+ releaseAiSession sessionId = do
33
+ var <- askSupervisor
34
+ ok <- liftIO $ atomically $ stateTVar var $ \ st -> do
35
+ case M. lookup sessionId (ssAiSessions st) of
36
+ Nothing -> (False , st)
37
+ Just session ->
38
+ let st' = st {
39
+ ssAiSessions = M. delete sessionId (ssAiSessions st)
40
+ }
41
+ in (True , st')
42
+ when (not ok) $
43
+ throwError NoSuchAiSession
44
+
45
+ returnBoard :: AiSession -> Board -> Checkers ()
46
+ returnBoard session board =
47
+ liftIO $ putMVar (aiResult session) board
48
+
31
49
signalStopAiSession :: AiSessionId -> Checkers ()
32
50
signalStopAiSession sessionId = do
33
51
var <- askSupervisor
34
- st <- liftIO $ atomically $ readTVar var
52
+ st <- liftIO $ readTVarIO var
35
53
case M. lookup sessionId (ssAiSessions st) of
36
54
Nothing -> throwError NoSuchAiSession
37
55
Just session -> liftIO $ void $ tryPutMVar (aiStopSignal session) ()
38
56
39
57
getAiSessionStatus :: AiSessionId -> Checkers AiSessionStatus
40
58
getAiSessionStatus sessionId = do
41
59
var <- askSupervisor
42
- st <- liftIO $ atomically $ readTVar var
60
+ st <- liftIO $ readTVarIO var
43
61
case M. lookup sessionId (ssAiSessions st) of
44
62
Nothing -> return NoAiHere
45
63
Just state -> do
Original file line number Diff line number Diff line change @@ -762,7 +762,7 @@ letAiMove separateThread gameId side mbBoard = do
762
762
$ debug " Messages: {}" (Single $ show messages)
763
763
afterMoveSelected ai storage gameId side board' aiMove
764
764
queueNotifications (getGameId game) messages
765
- liftIO $ putMVar (aiResult aiSession) board'
765
+ returnBoard aiSession board'
766
766
afterMove gameId side
767
767
return ()
768
768
return (Just sessionId)
You can’t perform that action at this time.
0 commit comments