packages feed

raketka-1.1: src/Control/Distributed/Raketka/Impl/Inst.hs

module Control.Distributed.Raketka.Impl.Inst where

import Data.ByteString
import Data.Set as S
import Data.Tagged
import Control.Distributed.Process
import Control.Distributed.Raketka.Type.Arg
import Control.Distributed.Raketka.Type.Server
import qualified Control.Distributed.Raketka.Process.Server as S
import Debug.Trace
import Text.Printf


data Slb = Slb  -- ^ Stateless ByteString   

type Server_slb = Server (Set ProcessId) ()


instance Specific Slb (Set ProcessId) () ByteString where
    handleMessage::Tagged Slb Server_slb -> ByteString -> Process ()
    handleMessage serv0 msg0 =
        trace "handleMessage" $ 
        pure ()  --  todo 

    startServer::Tagged Slb ServerId -> Process ()
    startServer (Tagged id0) = server id0

    onPeerConnected::Tagged Slb Server_slb -> ProcessId -> Process ()
    onPeerConnected (Tagged s0) pid0 =
        say $ printf "connected to %s" pid0
    
    onPeerDisConnected::Tagged Slb Server_slb -> ProcessId -> Process ()
    onPeerDisConnected (Tagged s0) pid0 =
        say $ printf "disconnected %s" pid0


server::ServerId -> Process ()
server id0 = newServer' >>= flip S.server id0


newServer'::Process (Tagged Slb Server_slb)
newServer' = S.newServer () S.empty