diff --git a/src/Simplex/Messaging/Agent.hs b/src/Simplex/Messaging/Agent.hs index c550ba04a..63f74b5b2 100644 --- a/src/Simplex/Messaging/Agent.hs +++ b/src/Simplex/Messaging/Agent.hs @@ -82,6 +82,7 @@ module Simplex.Messaging.Agent setNetworkConfig, setUserNetworkInfo, reconnectAllServers, + reconnectSMPServer, registerNtfToken, verifyNtfToken, checkNtfToken, diff --git a/src/Simplex/Messaging/Agent/Client.hs b/src/Simplex/Messaging/Agent/Client.hs index 303bb55be..2ffd6e3a4 100644 --- a/src/Simplex/Messaging/Agent/Client.hs +++ b/src/Simplex/Messaging/Agent/Client.hs @@ -32,6 +32,7 @@ module Simplex.Messaging.Agent.Client closeAgentClient, closeProtocolServerClients, reconnectServerClients, + reconnectSMPServer, closeXFTPServerClient, runSMPServerTest, runXFTPServerTest, @@ -925,6 +926,16 @@ reconnectServerClients :: ProtocolServerClient v err msg => AgentClient -> (Agen reconnectServerClients c clientsSel = readTVarIO (clientsSel c) >>= mapM_ (forkIO . closeClient_ c) +reconnectSMPServer :: AgentClient -> UserId -> SMPServer -> IO () +reconnectSMPServer c userId srv = do + cs <- readTVarIO $ smpClients c + let vs = M.foldrWithKey srvClient [] cs + mapM_ (forkIO . closeClient_ c) vs + where + srvClient (userId', srv', _) v + | userId == userId' && srv == srv' = (v :) + | otherwise = id + closeClient :: ProtocolServerClient v err msg => AgentClient -> (AgentClient -> TMap (TransportSession msg) (ClientVar msg)) -> TransportSession msg -> IO () closeClient c clientSel tSess = atomically (TM.lookupDelete tSess $ clientSel c) >>= mapM_ (closeClient_ c)