]> dgit.raspbian.org Git - git-annex.git/commitdiff
improve types
authorJoey Hess <joeyh@joeyh.name>
Mon, 17 Jun 2024 16:44:08 +0000 (12:44 -0400)
committerJoey Hess <joeyh@joeyh.name>
Mon, 17 Jun 2024 16:44:08 +0000 (12:44 -0400)
Command/P2PStdIO.hs
P2P/Proxy.hs

index 3662f5601de9e24f88f65caff5d9d2535bf3efd0..c02673f89c086137291fb83d99638ce651e75c91 100644 (file)
@@ -61,9 +61,10 @@ performLocal theiruuid servermode = do
 
 performProxy :: UUID -> P2P.ServerMode -> Remote -> CommandPerform
 performProxy clientuuid servermode remote = do
-       clientside <- ClientSide
-               <$> liftIO (mkRunState $ Serving clientuuid Nothing)
-               <*> pure (stdioP2PConnection Nothing)
+       clientrunst <- liftIO (mkRunState $ Serving clientuuid Nothing)
+       let clientside = ClientSide $
+               liftIO . runNetProto clientrunst
+                       (stdioP2PConnection Nothing)
        getClientProtocolVersion remote clientside 
                (withclientversion clientside)
                protoerrhandler
@@ -83,7 +84,7 @@ performProxy clientuuid servermode remote = do
        connectremote clientmaxversion cont = 
                openP2PShellConnection' remote clientmaxversion >>= \case
                        Just conn@(P2P.IO.OpenConnection (remoterunst, remoteconn, _)) ->
-                               cont (RemoteSide remoterunst remoteconn (Remote.uuid remote))
+                               cont (RemoteSide (liftIO . runNetProto remoterunst remoteconn) (Remote.uuid remote))
                                        `finally` liftIO (closeP2PShellConnection conn)
                        _  -> giveup "Unable to connect to remote."
 
index 2c68f40e5879682a991aada80342be4a741064ad..2d9a575d4de33e69266bce87fb3a4de5c4692caf 100644 (file)
@@ -15,8 +15,10 @@ import P2P.IO
 import qualified Remote
 import Utility.Metered (nullMeterUpdate)
 
-data ClientSide = ClientSide RunState P2PConnection
-data RemoteSide = RemoteSide RunState P2PConnection UUID
+type ProtoRunner = forall a. Proto a -> Annex (Either ProtoFailure a)
+
+data ClientSide = ClientSide ProtoRunner
+data RemoteSide = RemoteSide ProtoRunner UUID
 
 {- To keep this module limited to P2P protocol actions,
  - all other actions that a proxy needs to do are provided
@@ -49,10 +51,8 @@ getClientProtocolVersion
        -> ClientSide
        -> (Maybe (ProtocolVersion, Maybe Message) -> Annex r)
        -> ProtoErrorHandled Annex r
-getClientProtocolVersion remote (ClientSide clientrunst clientconn) cont protoerrhandler =
-       protoerrhandler cont $
-               liftIO $ runNetProto clientrunst clientconn $
-                       getClientProtocolVersion' remote
+getClientProtocolVersion remote (ClientSide client) cont protoerrhandler =
+       protoerrhandler cont $ client $ getClientProtocolVersion' remote
 
 getClientProtocolVersion'
        :: Remote
@@ -87,7 +87,7 @@ proxy
        -- ^ non-VERSION message that was received from the client when
        -- negotiating protocol version, and has not been responded to yet
        -> ProtoErrorHandled Annex r
-proxy proxydone proxymethods servermode clientside remoteside othermessage protoerrhandler = do
+proxy proxydone proxymethods servermode (ClientSide client) (RemoteSide remote remoteuuid) othermessage protoerrhandler = do
        case othermessage of
                Just message -> proxyclientmessage (Just message)
                Nothing -> do
@@ -95,12 +95,6 @@ proxy proxydone proxymethods servermode clientside remoteside othermessage proto
                        protoerrhandler proxynextclientmessage $ 
                                client $ net $ sendMessage $ VERSION v
   where
-       ClientSide clientrunst clientconn = clientside
-       RemoteSide remoterunst remoteconn remoteuuid = remoteside
-       
-       remote = liftIO . runNetProto remoterunst remoteconn
-       client = liftIO . runNetProto clientrunst clientconn
-
        protocolversion = either (const defaultProtocolVersion) id
                <$> remote (net getProtocolVersion)