improve clientKeepLocked
This commit is contained in:
parent
10682eb882
commit
d5eaf0f567
2 changed files with 22 additions and 22 deletions
|
@ -133,18 +133,15 @@ getAuthEnv = do
|
||||||
testKeepLocked = do
|
testKeepLocked = do
|
||||||
mgr <- httpManager <$> getUrlOptions
|
mgr <- httpManager <$> getUrlOptions
|
||||||
burl <- liftIO $ parseBaseUrl "http://localhost:8080/"
|
burl <- liftIO $ parseBaseUrl "http://localhost:8080/"
|
||||||
keeplocked <- liftIO newEmptyTMVarIO
|
|
||||||
_ <- liftIO $ forkIO $ do
|
|
||||||
print "running, press enter to drop lock"
|
|
||||||
_ <- getLine
|
|
||||||
atomically $ writeTMVar keeplocked False
|
|
||||||
liftIO $ clientKeepLocked (mkClientEnv mgr burl)
|
liftIO $ clientKeepLocked (mkClientEnv mgr burl)
|
||||||
(P2P.ProtocolVersion 3)
|
(P2P.ProtocolVersion 3)
|
||||||
(B64UUID (toUUID ("lck" :: String)))
|
(B64UUID (toUUID ("lck" :: String)))
|
||||||
(B64UUID (toUUID ("cu" :: String)))
|
(B64UUID (toUUID ("cu" :: String)))
|
||||||
(B64UUID (toUUID ("su" :: String)))
|
(B64UUID (toUUID ("su" :: String)))
|
||||||
[]
|
[] $ \keeplocked -> do
|
||||||
keeplocked
|
print "running, press enter to drop lock"
|
||||||
|
_ <- getLine
|
||||||
|
atomically $ writeTMVar keeplocked False
|
||||||
|
|
||||||
testCheckPresent = do
|
testCheckPresent = do
|
||||||
mgr <- httpManager <$> getUrlOptions
|
mgr <- httpManager <$> getUrlOptions
|
||||||
|
|
33
P2P/Http.hs
33
P2P/Http.hs
|
@ -873,28 +873,31 @@ clientKeepLocked
|
||||||
-> B64UUID ClientSide
|
-> B64UUID ClientSide
|
||||||
-> B64UUID ServerSide
|
-> B64UUID ServerSide
|
||||||
-> [B64UUID Bypass]
|
-> [B64UUID Bypass]
|
||||||
-> TMVar Bool
|
-> (TMVar Bool -> IO ())
|
||||||
|
-- ^ The TMVar can be filled any number of times with True to send
|
||||||
|
-- repeated keep locked requests, eg to keep a connection alive.
|
||||||
|
-- Once filled with False, the lock will be dropped.
|
||||||
-> IO ()
|
-> IO ()
|
||||||
clientKeepLocked clientenv (ProtocolVersion ver) lckid cu su bypass keeplocked = do
|
clientKeepLocked clientenv (ProtocolVersion ver) lckid cu su bypass a = do
|
||||||
|
keeplocked <- newEmptyTMVarIO
|
||||||
|
tid <- async $ a keeplocked
|
||||||
|
let cli' = cli lckid cu bypass
|
||||||
|
(Just connectionKeepAlive) (Just keepAlive)
|
||||||
|
(S.fromStepT (unlocksender keeplocked))
|
||||||
withClientM cli' clientenv $ \case
|
withClientM cli' clientenv $ \case
|
||||||
Left err -> throwM err
|
|
||||||
Right (LockResult _ _) ->
|
Right (LockResult _ _) ->
|
||||||
liftIO $ print "end of lock connection to server"
|
wait tid
|
||||||
|
Left err -> do
|
||||||
|
wait tid
|
||||||
|
throwM err
|
||||||
where
|
where
|
||||||
unlocksender =
|
unlocksender keeplocked =
|
||||||
S.Yield (UnlockRequest False) $ S.Effect $ do
|
S.Yield (UnlockRequest False) $ S.Effect $ do
|
||||||
liftIO $ print "sent keep locked request"
|
|
||||||
return $ S.Effect $ do
|
return $ S.Effect $ do
|
||||||
stilllocked <- liftIO $ atomically $ takeTMVar keeplocked
|
stilllocked <- liftIO $ atomically $ takeTMVar keeplocked
|
||||||
if stilllocked
|
return $ if stilllocked
|
||||||
then return unlocksender
|
then unlocksender keeplocked
|
||||||
else do
|
else S.Yield (UnlockRequest True) S.Stop
|
||||||
liftIO $ print "sending unlock request"
|
|
||||||
return $ S.Yield (UnlockRequest True) S.Stop
|
|
||||||
|
|
||||||
cli' = cli lckid cu bypass
|
|
||||||
(Just connectionKeepAlive) (Just keepAlive)
|
|
||||||
(S.fromStepT unlocksender)
|
|
||||||
|
|
||||||
cli = case ver of
|
cli = case ver of
|
||||||
3 -> v3 su V3
|
3 -> v3 su V3
|
||||||
|
|
Loading…
Reference in a new issue