mirror of https://github.com/voidlizard/hbs2
43 lines
1.1 KiB
Haskell
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
|
|
|
|
|