hbs2/hbs2-peer/lib/HBS2/Peer/RPC/API/Peer.hs

105 lines
2.7 KiB
Haskell

{-# Language UndecidableInstances #-}
module HBS2.Peer.RPC.API.Peer where
import HBS2.Prelude.Plated
import HBS2.Net.Messaging.Unix
import HBS2.Net.Proto.Service
import HBS2.Data.Types.Refs (HashRef(..))
import HBS2.Actors.Peer
import HBS2.Peer.RPC.Internal.Types
import Data.Time.Clock.POSIX (POSIXTime)
import Control.Monad.Reader
import Data.ByteString.Lazy (ByteString)
import Codec.Serialise
data RpcPoke
data RpcAnnounce
data RpcPing
data RpcPexInfo
data RpcPeers
data RpcFetch
data RpcLogLevel
data RpcDie
data RpcPollList
data RpcPollAdd
data RpcPollDel
data RpcDownloadList
data RpcDownloadDel
type PeerAPI = '[ RpcPoke
, RpcPing
, RpcAnnounce
, RpcFetch
, RpcPeers
, RpcPexInfo
, RpcLogLevel
, RpcDie
, RpcPollList
, RpcPollAdd
, RpcPollDel
, RpcDownloadList
, RpcDownloadDel
]
instance HasProtocol UNIX (ServiceProto PeerAPI UNIX) where
type instance ProtocolId (ServiceProto PeerAPI UNIX) = 0xDA2374610000
type instance Encoded UNIX = ByteString
decode = either (const Nothing) Just . deserialiseOrFail
encode = serialise
instance (Monad m)
=> HasRpcContext PeerAPI RPC2Context (ResponseM UNIX (ReaderT RPC2Context m)) where
-- type instance RpcContext PeerAPI = RPC2Context
getRpcContext = lift ask
type instance Input RpcDie = ()
type instance Output RpcDie = ()
type instance Input RpcPoke = ()
type instance Output RpcPoke = String
type instance Input RpcPing = PeerAddr L4Proto
type instance Output RpcPing = Bool
type instance Input RpcAnnounce = HashRef
type instance Output RpcAnnounce = ()
type instance Input RpcPexInfo = ()
type instance Output RpcPexInfo = [PeerAddr L4Proto]
type instance Input RpcPeers = ()
type instance Output RpcPeers = [(PubKey 'Sign HBS2Basic, PeerAddr L4Proto)]
type instance Input RpcFetch = HashRef
type instance Output RpcFetch = ()
type instance Input RpcPollList= ()
type instance Output RpcPollList = [(PubKey 'Sign HBS2Basic, String, Int)]
type instance Input RpcDownloadList = ()
type instance Output RpcDownloadList = [(HashRef, Integer)]
type instance Input RpcDownloadDel = HashRef
type instance Output RpcDownloadDel = ()
type instance Input RpcPollAdd = (PubKey 'Sign HBS2Basic, String, Int)
type instance Output RpcPollAdd = ()
type instance Input RpcPollDel = PubKey 'Sign HBS2Basic
type instance Output RpcPollDel = ()
type instance Input RpcLogLevel = SetLogging
type instance Output RpcLogLevel = ()
data SetLogging =
DebugOn Bool
| TraceOn Bool
deriving (Generic,Eq,Show)
instance Serialise SetLogging