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