mirror of https://github.com/voidlizard/hbs2
hbs2-peer fetch -p to exit on Ctrl-c or q keys
This commit is contained in:
parent
83a73e7e0d
commit
304e04038a
|
@ -136,30 +136,30 @@ main = flip runContT pure do
|
||||||
|
|
||||||
setupLogger
|
setupLogger
|
||||||
|
|
||||||
origStderr <- liftIO $ dup stdError
|
-- origStderr <- liftIO $ dup stdError
|
||||||
(readEnd, writeEnd) <- liftIO createPipe
|
-- (readEnd, writeEnd) <- liftIO createPipe
|
||||||
liftIO $ dupTo writeEnd stdError
|
-- liftIO $ dupTo writeEnd stdError
|
||||||
liftIO $ closeFd writeEnd
|
-- liftIO $ closeFd writeEnd
|
||||||
|
|
||||||
rStderr <- liftIO $ fdToHandle readEnd
|
-- rStderr <- liftIO $ fdToHandle readEnd
|
||||||
origHandle <- liftIO $ fdToHandle origStderr
|
-- origHandle <- liftIO $ fdToHandle origStderr
|
||||||
|
|
||||||
liftIO $ hSetBuffering origHandle NoBuffering
|
-- liftIO $ hSetBuffering origHandle NoBuffering
|
||||||
|
|
||||||
-- liftIO $ IO.hPutStr origHandle "\n"
|
-- -- liftIO $ IO.hPutStr origHandle "\n"
|
||||||
ContT $ withAsync $ liftIO $ forever do
|
-- ContT $ withAsync $ liftIO $ forever do
|
||||||
-- pause @'Seconds 0.25
|
-- -- pause @'Seconds 0.25
|
||||||
wut <- IO.hGetContents rStderr <&> lines
|
-- wut <- IO.hGetContents rStderr <&> lines
|
||||||
for_ wut $ \s -> do
|
-- for_ wut $ \s -> do
|
||||||
IO.hPutStr origHandle (replicate 100 ' ')
|
-- IO.hPutStr origHandle (replicate 100 ' ')
|
||||||
IO.hPutStr origHandle "\r"
|
-- IO.hPutStr origHandle "\r"
|
||||||
IO.hPutStr origHandle s
|
-- IO.hPutStr origHandle s
|
||||||
IO.hPutStr origHandle "\r"
|
-- IO.hPutStr origHandle "\r"
|
||||||
pause @'Seconds 0.05
|
-- pause @'Seconds 0.05
|
||||||
|
|
||||||
ContT $ bracket none $ const do
|
ContT $ bracket none $ const do
|
||||||
IO.hPutStr origHandle (replicate 100 ' ')
|
-- IO.hPutStr origHandle (replicate 100 ' ')
|
||||||
IO.hPutStr origHandle "\rdone\n"
|
-- IO.hPutStr origHandle "\rdone\n"
|
||||||
silence
|
silence
|
||||||
|
|
||||||
lift $ void $ installHandler sigPIPE Ignore Nothing
|
lift $ void $ installHandler sigPIPE Ignore Nothing
|
||||||
|
|
|
@ -85,6 +85,7 @@ import HBS2.Peer.Proto.LWWRef.Internal
|
||||||
import RPC2(RPC2Context(..))
|
import RPC2(RPC2Context(..))
|
||||||
|
|
||||||
import Data.Config.Suckless.Script hiding (optional)
|
import Data.Config.Suckless.Script hiding (optional)
|
||||||
|
import Data.Config.Suckless.Almost.RPC
|
||||||
|
|
||||||
import Codec.Serialise as Serialise
|
import Codec.Serialise as Serialise
|
||||||
import Control.Concurrent (myThreadId)
|
import Control.Concurrent (myThreadId)
|
||||||
|
@ -122,8 +123,10 @@ import System.IO
|
||||||
import System.Mem
|
import System.Mem
|
||||||
import System.Metrics
|
import System.Metrics
|
||||||
import System.Posix.Process
|
import System.Posix.Process
|
||||||
|
import System.Posix.Signals
|
||||||
import Control.Monad.Trans.Cont
|
import Control.Monad.Trans.Cont
|
||||||
|
|
||||||
|
|
||||||
import UnliftIO (MonadUnliftIO(..))
|
import UnliftIO (MonadUnliftIO(..))
|
||||||
import UnliftIO.Exception qualified as U
|
import UnliftIO.Exception qualified as U
|
||||||
-- import UnliftIO.STM
|
-- import UnliftIO.STM
|
||||||
|
@ -133,6 +136,9 @@ import UnliftIO.Concurrent (getNumCapabilities)
|
||||||
import Streaming.Prelude qualified as S
|
import Streaming.Prelude qualified as S
|
||||||
|
|
||||||
import Graphics.Vty qualified as Vty
|
import Graphics.Vty qualified as Vty
|
||||||
|
import Graphics.Vty.Input qualified as Vty
|
||||||
|
import Graphics.Vty.Input hiding (Event)
|
||||||
|
import Graphics.Vty (Mode(..),setMode,outputIface,inputIface)
|
||||||
import Graphics.Vty.Platform.Unix qualified as Vty
|
import Graphics.Vty.Platform.Unix qualified as Vty
|
||||||
|
|
||||||
import Control.Concurrent.Async (ExceptionInLinkedThread(..))
|
import Control.Concurrent.Async (ExceptionInLinkedThread(..))
|
||||||
|
@ -202,7 +208,6 @@ data PeerOpts =
|
||||||
|
|
||||||
makeLenses 'PeerOpts
|
makeLenses 'PeerOpts
|
||||||
|
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = do
|
main = do
|
||||||
|
|
||||||
|
@ -336,6 +341,7 @@ runCLI = do
|
||||||
|
|
||||||
pure $ flip runContT pure do
|
pure $ flip runContT pure do
|
||||||
|
|
||||||
|
|
||||||
client <- ContT $ withRPCMessaging rpc
|
client <- ContT $ withRPCMessaging rpc
|
||||||
|
|
||||||
self <- runReaderT (ownPeer @UNIX) client
|
self <- runReaderT (ownPeer @UNIX) client
|
||||||
|
@ -355,11 +361,14 @@ runCLI = do
|
||||||
void $ callService @RpcFetch peerAPI h
|
void $ callService @RpcFetch peerAPI h
|
||||||
|
|
||||||
liftIO do
|
liftIO do
|
||||||
|
|
||||||
when pro $ flip runContT pure do
|
when pro $ flip runContT pure do
|
||||||
cfg <- pure $ Vty.defaultConfig
|
cfg <- pure $ Vty.defaultConfig
|
||||||
vty <- ContT $ bracket (Vty.mkVty cfg) Vty.shutdown
|
vty <- ContT $ bracket (Vty.mkVty cfg) Vty.shutdown
|
||||||
|
|
||||||
fix \next -> do
|
let input = inputIface vty & Vty.eventChannel
|
||||||
|
|
||||||
|
poller <- ContT $ withAsync $ fix \next -> do
|
||||||
miss <- findMissedBlocks sto h
|
miss <- findMissedBlocks sto h
|
||||||
|
|
||||||
let l = length miss
|
let l = length miss
|
||||||
|
@ -378,10 +387,20 @@ runCLI = do
|
||||||
let pic = Vty.picForImage $ Vty.string Vty.defAttr msg
|
let pic = Vty.picForImage $ Vty.string Vty.defAttr msg
|
||||||
liftIO $ Vty.update vty pic
|
liftIO $ Vty.update vty pic
|
||||||
|
|
||||||
unless (l == 0) do
|
when (l > 0) do
|
||||||
pause @'Seconds 2
|
pause @'Seconds 2
|
||||||
next
|
next
|
||||||
|
|
||||||
|
let exitNicely = cancel poller
|
||||||
|
|
||||||
|
inp <- ContT $ withAsync $ forever do
|
||||||
|
atomically (readTChan input) >>= \case
|
||||||
|
InputEvent (EvKey (KChar 'c') [MCtrl]) -> exitNicely
|
||||||
|
InputEvent (EvKey (KChar 'q') []) -> exitNicely
|
||||||
|
_ -> none
|
||||||
|
|
||||||
|
void $ waitAnyCatchCancel [poller, inp]
|
||||||
|
liftIO $ Vty.shutdown vty
|
||||||
|
|
||||||
pPing = do
|
pPing = do
|
||||||
rpc <- pRpcCommon
|
rpc <- pRpcCommon
|
||||||
|
|
Loading…
Reference in New Issue