hbs2/hbs2-peer/app/RPC2/Peers.hs

39 lines
942 B
Haskell

{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# Language UndecidableInstances #-}
module RPC2.Peers where
import HBS2.Actors.Peer
import HBS2.Data.Types.Peer
import HBS2.Net.Proto.Types
import HBS2.Net.Proto.Service
import HBS2.Peer.Proto.Peer
import HBS2.Net.Proto.Sessions
import HBS2.Prelude.Plated
import PeerTypes
import HBS2.Peer.RPC.Internal.Types
import HBS2.Peer.RPC.API.Peer
import Control.Monad
import Lens.Micro.Platform
import Data.Maybe
instance (MonadIO m, HasRpcContext PeerAPI RPC2Context m) => HandleMethod m RpcPeers where
handleMethod _ = do
co <- getRpcContext @PeerAPI
withPeerM (rpcPeerEnv co) $ do
ps <- getKnownPeers @L4Proto
r <- forM ps $ \p -> do
mpde <- find (KnownPeerKey p) id
maybe1 mpde (pure Nothing) $ \pde -> do
pa <- toPeerAddr p
let k = view peerSignKey pde
pure $ Just (k, pa)
pure $ catMaybes r