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

43 lines
1.1 KiB
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.Net.Proto.Peer
import HBS2.Net.Proto.Sessions
import HBS2.Prelude.Plated
import HBS2.Net.Proto.Definition()
import PeerTypes
import HBS2.Peer.RPC.Internal.Types
import RPC2.Peer.API
import Control.Monad
import Lens.Micro.Platform
import Data.Maybe
instance (MonadIO m, HasRpcContext PeerAPI RPC2Context m) => HandleMethod m RpcPeers where
type instance Input RpcPeers = ()
type instance Output RpcPeers = [(PubKey 'Sign HBS2Basic, PeerAddr L4Proto)]
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