This commit is contained in:
Dmitry Zuikov 2023-01-13 10:20:44 +03:00
parent 7ba2eacdbc
commit f57b4f29c7
2 changed files with 50 additions and 0 deletions

View File

@ -70,6 +70,7 @@ library
, HBS2.Hash , HBS2.Hash
, HBS2.Merkle , HBS2.Merkle
, HBS2.Net.Messaging , HBS2.Net.Messaging
, HBS2.Net.Messaging.Fake
, HBS2.Net.Proto , HBS2.Net.Proto
, HBS2.Net.Proto.Actors.BlockInfo , HBS2.Net.Proto.Actors.BlockInfo
, HBS2.Prelude , HBS2.Prelude
@ -85,6 +86,7 @@ library
, base58-bytestring , base58-bytestring
, binary , binary
, bytestring , bytestring
, cache
, cborg , cborg
, clock , clock
, containers , containers
@ -97,6 +99,7 @@ library
, prettyprinter , prettyprinter
, safe , safe
, serialise , serialise
, stm
, text , text
, uniplate , uniplate

View File

@ -0,0 +1,47 @@
module HBS2.Net.Messaging.Fake
( FakeP2P
, newFakeP2P
, Messaging(..)
) where
import Control.Concurrent.STM (atomically) -- as STM
import Control.Concurrent.STM.TChan qualified as Chan
import Control.Concurrent.STM.TChan (TChan,newTChanIO)
import Control.Monad.IO.Class
import Data.Cache (Cache)
import Data.Cache qualified as Cache
import Data.List qualified as List
import Data.Maybe
import HBS2.Net.Proto
import HBS2.Net.Messaging
data FakeP2P peer msg =
FakeP2P
{
blocking :: Bool
, fakeP2p :: Cache peer (TChan msg)
}
newFakeP2P :: Bool -> IO (FakeP2P peer msg)
newFakeP2P block = FakeP2P block <$> Cache.newCache Nothing
instance ( IsPeer peer
) => Messaging (FakeP2P peer msg) peer msg where
sendTo bus (To whom) _ msg = liftIO do
chan <- Cache.fetchWithCache (fakeP2p bus) whom $ const newTChanIO
atomically $ Chan.writeTChan chan msg
-- NOTE: non-blocking version!
receive bus (To me) = liftIO do
Cache.fetchWithCache (fakeP2p bus)
me
(const newTChanIO)
>>= readChan
where
readChan | blocking bus = atomically . (List.singleton <$>) . Chan.readTChan
| otherwise = atomically . (maybeToList <$>) . Chan.tryReadTChan