module Blockchain.Display (
addPingCount,
setPeers,
displayMessage
) where
import Control.Monad.IO.Class
import Control.Monad.Trans.State
import qualified Blockchain.Colors as CL
import Blockchain.Context
import Blockchain.Data.Peer
import Blockchain.Format
import Blockchain.Data.Wire
setTitle::String->IO()
setTitle value = do
putStr $ "\ESC]0;" ++ value ++ "\007"
updateStatus::ContextM ()
updateStatus = do
cxt <- get
liftIO $ setTitle $
"pingCount = " ++ show (pingCount cxt)
++ ", peer count=" ++ show (length $ peers cxt)
++ ", hashes requested=" ++ show (length $ neededBlockHashes cxt)
addPingCount::ContextM ()
addPingCount = do
cxt <- get
put cxt{pingCount = pingCount cxt + 1}
updateStatus
setPeers::[Peer]->ContextM ()
setPeers p = do
cxt <- get
put cxt{peers = p}
updateStatus
prefix::Bool->String
prefix True = CL.green "msg>>>>>: "
prefix False = CL.red "msg<<<<: "
displayMessage::Bool->Message->ContextM ()
displayMessage _ Ping = return ()
displayMessage _ Pong = return ()
displayMessage _ GetPeers = return ()
displayMessage _ (Peers _) = return ()
displayMessage _ (GetBlocks blocks) = do
liftIO $ putStrLn $ CL.blue "GetBlocks: " ++ "(Requesting " ++ show (length blocks) ++ " blocks)"
displayMessage _ QqqqPacket = return ()
displayMessage outbound (BlockHashes shas) = do
liftIO $ putStrLn $ prefix outbound ++ CL.blue "BlockHashes: " ++ "(" ++ show (length shas) ++ " new hashes)"
updateStatus
displayMessage outbound (Blocks blocks) = do
liftIO $ putStrLn $ prefix outbound ++ CL.blue "Blocks: " ++ "(" ++ show (length blocks) ++ " new blocks)"
updateStatus
displayMessage outbound msg =
liftIO $ putStrLn $ (prefix outbound) ++ format msg