packages feed

remote-0.1: examples/tests/Test-Channel.hs

{-# LANGUAGE TemplateHaskell,DeriveDataTypeable #-}
module Main where

-- Simple example of putting data in a channel
-- and then taking it out.	

import Remote

import Data.Binary (Binary,get,put)
import Data.Char (isUpper)
import Data.Generics (Data)
import Data.Typeable (Typeable)
import Prelude hiding (catch)
import Data.Typeable (typeOf)
import Control.Monad.Trans
import Control.Exception
import Control.Monad
import Data.Maybe (fromJust)
import Control.Concurrent

initialProcess "NODE" = do

              (sendchan,recvchan) <- newChannel

              a <- spawnLocal $ do
                              sendChannel sendchan "hi"
                              sendChannel sendchan "lumpy"
                              liftIO $ threadDelay 1000000
                              sendChannel sendchan "spatula"
                              sendChannel sendchan "noodle"
                              mapM_ (sendChannel sendchan) (map show [1..1000])
              liftIO $ threadDelay 500000
              receiveChannel recvchan >>= liftIO . print
              receiveChannel recvchan >>= liftIO . print
              receiveChannel recvchan >>= liftIO . print
              receiveChannel recvchan >>= liftIO . print
              receiveChannel recvchan >>= liftIO . print
              receiveChannel recvchan >>= liftIO . print
              receiveChannel recvchan >>= liftIO . print
              receiveChannel recvchan >>= liftIO . print
              receiveChannel recvchan >>= liftIO . print
              receiveChannel recvchan >>= liftIO . print



main = remoteInit (Just "config") [] initialProcess