Description
Gore&Ash module for high level network synchronization.
Description
Please see README.md
README.md
gore-and-ash-sync
The module provides facilities of high level synchronizing for Gore&Ash engine.
The module depends on:
Installing
Add following to your stack.yml
to packages
section:
- location:
git: https://github.com/Teaspot-Studio/gore-and-ash-sync.git
commit: <PLACE HERE FULL HASH OF LAST COMMIT>
When defining you application stack, add SyncT
:
type AppStack = ModuleStack [LoggingT, ActorT, NetworkT, SyncT, ... other modules ... ] IO
Unfortunately deriving for SyncMonad
isn't work (bug of GHC 7.10.3), so you need meddle with some boilerplate while defining SyncMonad
instance for your application monad wrapper:
newtype AppMonad a = AppMonad (AppStack a)
deriving (Functor, Applicative, Monad, MonadFix, MonadIO, MonadThrow, MonadCatch LoggingMonad, NetworkMonad)
instance SyncMonad AppMonad where
getSyncIdM = AppMonad . getSyncIdM
getSyncTypeRepM = AppMonad . getSyncTypeRepM
registerSyncIdM = AppMonad . registerSyncIdM
addSyncTypeRepM a b = AppMonad $ addSyncTypeRepM a b
syncScheduleMessageM peer ch i mt msg = AppMonad $ syncScheduleMessageM peer ch i mt msg
syncSetLoggingM = AppMonad . syncSetLoggingM
syncSetRoleM = AppMonad . syncSetRoleM
syncGetRoleM = AppMonad syncGetRoleM
syncRequestIdM a b = AppMonad $ syncRequestIdM a b