thread in a state

This commit is contained in:
Joey Hess 2024-07-08 14:00:23 -04:00
parent 69c4f07ab0
commit 0bdee626ad
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
2 changed files with 62 additions and 46 deletions

View file

@ -22,5 +22,7 @@ cmd = command "p2phttp" SectionPlumbing
paramNothing (withParams seek) paramNothing (withParams seek)
seek :: CmdParams -> CommandSeek seek :: CmdParams -> CommandSeek
seek ["server"] = liftIO $ Warp.run 8080 p2pHttpApp seek ["server"] = liftIO $ do
st <- mkP2PHttpServerState
Warp.run 8080 (p2pHttpApp st)
seek ["client"] = liftIO testClientLock seek ["client"] = liftIO testClientLock

View file

@ -79,45 +79,45 @@ type P2PHttpAPI
p2pHttpAPI :: Proxy P2PHttpAPI p2pHttpAPI :: Proxy P2PHttpAPI
p2pHttpAPI = Proxy p2pHttpAPI = Proxy
p2pHttpApp :: Application p2pHttpApp :: P2PHttpServerState -> Application
p2pHttpApp = serve p2pHttpAPI serveP2pHttp p2pHttpApp = serve p2pHttpAPI . serveP2pHttp
serveP2pHttp :: Server P2PHttpAPI serveP2pHttp :: P2PHttpServerState -> Server P2PHttpAPI
serveP2pHttp serveP2pHttp st
= serveGet = serveGet st
:<|> serveGet :<|> serveGet st
:<|> serveGet :<|> serveGet st
:<|> serveGet :<|> serveGet st
:<|> serveCheckPresent :<|> serveCheckPresent st
:<|> serveCheckPresent :<|> serveCheckPresent st
:<|> serveCheckPresent :<|> serveCheckPresent st
:<|> serveCheckPresent :<|> serveCheckPresent st
:<|> serveRemove id :<|> serveRemove st id
:<|> serveRemove id :<|> serveRemove st id
:<|> serveRemove dePlus :<|> serveRemove st dePlus
:<|> serveRemove dePlus :<|> serveRemove st dePlus
:<|> serveRemoveBefore :<|> serveRemoveBefore st
:<|> serveGetTimestamp :<|> serveGetTimestamp st
:<|> servePut id :<|> servePut st id
:<|> servePut id :<|> servePut st id
:<|> servePut dePlus :<|> servePut st dePlus
:<|> servePut dePlus Nothing :<|> servePut st dePlus Nothing
:<|> servePutOffset id :<|> servePutOffset st id
:<|> servePutOffset id :<|> servePutOffset st id
:<|> servePutOffset dePlus :<|> servePutOffset st dePlus
:<|> serveLockContent :<|> serveLockContent st
:<|> serveLockContent :<|> serveLockContent st
:<|> serveLockContent :<|> serveLockContent st
:<|> serveLockContent :<|> serveLockContent st
:<|> serveKeepLocked :<|> serveKeepLocked st
:<|> serveKeepLocked :<|> serveKeepLocked st
:<|> serveKeepLocked :<|> serveKeepLocked st
:<|> serveKeepLocked :<|> serveKeepLocked st
:<|> serveGetGeneric :<|> serveGetGeneric st
type GetGenericAPI = StreamGet NoFraming OctetStream (SourceIO B.ByteString) type GetGenericAPI = StreamGet NoFraming OctetStream (SourceIO B.ByteString)
serveGetGeneric :: B64Key -> Handler (S.SourceT IO B.ByteString) serveGetGeneric :: P2PHttpServerState -> B64Key -> Handler (S.SourceT IO B.ByteString)
serveGetGeneric = undefined serveGetGeneric = undefined
type GetAPI type GetAPI
@ -130,7 +130,8 @@ type GetAPI
(Headers '[DataLengthHeader] (SourceIO B.ByteString)) (Headers '[DataLengthHeader] (SourceIO B.ByteString))
serveGet serveGet
:: B64Key :: P2PHttpServerState
-> B64Key
-> Maybe (B64UUID ClientSide) -> Maybe (B64UUID ClientSide)
-> Maybe (B64UUID ServerSide) -> Maybe (B64UUID ServerSide)
-> [B64UUID Bypass] -> [B64UUID Bypass]
@ -165,7 +166,8 @@ type CheckPresentAPI
:> Post '[JSON] CheckPresentResult :> Post '[JSON] CheckPresentResult
serveCheckPresent serveCheckPresent
:: B64Key :: P2PHttpServerState
-> B64Key
-> B64UUID ClientSide -> B64UUID ClientSide
-> B64UUID ServerSide -> B64UUID ServerSide
-> [B64UUID Bypass] -> [B64UUID Bypass]
@ -197,7 +199,8 @@ type RemoveAPI result
:> Post '[JSON] result :> Post '[JSON] result
serveRemove serveRemove
:: (RemoveResultPlus -> t) :: P2PHttpServerState
-> (RemoveResultPlus -> t)
-> B64Key -> B64Key
-> B64UUID ClientSide -> B64UUID ClientSide
-> B64UUID ServerSide -> B64UUID ServerSide
@ -232,7 +235,8 @@ type RemoveBeforeAPI
:> Post '[JSON] RemoveResult :> Post '[JSON] RemoveResult
serveRemoveBefore serveRemoveBefore
:: B64Key :: P2PHttpServerState
-> B64Key
-> B64UUID ClientSide -> B64UUID ClientSide
-> B64UUID ServerSide -> B64UUID ServerSide
-> [B64UUID Bypass] -> [B64UUID Bypass]
@ -265,7 +269,8 @@ type GetTimestampAPI
:> Post '[JSON] GetTimestampResult :> Post '[JSON] GetTimestampResult
serveGetTimestamp serveGetTimestamp
:: B64UUID ClientSide :: P2PHttpServerState
-> B64UUID ClientSide
-> B64UUID ServerSide -> B64UUID ServerSide
-> [B64UUID Bypass] -> [B64UUID Bypass]
-> Handler GetTimestampResult -> Handler GetTimestampResult
@ -299,7 +304,8 @@ type PutAPI result
:> Post '[JSON] result :> Post '[JSON] result
servePut servePut
:: (PutResultPlus -> t) :: P2PHttpServerState
-> (PutResultPlus -> t)
-> Maybe Integer -> Maybe Integer
-> B64Key -> B64Key
-> B64UUID ClientSide -> B64UUID ClientSide
@ -346,7 +352,8 @@ type PutOffsetAPI result
:> Post '[JSON] result :> Post '[JSON] result
servePutOffset servePutOffset
:: (PutOffsetResultPlus -> t) :: P2PHttpServerState
-> (PutOffsetResultPlus -> t)
-> B64Key -> B64Key
-> B64UUID ClientSide -> B64UUID ClientSide
-> B64UUID ServerSide -> B64UUID ServerSide
@ -382,7 +389,8 @@ type LockContentAPI
:> Post '[JSON] LockResult :> Post '[JSON] LockResult
serveLockContent serveLockContent
:: B64Key :: P2PHttpServerState
-> B64Key
-> B64UUID ClientSide -> B64UUID ClientSide
-> B64UUID ServerSide -> B64UUID ServerSide
-> [B64UUID Bypass] -> [B64UUID Bypass]
@ -423,7 +431,8 @@ type KeepLockedAPI
:> Post '[JSON] LockResult :> Post '[JSON] LockResult
serveKeepLocked serveKeepLocked
:: B64Key :: P2PHttpServerState
-> B64Key
-> B64UUID ClientSide -> B64UUID ClientSide
-> B64UUID ServerSide -> B64UUID ServerSide
-> [B64UUID Bypass] -> [B64UUID Bypass]
@ -431,7 +440,7 @@ serveKeepLocked
-> Maybe KeepAlive -> Maybe KeepAlive
-> S.SourceT IO UnlockRequest -> S.SourceT IO UnlockRequest
-> Handler LockResult -> Handler LockResult
serveKeepLocked k cu su _ _ _ unlockrequeststream = do serveKeepLocked _st k cu su _ _ _ unlockrequeststream = do
_ <- liftIO $ S.unSourceT unlockrequeststream go _ <- liftIO $ S.unSourceT unlockrequeststream go
return (LockResult False) return (LockResult False)
where where
@ -518,6 +527,11 @@ testClientLock = do
[] []
keeplocked keeplocked
data P2PHttpServerState = P2PHttpServerState
mkP2PHttpServerState :: IO P2PHttpServerState
mkP2PHttpServerState = return P2PHttpServerState
type ClientUUID req = QueryParam' '[req] "clientuuid" (B64UUID ClientSide) type ClientUUID req = QueryParam' '[req] "clientuuid" (B64UUID ClientSide)
type ServerUUID req = QueryParam' '[req] "serveruuid" (B64UUID ServerSide) type ServerUUID req = QueryParam' '[req] "serveruuid" (B64UUID ServerSide)