Skip to content

Core module for gore-and-ash for high level API of network actor synchronization

License

Notifications You must be signed in to change notification settings

Teaspot-Studio/gore-and-ash-sync

Repository files navigation

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 

About

Core module for gore-and-ash for high level API of network actor synchronization

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published