hbs2/hbs2-peer/app/ByPassWorker.hs

58 lines
1.1 KiB
Haskell

module ByPassWorker where
import HBS2.Prelude
import HBS2.Clock
import HBS2.Actors.Peer
import HBS2.Net.Messaging.Encrypted.ByPass
import HBS2.System.Logger.Simple
import HBS2.Net.Proto.Peer
import HBS2.Net.Proto.PeerExchange
import HBS2.Net.Proto.Sessions
import HBS2.Net.Proto.Types
import PeerTypes
import Control.Monad
import UnliftIO
byPassWorker :: ( ForByPass e
, MonadUnliftIO m
, MonadIO m
, HasPeer e
, HasPeerLocator e m
, Sessions e (KnownPeer e) m
, Expires (SessionKey e (KnownPeer e))
)
=> ByPass e w
-> PeerEnv e
-> m ()
byPassWorker bp penv = do
tstat <- async $ forever do
stats <- getStat bp
info $ "ByPass stats"
<> line
<> indent 2 (pretty stats)
<> line
pause @'Seconds 60
link tstat
gc <- async $ withPeerM penv $ forever do
pips <- getKnownPeers
cleanupByPassMessaging bp pips
pause @'Seconds 600
link gc
void $ waitAnyCatchCancel [tstat, gc]